Patchwork PR target/54160: Only set __OBJC2__ when compiling OBJC.

login
register
mail settings
Submitter Aldy Hernandez
Date Dec. 4, 2012, 10:25 p.m.
Message ID <50BE7844.8000409@redhat.com>
Download mbox | patch
Permalink /patch/203741/
State New
Headers show

Comments

Aldy Hernandez - Dec. 4, 2012, 10:25 p.m.
The problem here is that we are setting __OBJC2__ regardless of what 
language we are compiling.

Tested by building a cross cc1/cc1obj for x86_64-unknown-darwin, and 
doing the following:

reynosa:/build/trunk-darwin-objc/gcc$ echo "" | ./cc1obj  -E -dM - 
-quiet |grep OBJ
#define __OBJC__ 1
#define __OBJC2__ 1
reynosa:/build/trunk-darwin-objc/gcc$ echo "" | ./cc1  -E -dM - -quiet 
|grep OBJ

It would be nice if someone with access to a Darwin build system could 
test this further, but this at least fixes the PR.

OK for trunk?
PR target/54160
	* config/t-darwin: Depend on CPP_INTERNAL_H.
	* config/darwin-c.c (darwin_cpp_builtins): Only set __OBJC2__ when
	in obj mode.
	Include libcpp/internal.h.
Aldy Hernandez - Dec. 5, 2012, 2:56 p.m.
Hi gentlemen.

Just in case you missed this post.  This only affects Darwin, so it's 
technically not just an Objective C problem.  This problem came about 
with Ian Sandoe's patch of rev@170260.  The CPP builtin "__OBJC2__" is 
only set for Darwin.

FYI, in this patch I followed the way we currently set __OBJC__ in 
libcpp/init.c:

   if (CPP_OPTION (pfile, objc))
     _cpp_define_builtin (pfile, "__OBJC__ 1");

I hope this helps in reviewing the patch.

Thanks.

On 12/04/12 16:25, Aldy Hernandez wrote:
> The problem here is that we are setting __OBJC2__ regardless of what
> language we are compiling.
>
> Tested by building a cross cc1/cc1obj for x86_64-unknown-darwin, and
> doing the following:
>
> reynosa:/build/trunk-darwin-objc/gcc$ echo "" | ./cc1obj  -E -dM -
> -quiet |grep OBJ
> #define __OBJC__ 1
> #define __OBJC2__ 1
> reynosa:/build/trunk-darwin-objc/gcc$ echo "" | ./cc1  -E -dM - -quiet
> |grep OBJ
>
> It would be nice if someone with access to a Darwin build system could
> test this further, but this at least fixes the PR.
>
> OK for trunk?

Patch

diff --git a/gcc/config/darwin-c.c b/gcc/config/darwin-c.c
index 8e48c30..ec8aa9c 100644
--- a/gcc/config/darwin-c.c
+++ b/gcc/config/darwin-c.c
@@ -38,6 +38,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "c-family/c-target.h"
 #include "c-family/c-target-def.h"
 #include "cgraph.h"
+#include "../../libcpp/internal.h"
 
 /* Pragmas.  */
 
@@ -632,7 +633,7 @@  darwin_cpp_builtins (cpp_reader *pfile)
       builtin_define ("__weak=");
     }
 
-  if (flag_objc_abi == 2)
+  if (CPP_OPTION (pfile, objc) && flag_objc_abi == 2)
     builtin_define ("__OBJC2__");
 }
 
diff --git a/gcc/config/t-darwin b/gcc/config/t-darwin
index e2bd74d..0e8346b 100644
--- a/gcc/config/t-darwin
+++ b/gcc/config/t-darwin
@@ -29,7 +29,7 @@  darwin.o: $(srcdir)/config/darwin.c $(CONFIG_H) $(SYSTEM_H) coretypes.h     \
 
 darwin-c.o: $(srcdir)/config/darwin-c.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
   $(TM_H) $(CPPLIB_H) $(TREE_H) $(C_PRAGMA_H) $(TM_P_H) \
-  incpath.h flags.h $(C_COMMON_H) $(C_TARGET_H) $(C_TARGET_DEF_H)
+  incpath.h flags.h $(C_COMMON_H) $(C_TARGET_H) $(C_TARGET_DEF_H) $(CPP_INTERNAL_H)
 	$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
 		$(srcdir)/config/darwin-c.c $(PREPROCESSOR_DEFINES)