1*b2baa501Srillig /* $NetBSD: gcc_attribute_stmt.c,v 1.4 2023/03/28 14:44:34 rillig Exp $ */ 2b4c7d7a7Srillig # 3 "gcc_attribute_stmt.c" 3b4c7d7a7Srillig 4b4c7d7a7Srillig /* 5b4c7d7a7Srillig * Tests for the GCC __attribute__ for statements. 6b4c7d7a7Srillig * 7b4c7d7a7Srillig * https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html 8b4c7d7a7Srillig */ 9b4c7d7a7Srillig 10*b2baa501Srillig /* lint1-extra-flags: -X 351 */ 11*b2baa501Srillig 12b4c7d7a7Srillig void println(const char *); 13b4c7d7a7Srillig 14b4c7d7a7Srillig void attribute_fallthrough(int i)15b4c7d7a7Srilligattribute_fallthrough(int i) 16b4c7d7a7Srillig { 17b4c7d7a7Srillig switch (i) { 18b4c7d7a7Srillig case 5: 19b4c7d7a7Srillig /* 20b4c7d7a7Srillig * The attribute 'fallthrough' is only valid after a 21b4c7d7a7Srillig * preceding statement. This is already caught by GCC, so 22b4c7d7a7Srillig * lint does not need to care. 23b4c7d7a7Srillig */ 24b4c7d7a7Srillig __attribute__((__fallthrough__)); 25b4c7d7a7Srillig case 3: 26b4c7d7a7Srillig println("odd"); 27b4c7d7a7Srillig __attribute__((__fallthrough__)); 28b4c7d7a7Srillig case 2: 29b4c7d7a7Srillig /* 30b4c7d7a7Srillig * Only the null statement can have the attribute 31b4c7d7a7Srillig * 'fallthrough'. This is already caught by GCC, so 32b4c7d7a7Srillig * lint does not need to care. 33b4c7d7a7Srillig */ 34b4c7d7a7Srillig /* expect+2: error: syntax error '__attribute__' [249] */ 35b4c7d7a7Srillig println("prime") 36b4c7d7a7Srillig __attribute__((__fallthrough__)); 37b4c7d7a7Srillig } 38b4c7d7a7Srillig } 39