This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
ObjC: fix location of "iterating variable is not an object" for fast enumeration
- From: "Nicola Pero" <nicola dot pero at meta-innovation dot com>
- To: "gcc-patches at gnu dot org" <gcc-patches at gnu dot org>
- Date: Wed, 8 Dec 2010 23:18:52 +0100 (CET)
- Subject: ObjC: fix location of "iterating variable is not an object" for fast enumeration
This improves error messages generated by invalid Objective-C code such as
for (int i in array)
{
...
}
before this patch, the "iterating variable is not an object" error was located on the line
containing '{', which is confusing. This patch changes the error to be on the right line.
Ok to commit ?
Thanks
Index: objc/objc-act.c
===================================================================
--- objc/objc-act.c (revision 167598)
+++ objc/objc-act.c (working copy)
@@ -13246,13 +13246,13 @@ objc_finish_foreach_loop (location_t location, tre
if (!objc_type_valid_for_messaging (TREE_TYPE (object_expression), true))
{
- error ("iterating variable in fast enumeration is not an object");
+ error_at (location, "iterating variable in fast enumeration is not an object");
return;
}
if (!objc_type_valid_for_messaging (TREE_TYPE (collection_expression), true))
{
- error ("collection in fast enumeration is not an object");
+ error_at (location, "collection in fast enumeration is not an object");
return;
}
Index: objc/ChangeLog
===================================================================
--- objc/ChangeLog (revision 167598)
+++ objc/ChangeLog (working copy)
@@ -1,3 +1,9 @@
+2010-12-08 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ * objc-act.c (objc_finish_foreach_loop): Use error_at() instead of
+ error() when printing an error about the iterating variable or
+ collection not being an object.
+
2010-12-06 Nicola Pero <nicola.pero@meta-innovation.com>
* objc-act.c (objc_finish_foreach_loop): Mark the
Index: testsuite/ChangeLog
===================================================================
--- testsuite/ChangeLog (revision 167598)
+++ testsuite/ChangeLog (working copy)
@@ -1,3 +1,8 @@
+2010-12-08 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ * objc.dg/foreach-6.m: Updated location of error messages.
+ * objc.dg/foreach-7.m: Same change.
+
2010-12-08 Wei Guozhi <carrot@google.com>
PR target/46631
Index: testsuite/objc.dg/foreach-6.m
===================================================================
--- testsuite/objc.dg/foreach-6.m (revision 167607)
+++ testsuite/objc.dg/foreach-6.m (working copy)
@@ -46,16 +46,16 @@ int main (void)
;
for (12 in array) /* { dg-error "invalid iterating variable in fast enumeration" } */
- ; /* { dg-error "iterating variable in fast enumeration is not an object" } */
+ ; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 48 } */
- for (object in 12)
- ; /* { dg-error "collection in fast enumeration is not an object" } */
+ for (object in 12) /* { dg-error "collection in fast enumeration is not an object" } */
+ ;
- for (object in invalid)
- ; /* { dg-error "collection in fast enumeration is not an object" } */
+ for (object in invalid) /* { dg-error "collection in fast enumeration is not an object" } */
+ ;
- for (invalid in [object enumerator])
- ; /* { dg-error "iterating variable in fast enumeration is not an object" } */
+ for (invalid in [object enumerator]) /* { dg-error "iterating variable in fast enumeration is not an object" } */
+ ;
return 0;
}
Index: testsuite/objc.dg/foreach-7.m
===================================================================
--- testsuite/objc.dg/foreach-7.m (revision 167607)
+++ testsuite/objc.dg/foreach-7.m (working copy)
@@ -36,10 +36,10 @@ int main (void)
id object = nil;
for (typedef int my_typedef in array) /* { dg-error "declaration of non-variable" } */
- ; /* { dg-error "iterating variable in fast enumeration is not an object" } */
+ ; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 38 } */
for (function () in nil) /* { dg-error "invalid iterating variable in fast enumeration" } */
- ; /* { dg-error "iterating variable in fast enumeration is not an object" } */
+ ; /* { dg-error "iterating variable in fast enumeration is not an object" "" { target *-*-* } 41 } */
for (object_function () in nil) /* { dg-error "invalid iterating variable in fast enumeration" } */
;