[PATCH] D115248: [Clang] Fix PR28101

Erich Keane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 23 08:03:15 PDT 2022


erichkeane added inline comments.


================
Comment at: clang/lib/Sema/SemaDeclCXX.cpp:3430
           << D.getName().TemplateId->LAngleLoc;
+      if (cast<CXXRecordDecl>(CurContext)->getDeclName() == Name)
+        Diag(Loc, diag::err_member_name_of_class) << Name;
----------------
rZhBoYao wrote:
> erichkeane wrote:
> > I see we are diagnosing this ONLY inside of the case where it is a template.  Where is this caught when we are in the non-template case, why doesn't THAT catch these cases, and what would it take to do so?
> CheckCompletedCXXClass should catch diag::err_member_name_of_class. However, these FieldDecl have no name hence uncaught. Maybe we should set the identifier for this declarator here.
I'm not sure what the side effect of that is... Can you give it a shot?


================
Comment at: clang/test/SemaCXX/PR28101.cpp:8
+
+#ifdef CASE_1
+
----------------
rZhBoYao wrote:
> erichkeane wrote:
> > This isn't necessary, the compiler in verify mode should see all errors.  I see above at most 2 invocations of the compiler as necessary.
> Instantiation of each of the 4 classes could crash on its own, so I thought I'd separate them into 4 invocations.
They shouldn't crash afterwards, right?  So this shouldn't be a problem.


================
Comment at: clang/test/SemaCXX/PR28101.cpp:16
+
+A<int> instantiate() { return {nullptr}; }
+
----------------
rZhBoYao wrote:
> erichkeane wrote:
> > How come there are no notes in this test that say 'in instantiation of...'?  I would expect those in at least some of these cases, right?
> Because it was caught before instantiation and when instantiating the FieldDecl is gone after calling `D.setInvalidType();`. If I set the identifier for the FieldDecl and let `CheckCompletedCXXClass` handle the "has the same name as its class" error, there will be the "in instantiation of..." note.
I think we definitely need to do so there, the instantiation trace not being here makes this a much less useful diagnostic.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D115248



More information about the cfe-commits mailing list