[Nauty] Compilation issue with g++: Change "_Noreturn" to "__attribute__((__noreturn__))"

Lluís Alemany Puig lluis.alemany.puig at upc.edu
Thu Jul 18 23:32:30 AEST 2024


Yes, with this change the code now compiles without any problem.

Thanks a lot,

Lluís

On 18/07/2024 14:36, Brendan McKay wrote:
> Hi Lluís,
>
> In the development version of nauty not yet released, nauty-h.in has this
> code sent by Jerry James:
> /* Function noreturn attribute, if any */
> #if (defined(__cplusplus) && __cplusplus >= 202302L) \
>          || (!defined(__cplusplus) && __STDC_VERSION__ >= 202311L)
> #define NORET_ATTR [[noreturn]]
> #elif defined(__cplusplus) && __cplusplus >= 201103L
> #define NORET_ATTR [[_Noreturn]]
> #elif !defined(__cplusplus) && __STDC_VERSION__ >= 201112L
> #define NORET_ATTR _Noreturn
> #elif defined(__GNUC__)
> #define NORET_ATTR __attribute__((noreturn))
> #elif defined(_MSC_VER)
> #define NORET_ATTR __desclspec(noreturn)
> #else
> #define NORET_ATTR
> #endif
> If you make that change and run ./configure again, it should compile 
> properly.
>
> Please let me know if you still have problems.
>
> Cheers, Brendan.
>
> On 18/7/2024 9:16 pm, Lluís Alemany Puig via Nauty wrote:
>> Hello,
>>
>> I've just updated my version of nauty from 2_8_6 to 2_8_8 in my C++ 
>> project and it no longer compiles. The issue is due to the attribute 
>> _Noreturn (used to define NORET_ATTR and, in turn used to define 
>> gt_abort) which is not part of the C++ standard and g++ (version 
>> 11.4.0) does not accept it. I changed the definition of NORET_ATTR in 
>> nauty.h from
>>
>>    #define NORET_ATTR _Noreturn
>>
>> to
>>
>>    #define NORET_ATTR __attribute__((__noreturn__))
>>
>> and now g++ no longer complains. These two definitions are equivalent 
>> (see this question 
>> <https://stackoverflow.com/questions/28552467/is-there-a-way-to-use-gcc-attribute-noreturn-and-stdnoreturn-h-sanely-i 
>> in stackoverflow). ChatGPT tells me that as long as I use -std=c++17 
>> (or some other standard newer than C++11, which I already do) the 
>> code should compile, but I could not get it to work this way. Maybe 
>> _Noreturn clashes with some other necessary flag that I use in my 
>> project.
>>
>> I would like to ask nauty's developers to change '_Noreturn' to 
>> '__attribute__((__noreturn__))' all C++ programmers out there who use 
>> Nauty.
>>
>> Best,
>>
>> Lluís
>> _______________________________________________
>> Nauty mailing list
>> Nauty at anu.edu.au
>> https://mailman.anu.edu.au/mailman/listinfo/nauty
>


More information about the Nauty mailing list