Aug 3, 2024 20:33:11 Willy Tarreau w@1wt.eu:
On Sat, Aug 03, 2024 at 08:28:08PM +0200, Thomas Weißschuh wrote:
I think that it can resolve to roughly this:
#if defined(__has_attribute) && __has_attribute(naked) # define __entrypoint __attribute__((naked)) # define __entrypoint_epilogue() #else # define __entrypoint __attribute__((optimize("Os", "omit-frame-pointer"))) # define __entrypoint_epilogue() __builtin_unreachable() #endif
We would need to duplicate the define for the !defined(__has_attribute) case.
I don't understand why. Above both are tested on the first line. Am I missing something ?
This specifically does not work [0]:
a result, combining the two tests into a single expression as shown below would only be valid with a compiler that supports the operator but not with others that don’t.
I wanted to avoid that duplication.
What do you think ?
With the reasoning above I'll let you choose.
I'm fine with avoiding duplication, I just don't understand why there should be.
Willy
[0] https://gcc.gnu.org/onlinedocs/cpp/_005f_005fhas_005fattribute.html