Skip to content

Commit fe675e3

Browse files
Fix build with GCC < 11: [[fallthrough]] is supported but not allowed in C
I think GCC says `__has_cpp_attribute(fallthrough)` is true because C++ supports it (it means "has C++ attribute"), but that doesn't apply to the C language. This causes a compilation error: ``` compilersupport_p.h:57:41: error: expected expression before '[' token 57 | # define CBOR_FALLTHROUGH [[fallthrough]] | ^ cborparser.c:225:13: note: in expansion of macro 'CBOR_FALLTHROUGH' 225 | CBOR_FALLTHROUGH; | ^~~~~~~~~~~~~~~~ ``` Instead, we should use the C23 `__has_c_attribute` to detect the C attribute. Fixes #293. Signed-off-by: Thiago Macieira <thiago.macieira@intel.com>
1 parent 6d932c0 commit fe675e3

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

src/compilersupport_p.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,14 @@
5252
# define cbor_static_assert(x) ((void)sizeof(char[2*!!(x) - 1]))
5353
#endif
5454

55-
#if defined(__has_cpp_attribute) // C23 and C++17
55+
#if defined(__has_cpp_attribute) && defined(__cplusplus) // C++17
5656
# if __has_cpp_attribute(fallthrough)
5757
# define CBOR_FALLTHROUGH [[fallthrough]]
5858
# endif
59+
#elif defined(__has_c_attribute) && !defined(__cplusplus) // C23
60+
# if __has_c_attribute(fallthrough)
61+
# define CBOR_FALLTHROUGH [[fallthrough]]
62+
# endif
5963
#endif
6064
#ifndef CBOR_FALLTHROUGH
6165
# ifdef __GNUC__

0 commit comments

Comments
 (0)