OSDN Git Service

In gcc/:
authornicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Oct 2010 09:08:57 +0000 (09:08 +0000)
committernicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Oct 2010 09:08:57 +0000 (09:08 +0000)
2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>

        * c-decl.c (c_write_global_declarations): Call
        objc_write_global_declarations when compiling Objective-C.
        * c-lang.c (finish_file): Removed.

In gcc/c-family/:
2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>

        * c-common.h (finish_file): Removed.
        (objc_write_global_declarations): New.
        * c-opts.c (c_common_parse_file): Do not call finish_file.
        * stub-objc.c (objc_write_global_declarations): New.

In gcc/cp/:
2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>

        * cp-lang.c (finish_file): Removed.
        * decl2.c (cp_write_global_declarations): Call
        objc_write_global_declarations when compiling Objective-C++.

In gcc/objc/:
2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>

        * objc-lang.c (finish_file): Removed.
        * objc-act.c (objc_finish_file): Renamed to
        objc_write_global_declarations.  Do not try to instantiate C++
        templates when compiling Objective-C++ as this is now
        automatically done before this function is called.  Do not check
        for syntax-only run or PCH generation as this is done by the
        callers.
        * objc-act.h (objc_finish_file): Removed.

In gcc/objcp/:
2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>

        * objcp-lang.c (finish_file): Removed.

In gcc/testsuite/:
2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>

        Merge from 'apple/trunk' branch on FSF servers.  Test adapted to
        not require Foundation and run with the GNU runtime as well.

        2006-03-13  Fariborz Jahanian <fjahanian@apple.com>

        Radar 4439126
        * obj-c++.dg/template-8.mm: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165714 138bc75d-0d04-0410-961f-82ee72b054a4

18 files changed:
gcc/ChangeLog
gcc/c-decl.c
gcc/c-family/ChangeLog
gcc/c-family/c-common.h
gcc/c-family/c-opts.c
gcc/c-family/stub-objc.c
gcc/c-lang.c
gcc/cp/ChangeLog
gcc/cp/cp-lang.c
gcc/cp/decl2.c
gcc/objc/ChangeLog
gcc/objc/objc-act.c
gcc/objc/objc-act.h
gcc/objc/objc-lang.c
gcc/objcp/ChangeLog
gcc/objcp/objcp-lang.c
gcc/testsuite/ChangeLog
gcc/testsuite/obj-c++.dg/template-8.mm [new file with mode: 0644]

index 9260c60..d1241cb 100644 (file)
@@ -1,3 +1,9 @@
+2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * c-decl.c (c_write_global_declarations): Call
+       objc_write_global_declarations when compiling Objective-C.
+       * c-lang.c (finish_file): Removed.
+
 2010-10-19  DJ Delorie  <dj@redhat.com>
 
        * doc/tm.texi.in (TARGET_ASM_JUMP_ALIGN_MAX_SKIP): New.
index c1a44d8..a06d073 100644 (file)
@@ -9782,6 +9782,12 @@ c_write_global_declarations (void)
   if (pch_file)
     return;
 
+  /* Do the Objective-C stuff.  This is where all the Objective-C
+     module stuff gets generated (symtab, class/protocol/selector
+     lists etc).  */
+  if (c_dialect_objc ())
+    objc_write_global_declarations ();
+
   /* Close the external scope.  */
   ext_block = pop_scope ();
   external_scope = 0;
index 1f8726c..97d5b28 100644 (file)
@@ -1,3 +1,10 @@
+2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * c-common.h (finish_file): Removed.
+       (objc_write_global_declarations): New.
+       * c-opts.c (c_common_parse_file): Do not call finish_file.
+       * stub-objc.c (objc_write_global_declarations): New.
+       
 2010-10-18  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        Implemented parsing @synthesize and @dynamic for
index 6b8a8f4..854693e 100644 (file)
@@ -788,8 +788,6 @@ extern HOST_WIDE_INT c_common_to_target_charset (HOST_WIDE_INT);
 
 /* This is the basic parsing function.  */
 extern void c_parse_file (void);
