Ah. Yes. It's actually attached now :) On Fri, Jun 8, 2012 at 11:16 AM, Matt Beaumont-Gay <[email protected]>wrote:
> ENOPATCH > > On Fri, Jun 8, 2012 at 11:13 AM, Sam Panzer <[email protected]> wrote: > > Hi, > > > > Richard Smith suggested that I try to improve the diagnostic emitted when > > Clang encounters certain kinds of invalid C+11 ranged-based for loops. > > > >> When a pointer to a container is used as the range in a range-based for, > >> Clang's diagnostic is not awesome: > >> > >>> struct S { int *begin(); int *end(); }; > >>> void f(S *p) { > >>> for (auto i : p) {} > >>> } > >>> tmp.cpp:3:15: error: use of undeclared identifier 'begin' > >>> for (auto i : p) {} } > >>> ^ > >>> tmp.cpp:3:15: note: range has type 'S *' > >> > >> > >> We should do better than that, and suggest inserting the missing '*'. > > > > > > This patch replaces the errors complaining about undeclared identifiers > with > > an error specific to ranged-for loops, along with an explanatory note. I > > also updated the existing test cases to reflect the change. For example, > the > > above code now generates this: > > > >> test.cpp:3:15: error: invalid range expression of type 'S *' > >> for (auto i : p) {} > >> ^ ~ > >> test.cpp:3:16: note: range expression is of type 'S *'; did you > >> mean to dereference it with '*'? > >> for (auto i : p) {} > >> ^ > >> * > >> test.cpp:3:14: note: no viable 'end' function for range of type > >> 'S *' > >> for (auto i : p) {} > > > > > > I hope that this is helpful, and comments are always welcome. > > > > -Sam > > > > _______________________________________________ > > cfe-commits mailing list > > [email protected] > > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > >
for-range.patch
Description: Binary data
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
