john.brawn added inline comments.

================
Comment at: clang/lib/Sema/SemaDecl.cpp:6904
             << Name << RD->getTagKind();
           Invalid = true;
+        } else if (RD->isLocalClass()) {
----------------
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?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80295/new/

https://reviews.llvm.org/D80295



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to