https://gcc.gnu.org/bugzilla/show_bug.cgi?id=46073

--- Comment #5 from Joseph S. Myers <jsm28 at gcc dot gnu.org> ---
It's doubtful that this is a bug. You could define __builtin_choose_expr so the
unselected operand only needs to be a balanced token sequence (with no commas
unless nested inside () [] {}), but it's less clear that you should; there are
disadvantages to not checking unselected operands as well as advantages. (Cf.
how it's often better to use if () rather than #if for conditionals on
compile-time constants so that more of the syntax gets checked in all build
configurations.)

(Technically, some valid code could change its semantics if you start treating
one half as only a balanced token sequence - struct / union / enum types
defined inside the unselected expression would no longer get declared for the
rest of the scope - but I think that could safely be ignored, just included in
the tests added, if we decide to make such a change.)

Reply via email to