-/* This is misnamed, it actually performs end-of-compilation processing.  */
-extern void finish_file        (void);
 
 extern void warn_for_omitted_condop (location_t, tree);
 
@@ -981,6 +979,7 @@ extern void c_parse_error (const char *, enum cpp_ttype, tree, unsigned char);
 
 /* The following ObjC/ObjC++ functions are called by the C and/or C++
    front-ends; they all must have corresponding stubs in stub-objc.c.  */
+extern void objc_write_global_declarations (void);
 extern tree objc_is_class_name (tree);
 extern tree objc_is_object_ptr (tree);
 extern void objc_check_decl (tree);
index 3df0492..8f60834 100644 (file)
@@ -1160,7 +1160,6 @@ c_common_parse_file (int set_yydebug)
       pch_init ();
       push_file_scope ();
       c_parse_file ();
-      finish_file ();
       pop_file_scope ();
       /* And end the main input file, if the debug writer wants it  */
       if (debug_hooks->start_end_main_source_file)
index a1ea033..3356d0b 100644 (file)
@@ -416,3 +416,8 @@ objc_finish_foreach_loop (location_t ARG_UNUSED (location), tree ARG_UNUSED (obj
 {
   return;
 }
+
+void
+objc_write_global_declarations (void)
+{
+}
index 45a764f..0ca2e7c 100644 (file)
@@ -47,11 +47,4 @@ enum c_language_kind c_language = clk_c;
 /* Each front end provides its own lang hook initializer.  */
 struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
 
-/* Final processing of file-scope data.  The Objective-C version of
-   this function still does something.  */
-void
-finish_file (void)
-{
-}
-
 #include "gtype-c.h"
index 8a084df..7343b2d 100644 (file)
@@ -1,3 +1,9 @@
+2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * cp-lang.c (finish_file): Removed.
+       * decl2.c (cp_write_global_declarations): Call
+       objc_write_global_declarations when compiling Objective-C++.
+       
 2010-10-19  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/46046
index a07d7be..f274d31 100644 (file)
@@ -154,11 +154,6 @@ cp_classify_record (tree type)
   return RECORD_IS_STRUCT;
 }
 
-void
-finish_file (void)
-{
-}
-
 static GTY(()) tree cp_eh_personality_decl;
 
 static tree
index fcc83fb..f27e7d6 100644 (file)
@@ -3896,6 +3896,14 @@ cp_write_global_declarations (void)
     if (!decl_defined_p (decl))
       no_linkage_error (decl);
 
+  /* Then, do the Objective-C stuff.  This is where all the
+     Objective-C module stuff gets generated (symtab,
+     class/protocol/selector lists etc).  This must be done after C++
+     templates, destructors etc. so that selectors used in C++
+     templates are properly allocated.  */
+  if (c_dialect_objc ())
+    objc_write_global_declarations ();
+
   /* We give C linkage to static constructors and destructors.  */
   push_lang_context (lang_name_c);
 
index 745b7bb..b3881ae 100644 (file)
@@ -1,3 +1,14 @@
+2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * objc-lang.c (finish_file): Removed.
+       * objc-act.c (objc_finish_file): Renamed to
+       objc_write_global_declarations.  Do not try to instantiate C++
+       templates when compiling Objective-C++ as this is now
+       automatically done before this function is called.  Do not check
+       for syntax-only run or PCH generation as this is done by the
+       callers.
+       * objc-act.h (objc_finish_file): Removed.
+       
 2010-10-18  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        Implemented parsing @synthesize and @dynamic for
index 048d2ae..2d5a905 100644 (file)
@@ -624,22 +624,15 @@ objc_init (void)
   return true;
 }
 
+/* This is called automatically (at the very end of compilation) by
+   c_write_global_declarations and cp_write_global_declarations.  */
 void
