https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85635
--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Those many people do build gnat. I do it in all my bootstraps, many other people working on gcc do. And if you don't know how the C preprocessor works in this case, why don't you just try that out? #if defined (A) int a; #elif defined (B) || defined (C) \ || defined (D) || defined (E) || defined (F) int b; #elif defined (G) int c; #else int d; #endif $ gcc -P -E -DA /tmp/j.c int a; $ gcc -P -E -DB /tmp/j.c || defined (F) int b; This preprocesses fine, but is not valid C. $ gcc -P -E -DG /tmp/j.c int c; $ gcc -P -E -DH /tmp/j.c int d;