Hello H.J.

i686-Darwin, m32, ObjC is still broken from the patch to "Add 
OPTION_MASK_ISA_X86_64 and support TARGET_BI_ARCH == 2"

As I pointed out in [1], in the case of the NeXT runtime, the ABI and 
exceptions model depend on the multi-lib.

Currently, the exceptions model is set from C_COMMON_OVERRIDE_OPTIONS, which is 
called before SUBTARGET_OVERRIDE_OPTIONS.  

However, following your change, the User's multi-lib choice is no longer valid 
when C_COMMON_OVERRIDE_OPTIONS is called, therefore I propose to move the tests 
to SUBSUBTARGET_OVERRIDE_OPTIONS (darwin_override_options).

OK for trunk?
Iain

[1]
http://gcc.gnu.org/ml/gcc-patches/2012-04/msg00393.html

gcc:

        * config/darwin.h (SUBTARGET_C_COMMON_OVERRIDE_OPTIONS): Move NeXT 
runtime
        exceptions model setting from here ...
        * config/darwin.c (darwin_override_options): ... to here.

Index: gcc/config/darwin.c
===================================================================
--- gcc/config/darwin.c (revision 188918)
+++ gcc/config/darwin.c (working copy)
@@ -3007,6 +3007,18 @@ darwin_override_options (void)
       flag_reorder_blocks = 1;
     }
 
+    /* FIXME: flag_objc_sjlj_exceptions is no longer needed since there is only
+       one valid choice of exception scheme for each runtime.  */
+    if (!global_options_set.x_flag_objc_sjlj_exceptions)
+      global_options.x_flag_objc_sjlj_exceptions = 
+                               flag_next_runtime && !TARGET_64BIT;
+
+    /* FIXME: and this could be eliminated then too.  */
+    if (!global_options_set.x_flag_exceptions
+       && flag_objc_exceptions
+       && TARGET_64BIT)
+      flag_exceptions = 1;
+
   if (flag_mkernel || flag_apple_kext)
     {
       /* -mkernel implies -fapple-kext for C++ */
Index: gcc/config/darwin.h
===================================================================
--- gcc/config/darwin.h (revision 188918)
+++ gcc/config/darwin.h (working copy)
@@ -140,9 +140,6 @@ extern GTY(()) int darwin_ms_struct;
   } while (0)
 
 #define SUBTARGET_C_COMMON_OVERRIDE_OPTIONS do {                        \
-    if (!global_options_set.x_flag_objc_sjlj_exceptions)               \
-      global_options.x_flag_objc_sjlj_exceptions =                     \
-                               flag_next_runtime && !TARGET_64BIT;     \
     if (flag_mkernel || flag_apple_kext)                               \
       {                                                                        
\
        if (flag_use_cxa_atexit == 2)                                   \

Reply via email to