-objc_finish_file (void)
+objc_write_global_declarations (void)
 {
   mark_referenced_methods ();
 
-#ifdef OBJCPLUS
-  /* We need to instantiate templates _before_ we emit ObjC metadata;
-     if we do not, some metadata (such as selectors) may go missing.  */
-  at_eof = 1;
-  instantiate_pending_templates (0);
-#endif
-
-  /* Finalize Objective-C runtime data.  No need to generate tables
-     and code if only checking syntax, or if generating a PCH file.  */
-  if (!flag_syntax_only && !pch_file)
-    finish_objc ();
+  /* Finalize Objective-C runtime data.  */
+  finish_objc ();
 
   if (gen_declaration_file)
     fclose (gen_declaration_file);
index a11a6de..b7bb6f2 100644 (file)
@@ -26,7 +26,6 @@ along with GCC; see the file COPYING3.  If not see
 
 bool objc_init (void);
 const char *objc_printable_name (tree, int);
-void objc_finish_file (void);
 tree objc_fold_obj_type_ref (tree, tree);
 int objc_gimplify_expr (tree *, gimple_seq *, gimple_seq *);
 tree objc_eh_runtime_type (tree);
index 2469845..839db5d 100644 (file)
@@ -92,10 +92,4 @@ objc_init_ts (void)
   tree_contains_struct[PROPERTY_DECL][TS_DECL_COMMON] = 1;
 }
 
-void
-finish_file (void)
-{
-  objc_finish_file ();
-}
-
 #include "gtype-objc.h"
index c60766e..7141dd8 100644 (file)
@@ -1,3 +1,7 @@
+2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       * objcp-lang.c (finish_file): Removed.
+
 2010-10-14  Iain Sandoe  <iains@gcc.gnu.org>
 
        merge from FSF apple 'trunk' branch. 
index d03e754..e353021 100644 (file)
@@ -156,11 +156,4 @@ objcxx_eh_personality (void)
   return objcp_eh_personality_decl;
 }
 
-
-void
-finish_file (void)
-{
-  objc_finish_file ();
-}
-
 #include "gtype-objcp.h"
index 74c11e8..f777c3f 100644 (file)
@@ -1,4 +1,14 @@
 2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>
+       
+       Merge from 'apple/trunk' branch on FSF servers.  Test adapted to
+       not require Foundation and run with the GNU runtime as well.
+
+       2006-03-13  Fariborz Jahanian <fjahanian@apple.com>
+
+        Radar 4439126
+       * obj-c++.dg/template-8.mm: New.        
+
+2010-10-20  Nicola Pero  <nicola.pero@meta-innovation.com>
 
        PR objc/23709
        * objc.dg/pr23709.m: New.
diff --git a/gcc/testsuite/obj-c++.dg/template-8.mm b/gcc/testsuite/obj-c++.dg/template-8.mm
new file mode 100644 (file)
index 0000000..eb01aa8
--- /dev/null
@@ -0,0 +1,49 @@
+/* Test that all pending instantiations have taken place before meta-data
+   generation. */      
+/* Author: Fariborz Jahanian <fjahanian@apple.com> */
+/* Adapted by Nicola Pero <nicola.pero@meta-innovation.com> */
+/* { dg-do run } */
+
+#include <objc/objc.h>
+#include <objc/runtime.h>
+
+@interface MyRootClass
+{ Class isa; }
++ alloc;
+- init;
+- doSomething;
+@end
+
+@implementation MyRootClass
++ alloc { return class_createInstance (self, 0); }
+- init  { return self; }
+- doSomething { return self; }
+@end
+
+class Base
+{
+public:
+       Base() { }
+       virtual ~Base() { }
+       
+       void destroy() { delete this; }
+};
+
+template<class T>
+class Subclass : public T
+{
+public:
+       Subclass() { }
+       
+       virtual ~Subclass()
+       {
+               [[[MyRootClass alloc] init] doSomething];
+       }
+};
+
+int main(int argc, const char * argv[])
+{
+    Subclass<Base>* theSubclass = new Subclass<Base>();
+    theSubclass->destroy();
+    return 0;
+}