From 38285932eaf2c4188d348bffbed500389bcc1c34 Mon Sep 17 00:00:00 2001 From: Ziemowit Laski Date: Tue, 26 Oct 2004 18:39:01 +0000 Subject: objc-act.c (finish_class): Do not synthesize bogus 'extern objc_object *_Foo;' declarations for @interface Foo. [gcc/objc/ChangeLog] 2004-10-26 Ziemowit Laski * objc-act.c (finish_class): Do not synthesize bogus 'extern objc_object *_Foo;' declarations for @interface Foo. [gcc/testsuite/ChangeLog] 2004-10-26 Ziemowit Laski * objc.dg/super-class-3.m: New test. From-SVN: r89601 --- gcc/objc/ChangeLog | 5 ++++ gcc/objc/objc-act.c | 17 -------------- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/objc.dg/super-class-3.m | 43 +++++++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 gcc/testsuite/objc.dg/super-class-3.m diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog index f781a1c..7bb40f7 100644 --- a/gcc/objc/ChangeLog +++ b/gcc/objc/ChangeLog @@ -1,3 +1,8 @@ +2004-10-26 Ziemowit Laski + + * objc-act.c (finish_class): Do not synthesize bogus + 'extern objc_object *_Foo;' declarations for @interface Foo. + 2004-10-25 Ziemowit Laski David Ayers diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c index 21b279d..7b21ede 100644 --- a/gcc/objc/objc-act.c +++ b/gcc/objc/objc-act.c @@ -6896,23 +6896,6 @@ finish_class (tree class) IDENTIFIER_POINTER (CLASS_SUPER_NAME (objc_implementation_context))); } } - - else if (TREE_CODE (class) == CLASS_INTERFACE_TYPE) - { - tree decl; - const char *class_name = IDENTIFIER_POINTER (CLASS_NAME (class)); - char *string = (char *) alloca (strlen (class_name) + 3); - - /* extern struct objc_object *_; */ - - sprintf (string, "_%s", class_name); - - decl = build_decl (VAR_DECL, get_identifier (string), - build_pointer_type (objc_object_reference)); - DECL_EXTERNAL (decl) = 1; - lang_hooks.decls.pushdecl (decl); - finish_decl (decl, NULL_TREE, NULL_TREE); - } } static tree diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e8a8ec6..4496f97 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-10-26 Ziemowit Laski + + * objc.dg/super-class-3.m: New test. + 2004-10-26 Nathan Sidwell * gcc.dg/cpp/direct2.c: Adjust expected errors, robustify parser diff --git a/gcc/testsuite/objc.dg/super-class-3.m b/gcc/testsuite/objc.dg/super-class-3.m new file mode 100644 index 0000000..85396c2 --- /dev/null +++ b/gcc/testsuite/objc.dg/super-class-3.m @@ -0,0 +1,43 @@ +/* Ensure that the compiler does not emit spurious extern declarations named '_Foo', where 'Foo' + is an ObjC class name. */ +/* Contributed by Ziemowit Laski . */ +/* { dg-do run } */ + +#include +#include +#define CHECK_IF(expr) if(!(expr)) abort() + +@interface _Child: Object ++ (int) flashCache; +@end + +@interface Child: _Child ++ (int) flushCache1; +@end + +@interface Child (Categ) ++ (int) flushCache2; +@end + +int _Object = 23; /* Should not conflict with @interface Object. */ + +@implementation _Child ++ (int) flashCache { return 12 + _Object; } +@end + +@implementation Child ++ (int) flushCache1 { return 7 + [super flashCache]; } +@end + +@implementation Child (Categ) ++ (int) flushCache2 { return 9 + [super flashCache]; } +@end + +int main(void) { + CHECK_IF([_Child flashCache] == 35); + CHECK_IF([Child flushCache1] == 42); + CHECK_IF([Child flushCache2] == 44); + + return 0; +} + -- cgit v1.1