[PATCH] D122460: [clang] fixed bug #54406

Randy via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Mar 27 20:01:39 PDT 2022


randyli planned changes to this revision.
randyli added inline comments.


================
Comment at: clang/lib/Sema/SemaExprMember.cpp:690
+    // int n = a.B::m;
+    if (BaseExpr && isa<CXXRecordDecl>(DC) && isa<CXXRecordDecl>(RDecl)) {
+      CXXRecordDecl *SRecord = cast<CXXRecordDecl>(DC)->getCanonicalDecl();
----------------
rjmccall wrote:
> We don't generally cite bug numbers in the source code; we just cite the language rule.  You can reference the bug number in your test, though.
> 
> The standard says that this is an error even when the member access is implicit, so the check for `BaseExpr` is incorrect.
> 
> Conversely, the standard says this is not an error when the declaration referenced is not a non-static data member or member function, so you cannot do this before the lookup; in fact, you cannot do it until we've fully resolved the lookup, which may require contextual information.
> 
> All of the code paths that build a non-static member eventually funnel into `BuildMemberExpr`, so maybe that's the right place for the check?  But note that you have to check explicitly for a non-static member, because `MemberExpr` is used for all of them.
> 
> Technically, this rule wasn't in C++98, but since it does appear in C++03, I agree we should just enforce it unconditionally, as we usually treat C++03 as an errata release rather than its own language mode.
ok,  thank you for the suggestion,  I'll look into BuildMemeberExpr and try again 


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D122460



More information about the cfe-commits mailing list