expr_promote_trad.c revision 1.1
11.1Srillig/*	$NetBSD: expr_promote_trad.c,v 1.1 2021/08/16 20:11:03 rillig Exp $	*/
21.1Srillig# 3 "expr_promote_trad.c"
31.1Srillig
41.1Srillig/*
51.1Srillig * Test arithmetic promotions in traditional C.
61.1Srillig */
71.1Srillig
81.1Srillig/* lint1-flags: -tw */
91.1Srillig
101.1Srilligsink();
111.1Srillig
121.1Srilligstruct arithmetic_types {
131.1Srillig	/* _Bool is not available in traditional C */
141.1Srillig	char plain_char;
151.1Srillig	/* signed char is not available in traditional C */
161.1Srillig	unsigned char unsigned_char;
171.1Srillig	short signed_short;
181.1Srillig	unsigned short unsigned_short;
191.1Srillig	int signed_int;
201.1Srillig	unsigned int unsigned_int;
211.1Srillig	long signed_long;
221.1Srillig	unsigned long unsigned_long;
231.1Srillig	/* (unsigned) long long is not available in traditional C */
241.1Srillig	/* __int128_t is not available in traditional C */
251.1Srillig	/* __uint128_t is not available in traditional C */
261.1Srillig	float single_floating;
271.1Srillig	double double_floating;
281.1Srillig	/* long double is not available in traditional C */
291.1Srillig	/* _Complex is not available in traditional C */
301.1Srillig};
311.1Srillig
321.1Srilligcaller(arg)
331.1Srillig	struct arithmetic_types *arg;
341.1Srillig{
351.1Srillig	sink("",
361.1Srillig	    arg->plain_char,		/* gets promoted to 'int' */
371.1Srillig	    arg->unsigned_char,		/* gets promoted to 'unsigned int' */
381.1Srillig	    arg->signed_short,		/* gets promoted to 'int' */
391.1Srillig	    arg->unsigned_short,	/* gets promoted to 'unsigned int' */
401.1Srillig	    arg->signed_int,
411.1Srillig	    arg->unsigned_int,
421.1Srillig	    arg->signed_long,
431.1Srillig	    arg->unsigned_long,
441.1Srillig	    arg->single_floating,	/* gets promoted to 'double' */
451.1Srillig	    arg->double_floating);
461.1Srillig}
47