gcc_attribute_stmt.c revision 1.1
11.1Srillig/*	$NetBSD: gcc_attribute_stmt.c,v 1.1 2021/07/06 17:33:07 rillig Exp $	*/
21.1Srillig# 3 "gcc_attribute_stmt.c"
31.1Srillig
41.1Srillig/*
51.1Srillig * Tests for the GCC __attribute__ for statements.
61.1Srillig *
71.1Srillig * https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html
81.1Srillig */
91.1Srillig
101.1Srilligvoid println(const char *);
111.1Srillig
121.1Srilligvoid
131.1Srilligattribute_fallthrough(int i)
141.1Srillig{
151.1Srillig	switch (i) {
161.1Srillig	case 5:
171.1Srillig		/*
181.1Srillig		 * The attribute 'fallthrough' is only valid after a
191.1Srillig		 * preceding statement. This is already caught by GCC, so
201.1Srillig		 * lint does not need to care.
211.1Srillig		 */
221.1Srillig		__attribute__((__fallthrough__));
231.1Srillig	case 3:
241.1Srillig		println("odd");
251.1Srillig		__attribute__((__fallthrough__));
261.1Srillig	case 2:
271.1Srillig		/*
281.1Srillig		 * Only the null statement can have the attribute
291.1Srillig		 * 'fallthrough'. This is already caught by GCC, so
301.1Srillig		 * lint does not need to care.
311.1Srillig		 */
321.1Srillig		/* expect+2: error: syntax error '__attribute__' [249] */
331.1Srillig		println("prime")
341.1Srillig		    __attribute__((__fallthrough__));
351.1Srillig	}
361.1Srillig}
37