Home | History | Annotate | Line # | Download | only in lint1
gcc.c revision 1.2
      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