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.

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)

Reply via email to