Skip to content

Commit 8875d23

Browse files
committed
Use __attribute__((fallthrough)) on CLang
Fixes #427
1 parent bf254c7 commit 8875d23

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

src/c99-flex.skl

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,10 @@ m4_define([[M4_HOOK_STATE_ENTRY_FORMAT]], [[ &yy_transition[$1],
5252
]])
5353
m4_define([[M4_HOOK_NORMAL_STATE_CASE_ARM]], [[ case $1:]])
5454
m4_define([[M4_HOOK_EOF_STATE_CASE_ARM]], [[ case YY_STATE_EOF($1):]])
55-
m4_define([[M4_HOOK_EOF_STATE_CASE_FALLTHROUGH]], [[ /* FALLTHROUGH */]])
55+
m4_define([[M4_HOOK_EOF_STATE_CASE_FALLTHROUGH]], [[
56+
yyfallthrough
57+
/* FALLTHROUGH */
58+
]])
5659
m4_define([[M4_HOOK_EOF_STATE_CASE_TERMINATE]], [[ yyterminate();
5760
]])
5861
m4_define([[M4_HOOK_TAKE_YYTEXT]], [[yy_do_before_action(yyscanner, yy_cp, yy_bp); /* set up yytext */]])
@@ -229,6 +232,22 @@ m4_ifdef( [[M4_YY_ALWAYS_INTERACTIVE]], ,
229232
#define yynoreturn
230233
#endif
231234

235+
m4_changequote(<<, >>)
236+
237+
#if defined(__has_c_attribute)
238+
#if __has_c_attribute(fallthrough)
239+
#define yyfallthrough [[fallthrough]];
240+
#endif
241+
#elif defined(__has_attribute)
242+
#if __has_attribute (fallthrough)
243+
#define yyfallthrough __attribute__((fallthrough));
244+
#endif
245+
#else
246+
#define yyfallthrough
247+
#endif
248+
249+
m4_changequote([[, ]])
250+
232251
/*
233252
* Anywhere other than C this won't be a thing,
234253
* because strings will have an associated length field.

src/cpp-flex.skl

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ m4_define([[M4_HOOK_STATE_ENTRY_FORMAT]], [[ &yy_transition[$1],
4242
]])
4343
m4_define([[M4_HOOK_NORMAL_STATE_CASE_ARM]], [[ case $1:]])
4444
m4_define([[M4_HOOK_EOF_STATE_CASE_ARM]], [[ case YY_STATE_EOF($1):]])
45-
m4_define([[M4_HOOK_EOF_STATE_CASE_FALLTHROUGH]], [[ /* FALLTHROUGH */]])
45+
m4_define([[M4_HOOK_EOF_STATE_CASE_FALLTHROUGH]], [[
46+
yyfallthrough
47+
/* FALLTHROUGH */
48+
]])
4649
m4_define([[M4_HOOK_EOF_STATE_CASE_TERMINATE]], [[ yyterminate();
4750
]])
4851
m4_define([[M4_HOOK_TAKE_YYTEXT]], [[YY_DO_BEFORE_ACTION; /* set up yytext */]])
@@ -301,6 +304,22 @@ m4preproc_include(`flexint_shared.h')
301304
#define yynoreturn
302305
#endif
303306

307+
m4_changequote(<<, >>)
308+
309+
#if defined(__has_cpp_attribute)
310+
#if __has_cpp_attribute(fallthrough)
311+
#define yyfallthrough [[fallthrough]];
312+
#endif
313+
#elif defined(__has_attribute)
314+
#if __has_attribute (fallthrough)
315+
#define yyfallthrough __attribute__((fallthrough));
316+
#endif
317+
#else
318+
#define yyfallthrough
319+
#endif
320+
321+
m4_changequote([[, ]])
322+
304323
m4_ifdef( [[M4_YY_IN_HEADER]],,[[m4_dnl
305324
/* Returned upon end-of-file. */
306325
#define YY_NULL 0

0 commit comments

Comments
 (0)