john.brawn marked an inline comment as done.
john.brawn added inline comments.
================
Comment at: clang/lib/Sema/SemaDecl.cpp:6904
<< Name << RD->getTagKind();
Invalid = true;
+ } else if (RD->isLocalClass()) {
----------------
rjmccall wrote:
> john.brawn wrote:
> > rjmccall wrote:
> > > This diagnostic actually ignores the tag kind that passed down to it,
> > > which should be fixed. Also, you should pass in the tag kind for the
> > > actual anonymous class you found.
> > >
> > > While I'm looking at this code: `isLocalClass` is mis-designed and
> > > doesn't work for any of our non-`FunctionDecl` local contexts. This
> > > check should be `if (RD->getParentFunctionOrMethod())`.
> > > This diagnostic actually ignores the tag kind that passed down to it,
> > > which should be fixed. Also, you should pass in the tag kind for the
> > > actual anonymous class you found.
> >
> > Will do.
> >
> > > While I'm looking at this code: isLocalClass is mis-designed and doesn't
> > > work for any of our non-FunctionDecl local contexts. This check should be
> > > if (RD->getParentFunctionOrMethod()).
> >
> > CXXMethodDecl has FunctionDecl as a parent class, so isLocalClass will find
> > and return a CXXMethodDecl. Checking it on
> >
> > ```
> > class Example {
> > void method() {
> > class X {
> > static int x;
> > };
> > }
> > };
> > ```
> > I get the error as expected. Do you have an example where it doesn't work?
> > Will do.
>
> You need to also update the diagnostic to actually care about this.
>
> > Do you have an example where it doesn't work?
>
> All of the standard C/C++ local contexts are FunctionDecls, but "blocks",
> ObjC methods, and OpenMP captured statements aren't. The simplest example
> would be (under `-fblocks`):
>
> ```
> void test() {
> ^{
> class X {
> static int x;
> };
> }();
> }
> ```
> You need to also update the diagnostic to actually care about this.
It looks like it already does? E.g. in the tests added to anonymous-struct.cpp
where the error is "anonymous struct" or "anonymous class" depending on if it's
an anonymous class or struct.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D80295/new/
https://reviews.llvm.org/D80295
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits