[PATCH] D158766: [AST] TypeSourceInfo for params of inherited constructor should be null
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 24 13:08:09 PDT 2023
sammccall added a reviewer: aaron.ballman.
sammccall marked 4 inline comments as done.
sammccall added a subscriber: aaron.ballman.
sammccall added a comment.
+Aaron for guidance & in case I'm making things up, TypeLocs/TSI have always confused me...
================
Comment at: clang/lib/Sema/SemaDeclCXX.cpp:13895-13896
Context.getTrivialTypeSourceInfo(BaseCtor->getType(), UsingLoc);
FunctionProtoTypeLoc ProtoLoc =
TInfo->getTypeLoc().IgnoreParens().castAs<FunctionProtoTypeLoc>();
----------------
ymandel wrote:
> I'm now suspicious of all TypeLocs in this code, and If I'm reading this code correctly, this typeloc is never actually used.
My understanding is TypeLoc is really just a Type* + handle into some storage, TypeSourceInfo is typically that storage.
So TInfo is storage to hold the location info for a function type, initialized to ~empty ("trivial").
Then ProtoLoc is an accessor that we use to mutate that storage (`ProtoLoc.setParam` below).
Meanwhile we pass TInfo in as the TypeSourceInfo for the function.
The net effect: if we ask for the function's typeloc, and then ask that loc for the param decls, we'll get them, just the same as if we ask the function for its param decls directly.
That said, see next comment.
================
Comment at: clang/lib/Sema/SemaDeclCXX.cpp:13908
CXXConstructorDecl *DerivedCtor = CXXConstructorDecl::Create(
Context, Derived, UsingLoc, NameInfo, TInfo->getType(), TInfo,
BaseCtor->getExplicitSpecifier(), getCurFPFeatures().isFPConstrained(),
----------------
ymandel wrote:
> Once you're at it, should this use actually be nullptr?
... maybe? For implicit copy-constructors, the TSI is nullptr (SemaDeclCXX.cpp:15425).
That suggests that being able to get at the params via the TypeLoc isn't actually a critical invariant.
I've done this as I agree TypeSourceInfo for implicit code is dubious, and I was able to construct a similar ASTMatcher misbehavior that this fixes.
@aaron.ballman does this seem right?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D158766/new/
https://reviews.llvm.org/D158766
More information about the cfe-commits
mailing list