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