Reverted usage of TARGET_64BIT for code generation for GNU Objective-C runtime
authorNicola Pero <nicola.pero@meta-innovation.com>
Sun, 20 Feb 2011 17:52:44 +0000 (17:52 +0000)
committerNicola Pero <nicola@gcc.gnu.org>
Sun, 20 Feb 2011 17:52:44 +0000 (17:52 +0000)
From-SVN: r170343

gcc/objc/ChangeLog
gcc/objc/objc-act.c
gcc/objc/objc-gnu-runtime-abi-01.c
gcc/testsuite/ChangeLog
gcc/testsuite/obj-c++.dg/selector-3.mm
gcc/testsuite/objc.dg/layout-2.m [new file with mode: 0644]
gcc/testsuite/objc.dg/selector-3.m
gcc/testsuite/objc.dg/type-size-3.m

index 9b92980db56a6d373054c2b1d20dcaa1c5e216c8..c2f16ec5557d4862089d663e357534a7728af608 100644 (file)
@@ -1,3 +1,10 @@
+2011-02-19  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * objc-gnu-runtime-abi-01.c (TARGET_64BIT): Removed.  Removed
+       usage of padding fields.  Do not include tm.h.
+       * objc-act.c (objc_write_global_declaration): Set input_location
+       to BUILTINS_LOCATION while generating runtime metadata.
+
 2011-01-19  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        PR objc/47784
index 0cabc52b3b66a7e75471e32a1976b4c41fde08c7..a91c7083173b4193f007459c4a475b1d989e5104 100644 (file)
@@ -466,6 +466,8 @@ objc_write_global_declarations (void)
      and code if only checking syntax, or if generating a PCH file.  */
   if (!flag_syntax_only && !pch_file)
     {
+      location_t saved_location;
+
       /* If gen_declaration desired, open the output file.  */
       if (flag_gen_declaration)
        {
@@ -475,8 +477,24 @@ objc_write_global_declarations (void)
            fatal_error ("can%'t open %s: %m", dumpname);
          free (dumpname);
        }
+
+      /* Set the input location to BUILTINS_LOCATION.  This is good
+        for error messages, in case any is generated while producing
+        the metadata, but it also silences warnings that would be
+        produced when compiling with -Wpadded in case when padding is
+        automatically added to the built-in runtime data structure
+        declarations.  We know about this padding, and it is fine; we
+        don't want users to see any warnings about it if they use
+        -Wpadded.  */
+      saved_location = input_location;
+      input_location = BUILTINS_LOCATION;
+
       /* Compute and emit the meta-data tables for this runtime.  */
       (*runtime.generate_metadata) ();
+
+      /* Restore the original location, just in case it mattered.  */
+      input_location = saved_location;
+
       /* ... and then close any declaration file we opened.  */
       if (gen_declaration_file)
        fclose (gen_declaration_file);
index e2a3ce7b339e455aa81b883a949d85fa6b5d8988..7fb87611d69cbdea4680991c4b2d5011bcc4d32a 100644 (file)
@@ -21,7 +21,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
-#include "tm.h"
 #include "tree.h"
 
 #ifdef OBJCPLUS
@@ -83,11 +82,6 @@ along with GCC; see the file COPYING3.  If not see
   if (VERS)                                                            \
     DECL_ATTRIBUTES (DECL) = build_tree_list ((VERS), (KIND));
 
-/* FIXME: Remove this macro, not needed.  */
-#ifndef TARGET_64BIT
-#define TARGET_64BIT 0
-#endif
-
 static void gnu_runtime_01_initialize (void);
 
 static void build_selector_template (void);
@@ -1995,9 +1989,7 @@ build_objc_symtab_template (void)
   /* short cat_def_cnt; */
   add_field_decl (short_integer_type_node, "cat_def_cnt", &chain);
 
-  /* FIXME: Remove.  */
-  if (TARGET_64BIT)
-    add_field_decl (integer_type_node, "_explicit_padder", &chain);
+  /* Note that padding will be added here on LP64.  */
 
   /* void *defs[imp_count + cat_count (+ 1)]; */
   /* NB: The index is one less than the size of the array.  */
@@ -2043,19 +2035,9 @@ init_objc_symtab (tree type)
   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, 
                          build_int_cst (short_integer_type_node, cat_count));
 
