On 6/2/20 7:29 PM, Eric Blake wrote: > Because: > > #if MIN(...) > > now fails to compile (you can't have { in a preprocessor expression), and: > > #if MIN_CONST(...) > > fails to compile (__builtin_constant_p() is not a preprocessor macro, so it > warns that it is being treated as 0). The only fix is to move the MIN() out > of > the #if and into the #define.
Ah, right. Thanks. >> Is it possible to use qemu_build_not_reached? > > Possibly. > > /me goes and recompiles; touching osdep.h recompiles the world... > > No, it blows up hard, because qemu_build_not_reached() is not embeddable in an > expression: Ah, right, because without -O, qemu_build_not_reached expands to g_assert_not_reached and not to a symbol marked with QEMU_ERROR. >> I'd prefer we generate a compile-time error than a runtime trap (or nothing, >> depending on compiler flags controlling __builtin_unreachable). > > What we have DOES produce a compile-time error. If either expression to > MIN_CONST() is not actually const, the fact that __builtin_unreachable() > returns void causes a compilation failure because a value is expected. Ah! Well, that's good and certainly sufficient for my needs. I do now wonder if it wouldn't be clearer to use "(void)0" instead of __builtin_unreachable, and add a note to the comment just above. r~