Hi Joe, Thanks for the report.
> Le 3 janv. 2021 à 19:23, Joe Nelson <[email protected]> a écrit : > > When I enable %glr-parser, it generates two functions marked with > _Noreturn: > > _Noreturn static void > yyFail (yyGLRStack* yystackp, void *scanner, const char* yymsg) > > _Noreturn static void > yyMemoryExhausted (yyGLRStack* yystackp) > > Since my compile flags include -std=c99 -pedantic, clang warns me: > > warning: _Noreturn functions are a C11-specific feature > > The generated parser tries to define _Noreturn appropriately with these > preprocessor rules: > > /* The _Noreturn keyword of C11. */ > #ifndef _Noreturn > # if (defined __cplusplus \ > && ((201103 <= __cplusplus && !(__GNUC__ == 4 && > __GNUC_MINOR__ == 7)) \ > || (defined _MSC_VER && 1900 <= _MSC_VER))) > # define _Noreturn [[noreturn]] > # elif (!defined __cplusplus \ > && (201112 <= (defined __STDC_VERSION__ ? > __STDC_VERSION__ : 0) \ > || 4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ > || (defined __apple_build_version__ \ > ? 6000000 <= __apple_build_version__ \ > : 3 < __clang_major__ + (5 <= > __clang_minor__)))) > /* _Noreturn works as-is. */ > # elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C > # define _Noreturn __attribute__ ((__noreturn__)) > # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) > # define _Noreturn __declspec (noreturn) > # else > # define _Noreturn > # endif > #endif > > However I confirmed it's hitting the condition marked > /* _Noreturn works as-is. */ > whereas I would like it to respect the value of __STDC_VERSION__ that I > set with the -std=c99 compiler flag. I'm not sure of the history behind > the preprocessor checks in that section, but maybe you could simplify > and go primarily by the stdc version? > > Here are the values of the macros in my environment: > > #define __GNUC__ 4 > #define __GNUC_MINOR__ 2 > #define __STDC_VERSION__ 199901L > #define __apple_build_version__ 10001145 > #define __clang_major__ 10 > #define __clang_minor__ 0 > > Here are my compiler and bison version: > > Bison 3.7.4 > Clang > Apple LLVM version 10.0.0 (clang-1000.11.45.5) > Target: x86_64-apple-darwin17.7.0 This piece of code comes from gnulib (well, it was copied-pasted from there). This place is touchy and already pretty hairy. I don't want to depart from what gnulib does. After all, this is only a warning. If Paul wants to give it a shot, that would be fine. But I won't. Cheers!
