Home | History | Annotate | Line # | Download | only in lint1
gcc_attribute_label.c revision 1.4.2.1
      1  1.4.2.1  perseant /*	$NetBSD: gcc_attribute_label.c,v 1.4.2.1 2025/08/02 05:58:14 perseant Exp $	*/
      2      1.1    rillig # 3 "gcc_attribute_label.c"
      3      1.1    rillig 
      4      1.1    rillig /*
      5      1.1    rillig  * Tests for the GCC __attribute__ for labels.
      6      1.1    rillig  *
      7      1.1    rillig  * https://gcc.gnu.org/onlinedocs/gcc/Label-Attributes.html
      8      1.1    rillig  */
      9      1.1    rillig 
     10      1.4    rillig /* lint1-extra-flags: -X 351 */
     11      1.4    rillig 
     12      1.1    rillig void dead(void);
     13      1.1    rillig 
     14      1.1    rillig void
     15      1.1    rillig test(int i)
     16      1.1    rillig {
     17      1.1    rillig 	if (i < 1000)
     18      1.1    rillig 		goto hot;
     19      1.1    rillig error:
     20  1.4.2.1  perseant 	__attribute__((__cold__)) __attribute__((__cold__));
     21      1.1    rillig 	dead();
     22      1.1    rillig 
     23      1.1    rillig hot:
     24  1.4.2.1  perseant 	__attribute__((__hot__)) __attribute__((__hot__));
     25      1.1    rillig 	if (i < 0)
     26      1.1    rillig 		goto error;
     27      1.1    rillig }
     28      1.3    rillig 
     29      1.3    rillig /* GCC allows a label to be marked as (possibly) unused. */
     30      1.3    rillig void
     31      1.3    rillig unused_labels(int x)
     32      1.3    rillig {
     33      1.3    rillig 	switch (x) {
     34      1.3    rillig 	case 3:
     35      1.3    rillig 		__attribute__((__unused__))
     36      1.3    rillig 		break;
     37      1.3    rillig 	case 4:
     38      1.3    rillig 		goto label;
     39      1.3    rillig 	label:
     40      1.3    rillig 		__attribute__((__unused__))
     41      1.3    rillig 		return;
     42      1.3    rillig 	}
     43      1.3    rillig 
     44      1.3    rillig 	/*
     45      1.3    rillig 	 * The GCC attributes may only occur after a label; they cannot occur
     46      1.3    rillig 	 * before an arbitrary statement.
     47      1.3    rillig 	 */
     48      1.3    rillig 	__attribute__((__unused__))
     49      1.3    rillig 	/* expect+1: error: syntax error 'return' [249] */
     50      1.3    rillig 	return;
     51      1.3    rillig }
     52