1 1.2 rillig /* $NetBSD: gcc.c,v 1.2 2024/06/08 11:55:40 rillig Exp $ */ 2 1.1 rillig # 3 "gcc.c" 3 1.1 rillig 4 1.1 rillig /* 5 1.1 rillig * Miscellaneous tests that are specific to lint's GCC mode. 6 1.1 rillig */ 7 1.1 rillig 8 1.1 rillig /* lint1-extra-flags: -X 351 */ 9 1.1 rillig 10 1.1 rillig // Before C99 introduced __func__, GCC already had __FUNCTION__ with the same 11 1.1 rillig // semantics. 12 1.1 rillig const char * 13 1.1 rillig gcc_function(void) 14 1.1 rillig { 15 1.2 rillig /* expect+1: error: negative array dimension (-13) [20] */ 16 1.2 rillig typedef int size[-(int)sizeof __FUNCTION__]; 17 1.1 rillig 18 1.1 rillig return __FUNCTION__; 19 1.1 rillig } 20 1.1 rillig 21 1.1 rillig // Before C99 introduced designators in initializers, GCC already had them, 22 1.1 rillig // although with a different syntax for struct/union members and with the 23 1.1 rillig // a...b for ranges of array elements. 24 1.1 rillig int array_range_initializers[256] = { 25 1.1 rillig [2] = 1, 26 1.1 rillig [3] = 2, 27 1.1 rillig [4 ... 5] = 3 28 1.1 rillig }; 29 1.1 rillig 30 1.1 rillig _Bool dbl_isinf(double); 31 1.1 rillig 32 1.1 rillig // Test that the GCC '__extension__' and '__typeof' are recognized. 33 1.1 rillig void 34 1.1 rillig extension_and_typeof(void) 35 1.1 rillig { 36 1.1 rillig double __logbw = 1; 37 1.1 rillig if (__extension__(({ 38 1.1 rillig __typeof((__logbw)) x_ = (__logbw); 39 1.1 rillig !dbl_isinf((x_)); 40 1.1 rillig }))) 41 1.1 rillig __logbw = 1; 42 1.1 rillig } 43 1.1 rillig 44 1.1 rillig int 45 1.1 rillig range_in_case_label(int i) 46 1.1 rillig { 47 1.1 rillig switch (i) { 48 1.1 rillig case 1 ... 40: // This is a GCC extension. 49 1.1 rillig return 1; 50 1.1 rillig default: 51 1.1 rillig return 2; 52 1.1 rillig } 53 1.1 rillig } 54