Commit 38285932 by Ziemowit Laski Committed by Ziemowit Laski

objc-act.c (finish_class): Do not synthesize bogus 'extern objc_object *_Foo;'…

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  <zlaski@apple.com>

        * 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  <zlaski@apple.com>

        * objc.dg/super-class-3.m: New test.

From-SVN: r89601
parent c5e1045b
2004-10-26 Ziemowit Laski <zlaski@apple.com>
* objc-act.c (finish_class): Do not synthesize bogus
'extern objc_object *_Foo;' declarations for @interface Foo.
2004-10-25 Ziemowit Laski <zlaski@apple.com> 2004-10-25 Ziemowit Laski <zlaski@apple.com>
David Ayers <d.ayers@inode.at> David Ayers <d.ayers@inode.at>
......
...@@ -6896,23 +6896,6 @@ finish_class (tree class) ...@@ -6896,23 +6896,6 @@ finish_class (tree class)
IDENTIFIER_POINTER (CLASS_SUPER_NAME (objc_implementation_context))); 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 *_<my_name>; */
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 static tree
......
2004-10-26 Ziemowit Laski <zlaski@apple.com>
* objc.dg/super-class-3.m: New test.
2004-10-26 Nathan Sidwell <nathan@codesourcery.com> 2004-10-26 Nathan Sidwell <nathan@codesourcery.com>
* gcc.dg/cpp/direct2.c: Adjust expected errors, robustify parser * gcc.dg/cpp/direct2.c: Adjust expected errors, robustify parser
......
/* Ensure that the compiler does not emit spurious extern declarations named '_Foo', where 'Foo'
is an ObjC class name. */
/* Contributed by Ziemowit Laski <zlaski@apple.com>. */
/* { dg-do run } */
#include <objc/Object.h>
#include <stdlib.h>
#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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment