aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicola Pero <nicola.pero@meta-innovation.com>2011-04-12 17:37:39 +0000
committerNicola Pero <nicola@gcc.gnu.org>2011-04-12 17:37:39 +0000
commitcf3caeaf0ac59e858ff2ae54e59dc5a2bf51961d (patch)
tree531915bec0ef305654436c7d88baa27569068158
parent0d8a2528265c57e2fd0c90f33c38f603db43695a (diff)
downloadgcc-cf3caeaf0ac59e858ff2ae54e59dc5a2bf51961d.zip
gcc-cf3caeaf0ac59e858ff2ae54e59dc5a2bf51961d.tar.gz
gcc-cf3caeaf0ac59e858ff2ae54e59dc5a2bf51961d.tar.bz2
In gcc/objc/: 2011-04-12 Nicola Pero <nicola.pero@meta-innovation.com>
In gcc/objc/: 2011-04-12 Nicola Pero <nicola.pero@meta-innovation.com> * objc-act.c (printable_ivar_name): New. (add_instance_variable): Call printable_ivar_name() when an error message needs to be printed. Do not prepare the instance variable for printing unless there is an actual error. From-SVN: r172328
-rw-r--r--gcc/objc/ChangeLog7
-rw-r--r--gcc/objc/objc-act.c24
2 files changed, 24 insertions, 7 deletions
diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index e9e3be6..2c38853 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -1,5 +1,12 @@
2011-04-12 Nicola Pero <nicola.pero@meta-innovation.com>
+ * objc-act.c (printable_ivar_name): New.
+ (add_instance_variable): Call printable_ivar_name() when an error
+ message needs to be printed. Do not prepare the instance variable
+ for printing unless there is an actual error.
+
+2011-04-12 Nicola Pero <nicola.pero@meta-innovation.com>
+
* objc-act.c (objc_is_class_name, objc_is_id): For efficiency,
avoid calling identifier_global_value() multiple times.
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index dd81fd1..75e11da 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -5983,6 +5983,17 @@ flexible_array_type_p (tree type)
}
#endif
+/* Produce a printable version of an ivar name. This is only used
+ inside add_instance_variable. */
+static const char *
+printable_ivar_name (tree field_decl)
+{
+ if (DECL_NAME (field_decl))
+ return identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (field_decl)));
+ else
+ return _("<unnamed>");
+}
+
/* Called after parsing each instance variable declaration. Necessary to
preserve typedefs and implement public/private...
@@ -5993,15 +6004,12 @@ add_instance_variable (tree klass, objc_ivar_visibility_kind visibility,
tree field_decl)
{
tree field_type = TREE_TYPE (field_decl);
- const char *ivar_name = DECL_NAME (field_decl)
- ? identifier_to_locale (IDENTIFIER_POINTER (DECL_NAME (field_decl)))
- : _("<unnamed>");
#ifdef OBJCPLUS
if (TREE_CODE (field_type) == REFERENCE_TYPE)
{
error ("illegal reference type specified for instance variable %qs",
- ivar_name);
+ printable_ivar_name (field_decl));
/* Return class as is without adding this ivar. */
return klass;
}
@@ -6011,7 +6019,8 @@ add_instance_variable (tree klass, objc_ivar_visibility_kind visibility,
|| TYPE_SIZE (field_type) == error_mark_node)
/* 'type[0]' is allowed, but 'type[]' is not! */
{
- error ("instance variable %qs has unknown size", ivar_name);
+ error ("instance variable %qs has unknown size",
+ printable_ivar_name (field_decl));
/* Return class as is without adding this ivar. */
return klass;
}
@@ -6031,7 +6040,8 @@ add_instance_variable (tree klass, objc_ivar_visibility_kind visibility,
to calculate the offset of the next instance variable. */
if (flexible_array_type_p (field_type))
{
- error ("instance variable %qs uses flexible array member", ivar_name);
+ error ("instance variable %qs uses flexible array member",
+ printable_ivar_name (field_decl));
/* Return class as is without adding this ivar. */
return klass;
}
@@ -6078,7 +6088,7 @@ add_instance_variable (tree klass, objc_ivar_visibility_kind visibility,
error ("type %qE has virtual member functions", type_name);
error ("illegal aggregate type %qE specified "
"for instance variable %qs",
- type_name, ivar_name);
+ type_name, printable_ivar_name (field_decl));
/* Return class as is without adding this ivar. */
return klass;
}