Commit 35bce82a by Nicola Pero Committed by Nicola Pero

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

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

	* objc-act.c (objc_start_category_interface): Produce an error if
	a class extension is found after the class @implementation.

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

	* objc.dg/class-extension-4.m: New.
	* obj-c++.dg/class-extension-4.mm: New.

From-SVN: r168294
parent ecd815ac
2010-12-28 Nicola Pero <nicola.pero@meta-innovation.com>
* objc-act.c (objc_start_category_interface): Produce an error if
a class extension is found after the class @implementation.
2010-12-28 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc/47073
* objc-act.c (encode_method_prototype): Fixed both location and
format string of error "type %qT does not have a known size".
......
......@@ -763,6 +763,23 @@ objc_start_category_interface (tree klass, tree categ,
{
if (flag_objc1_only)
error_at (input_location, "class extensions are not available in Objective-C 1.0");
else
{
/* Iterate over all the classes and categories implemented
up to now in this compilation unit. */
struct imp_entry *t;
for (t = imp_list; t; t = t->next)
{
/* If we find a class @implementation with the same name
as the one we are extending, produce an error. */
if (TREE_CODE (t->imp_context) == CLASS_IMPLEMENTATION_TYPE
&& IDENTIFIER_POINTER (CLASS_NAME (t->imp_context)) == IDENTIFIER_POINTER (klass))
error_at (input_location,
"class extension for class %qE declared after its %<@implementation%>",
klass);
}
}
}
objc_interface_context
= start_class (CATEGORY_INTERFACE_TYPE, klass, categ, protos, NULL_TREE);
......
2010-12-28 Nicola Pero <nicola.pero@meta-innovation.com>
* objc.dg/class-extension-4.m: New.
* obj-c++.dg/class-extension-4.mm: New.
2010-12-28 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc/47073
* objc.dg/incomplete-type-1.m: New test.
......
/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, December 2010. */
/* { dg-do compile } */
/* This test tests you can not declare a class extension after the class @implementation. */
#include <objc/objc.h>
@interface MyObject
{
Class isa;
}
@end
@implementation MyObject
@end
@interface MyObject () /* { dg-error "class extension for class .MyObject. declared after its ..implementation." } */
- (void) test;
@end
/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, December 2010. */
/* { dg-do compile } */
/* This test tests you can not declare a class extension after the class @implementation. */
#include <objc/objc.h>
@interface MyObject
{
Class isa;
}
@end
@implementation MyObject
@end
@interface MyObject ()
- (void) test; /* { dg-error "class extension for class .MyObject. declared after its ..implementation." } */
@end
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