-  /* FIXME: Remove.  */
-  if (TARGET_64BIT)
-    CONSTRUCTOR_APPEND_ELT (v, NULL_TREE,
-                         build_int_cst (integer_type_node, 0));
-
   /* cls_def = { ..., { &Foo, &Bar, ...}, ... } */
 
   field = TYPE_FIELDS (type);
-
-  /* FIXME: Remove.  */
-  if (TARGET_64BIT)
-    field = DECL_CHAIN (field);
-
   field = DECL_CHAIN (DECL_CHAIN (DECL_CHAIN (DECL_CHAIN (field))));
 
   CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init_def_list (TREE_TYPE (field)));
index 6c422367072610cfab2f5a00a454ed34d6d82289..0161ebb947fe4f807b806919380b5161f9010cef 100644 (file)
@@ -1,3 +1,10 @@
+2011-02-19  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * objc.dg/layout-2.m: New.
+       * objc.dg/selector-3.m: Adjusted location of error message.
+       * objc.dg/type-size-3.m: Same.
+       * obj-c++.dg/selector-3.mm: Same.
+
 2011-02-19  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        PR objc/47784
@@ -74,7 +81,7 @@
 2011-02-18  Iain Sandoe  <iains@gcc.gnu.org>
 
        * objc/execute/exceptions/foward-1.x: New.
-       
+
 2011-02-18  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/47789
index 49f7e417208a6047e98af0cdbabd07b2fcc4b8c6..a1321a7b74133c159225fbc844b2a8105d710544 100644 (file)
@@ -22,5 +22,8 @@ typedef const struct objc_selector    *SEL;
   a = @selector(b1ar);
   b = @selector(bar);
 }
-@end /* { dg-warning "creating selector for nonexistent method .b1ar." } */
+@end
+
+/* FIXME: The error message should be on the correct line.  */
+/* { dg-warning "creating selector for nonexistent method .b1ar." "" { target *-*-* } 0 } */
 
diff --git a/gcc/testsuite/objc.dg/layout-2.m b/gcc/testsuite/objc.dg/layout-2.m
new file mode 100644 (file)
index 0000000..474fc04
--- /dev/null
@@ -0,0 +1,14 @@
+/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, February 2011.  */
+/* Ensure that -Wpadded generates no warnings during runtime structure metadata
+   generation.  */
+/* { dg-do compile } */
+/* { dg-options "-Wpadded" } */
+
+#include "../objc-obj-c++-shared/Object1.h"
+
+/* Implement a class, so that the metadata generation happens.  */
+@interface MyClass : Object
+@end
+
+@implementation MyClass
+@end
index b3ffccaca3a392a036226df512661f50c33874d5..c0c5f3d8fba788c2281279ad19c65c5931859805 100644 (file)
@@ -23,5 +23,8 @@ typedef const struct objc_selector    *SEL;
   a = @selector(b1ar);
   b = @selector(bar);
 }
-@end /* { dg-warning "creating selector for nonexistent method .b1ar." } */
+@end
+
+/* FIXME: The error message should be on the correct line.  */
+/* { dg-warning "creating selector for nonexistent method .b1ar." "" { target *-*-* } 0 } */
 
index 9486658853c9f0613fe2cbf3ec8776fd22710571..6d7fe038447c303401fd8e59f5def43000596209 100644 (file)
@@ -15,4 +15,6 @@ typedef struct
 @end
 
 @implementation Test
-@end /* { dg-error "instance variable has unknown size" } */
+@end
+
+/* { dg-error "instance variable has unknown size" "" { target *-*-* } 0 } */