This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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" } */
     ;



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]