Message ID | 20150401084028.GJ19273@tucnak.redhat.com |
---|---|
State | New |
Headers | show |
On Wed, Apr 1, 2015 at 10:40 AM, Jakub Jelinek wrote: > Hi! > > The context sensitive macros are inherently C/C++ specific, so trying to > expand them into anything when preprocessing assembler doesn't make any > sense to me. Why are the <arch>-c.c cpp builtins defined at all when preprocessing assembly? Or in other words: should these (supposedly) language-dependent hooks for cpp builtins be called if the pre-processor is called stand-alone? Ciao! Steven
On Wed, Apr 01, 2015 at 10:57:10AM +0200, Steven Bosscher wrote: > On Wed, Apr 1, 2015 at 10:40 AM, Jakub Jelinek wrote: > > Hi! > > > > The context sensitive macros are inherently C/C++ specific, so trying to > > expand them into anything when preprocessing assembler doesn't make any > > sense to me. > > Why are the <arch>-c.c cpp builtins defined at all when preprocessing > assembly? Or in other words: should these (supposedly) > language-dependent hooks for cpp builtins be called if the > pre-processor is called stand-alone? The preprocessor, whether invoked through cpp or gcc driver, is still the C (or C++) FE, and when it doesn't preprocess with -x assembler-with-cpp, it still preprocesses C and has to define these. Most of the macros <arch>-c.c defines are needed for assembler preprocessing too, lots of things would break if there wouldn't be on x86_64 say __x86_64__ define. My patch disables just the clearly C/C++ specific macros, I mean defining __vector to __attribute__((...)) where the definition has C/C++ syntax clearly isn't very useful in assembler, and vector contextual macro that expands sometimes to something C specific neither. Jakub
On Wed, Apr 1, 2015 at 4:40 AM, Jakub Jelinek <jakub@redhat.com> wrote: > Hi! > > The context sensitive macros are inherently C/C++ specific, so trying to > expand them into anything when preprocessing assembler doesn't make any > sense to me. > > Ok for trunk? > > 2015-04-01 Jakub Jelinek <jakub@redhat.com> > > PR preprocessor/61977 > * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Don't > predefine __vector/__bool/__pixel macros nor context sensitive > macros for CLK_ASM. > * config/spu/spu-c.c (spu_cpu_cpp_builtins): Similarly. Okay. Thanks, David
--- gcc/config/rs6000/rs6000-c.c.jj 2015-01-09 22:00:06.000000000 +0100 +++ gcc/config/rs6000/rs6000-c.c 2015-04-01 10:31:19.127603956 +0200 @@ -420,7 +420,7 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfi if (TARGET_FRSQRTES) builtin_define ("__RSQRTEF__"); - if (TARGET_EXTRA_BUILTINS) + if (TARGET_EXTRA_BUILTINS && cpp_get_options (pfile)->lang != CLK_ASM) { /* Define the AltiVec syntactic elements. */ builtin_define ("__vector=__attribute__((altivec(vector__)))"); --- gcc/config/spu/spu-c.c.jj 2015-01-09 22:00:01.000000000 +0100 +++ gcc/config/spu/spu-c.c 2015-04-01 10:33:20.473610886 +0200 @@ -203,7 +203,8 @@ spu_cpu_cpp_builtins (struct cpp_reader cpp_assert (pfile, "machine=spu"); if (spu_arch == PROCESSOR_CELLEDP) cpp_define (pfile, "__SPU_EDP__"); - cpp_define (pfile, "__vector=__attribute__((__spu_vector__))"); + if (cpp_get_options (pfile)->lang != CLK_ASM) + cpp_define (pfile, "__vector=__attribute__((__spu_vector__))"); switch (spu_ea_model) { case 32: @@ -216,7 +217,7 @@ spu_cpu_cpp_builtins (struct cpp_reader gcc_unreachable (); } - if (!flag_iso) + if (!flag_iso && cpp_get_options (pfile)->lang != CLK_ASM) { /* Define this when supporting context-sensitive keywords. */ cpp_define (pfile, "__VECTOR_KEYWORD_SUPPORTED__");