summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>2011-02-23 10:57:59 +0000
committernicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>2011-02-23 10:57:59 +0000
commit41aea0093e7f44d47ccc24f92190d44b58fc7fb1 (patch)
tree00d37a8caa57c4cada7e20a68cfc6490ccfee7c6
parent58979379f80aec77c2ee664b9d4a1b2f9bc49d49 (diff)
downloadgcc-41aea0093e7f44d47ccc24f92190d44b58fc7fb1.tar.gz
Removed conflict in usage of TYPE_LANG_SLOT_0 between Objective-C and C
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170436 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/objc/ChangeLog7
-rw-r--r--gcc/objc/objc-act.c3
-rw-r--r--gcc/objc/objc-act.h4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/objc.dg/attributes/objc-exception-1.m32
5 files changed, 44 insertions, 6 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index 9c466aa8771..e5cff3f58ab 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -1,3 +1,10 @@
+2011-02-23 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ * objc-act.c (build_private_template): Do not copy the
+ CLASS_HAS_EXCEPTION_ATTR from the class to the struct.
+ * objc-act.h (CLASS_HAS_EXCEPTION_ATTR): Define using
+ TYPE_LANG_SLOT_0.
+
2011-02-22 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc/47832
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 85ef8fb0526..049dc00dba1 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -4203,9 +4203,6 @@ build_private_template (tree klass)
/* Copy the attributes from the class to the type. */
if (TREE_DEPRECATED (klass))
TREE_DEPRECATED (record) = 1;
-
- if (CLASS_HAS_EXCEPTION_ATTR (klass))
- CLASS_HAS_EXCEPTION_ATTR (record) = 1;
}
}
diff --git a/gcc/objc/objc-act.h b/gcc/objc/objc-act.h
index 54f067fac07..3983d4b1adc 100644
--- a/gcc/objc/objc-act.h
+++ b/gcc/objc/objc-act.h
@@ -164,9 +164,7 @@ typedef enum objc_property_assign_semantics {
#define CLASS_CATEGORY_LIST(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 3)
#define CLASS_PROTOCOL_LIST(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 4)
#define TOTAL_CLASS_RAW_IVARS(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 5)
-
-/* FIXME */
-#define CLASS_HAS_EXCEPTION_ATTR(CLASS) ((CLASS)->type.lang_flag_0)
+#define CLASS_HAS_EXCEPTION_ATTR(CLASS) (TYPE_LANG_FLAG_0 (CLASS))
#define PROTOCOL_NAME(CLASS) ((CLASS)->type.name)
#define PROTOCOL_LIST(CLASS) TREE_VEC_ELT (TYPE_LANG_SLOT_1 (CLASS), 0)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 60e924bcf39..a89c08d9161 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2011-02-23 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ * objc.dg/attributes/objc-exception-1.m: New.
+
2011-02-23 Jie Zhang <jie@codesourcery.com>
* gcc.dg/cpp/include7.c: New test.
diff --git a/gcc/testsuite/objc.dg/attributes/objc-exception-1.m b/gcc/testsuite/objc.dg/attributes/objc-exception-1.m
new file mode 100644
index 00000000000..e7f6f856f8f
--- /dev/null
+++ b/gcc/testsuite/objc.dg/attributes/objc-exception-1.m
@@ -0,0 +1,32 @@
+/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, February 2011. */
+/* { dg-do compile } */
+
+/* Test that the 'objc_exception' attribute is accepted for
+ @interfaces, but not for anything else. */
+
+#include <objc/objc.h>
+
+/* Fine. */
+__attribute__ ((objc_exception))
+@interface MyClass
+{
+ Class isa;
+}
+@end
+
+/* Fine. */
+__attribute__ ((__objc_exception__))
+@interface MyClass2
+{
+ Class isa;
+}
+@end
+
+__attribute__ ((objc_exception))
+@protocol MyProtocol; /* { dg-warning "ignored" } */
+
+__attribute__ ((objc_exception))
+int myVariable; /* { dg-warning "ignored" } */
+
+__attribute__ ((objc_exception))
+int myFunction (int argument); /* { dg-warning "ignored" } */