summaryrefslogtreecommitdiff
path: root/gcc/objc
diff options
context:
space:
mode:
authornicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>2010-09-21 18:51:34 +0000
committernicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>2010-09-21 18:51:34 +0000
commite93ea189f714f1c8399f57d96a79fe2672807954 (patch)
tree897f0bbb69ee50c5f581e4a8d83c36076bdc3738 /gcc/objc
parent2593b7b8135db4d43d62af403237e80b59ea9c9a (diff)
downloadgcc-e93ea189f714f1c8399f57d96a79fe2672807954.tar.gz
PR objc/25965
In gcc/objc/: * objc-act.c (objc_get_interface_ivars): New function. (objc_collecting_ivars): New variable. (continue_class): Set and reset objc_collecting_ivars for context. In gcc/: * c-decl.c (detect_field_duplicates): If compiling Objective-C, call objc_get_interface_ivars (). * c-family/c-common.h (objc_get_interface_ivars): New declaration. * c-family/stub-objc.c (objc_get_interface_ivars): New stub. In gcc/objcp/: * objcp-decl.c (objcp_finish_struct): Call objc_get_interface_ivars() and check for duplicate ivars. In gcc/testsuite/: Merge from 'apple/trunk' branch on FSF servers. 2005-10-11 Fariborz Jahanian <fjahanian@apple.com> Radar 4291785 objc.dg/naming-4.m: New objc.dg/naming-5.m: New obj-c++.dg/naming-1.mm: New obj-c++.dg/naming-2.mm: New git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164491 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/objc')
-rw-r--r--gcc/objc/ChangeLog7
-rw-r--r--gcc/objc/objc-act.c19
2 files changed, 26 insertions, 0 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index 132679ba132..87dcec853bf 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -1,3 +1,10 @@
+2010-09-21 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ PR objc/25965
+ * objc-act.c (objc_get_interface_ivars): New function.
+ (objc_collecting_ivars): New variable.
+ (continue_class): Set and reset objc_collecting_ivars for context.
+
2010-09-15 Nicola Pero <nicola.pero@meta-innovation.com>
Merge from 'apple/trunk' branch on FSF servers.
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index d8fbe368a78..57942380934 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -371,6 +371,8 @@ int objc_public_flag;
/* Use to generate method labels. */
static int method_slot = 0;
+static int objc_collecting_ivars = 0;
+
#define BUFSIZE 1024
static char *errbuf; /* Buffer for error diagnostics */
@@ -3453,6 +3455,21 @@ objc_get_class_ivars (tree class_name)
return error_mark_node;
}
+/* Called when checking the variables in a struct. If we are not
+ doing the ivars list inside an @interface context, then returns
+ fieldlist unchanged. Else, returns the list of class ivars.
+*/
+tree
+objc_get_interface_ivars (tree fieldlist)
+{
+ if (!objc_collecting_ivars || !objc_interface_context
+ || TREE_CODE (objc_interface_context) != CLASS_INTERFACE_TYPE
+ || CLASS_SUPER_NAME (objc_interface_context) == NULL_TREE)
+ return fieldlist;
+
+ return get_class_ivars (objc_interface_context, true);
+}
+
/* Used by: build_private_template, continue_class,
and for @defs constructs. */
@@ -7714,7 +7731,9 @@ continue_class (tree klass)
push_lang_context (lang_name_c);
#endif /* OBJCPLUS */
+ objc_collecting_ivars = 1;
build_private_template (klass);
+ objc_collecting_ivars = 0;
#ifdef OBJCPLUS
pop_lang_context ();