[PATCH] D148330: [clang] Do not crash on undefined template partial specialization
Shafik Yaghmour via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 26 09:22:13 PDT 2023
shafik accepted this revision.
shafik added a comment.
LGTM
================
Comment at: clang/lib/Sema/SemaCXXScopeSpec.cpp:134
"specifier in SFINAE context?");
- if (!hasReachableDefinition(PartialSpec))
+ if (PartialSpec->hasDefinition() &&
+ !hasReachableDefinition(PartialSpec))
----------------
Fznamznon wrote:
> Fznamznon wrote:
> > shafik wrote:
> > > So I see in another location we are basically checking `!isBeginDefined()` and in another place `hasCompleteDefinition()`. It is not clear to me if these are all basically checking the same thing or if we should figure out what is the right thing to check and do that everywhere.
> > I suppose you meant `isBeingDefined()`. So, IMO `isBeingDefined()` is not exactly the same as having a definition, this is set to `true` when `TagDecl::startDefinition` I suppose this should be done when parser meets a definition so at this point it can't be or have a complete definition. But at the places where `!isBeingDefined()` is checked prior `hasReachableDefinition` I saw a pointer representing a definition checked for not being null. Interestingly, `hasReachableDefinition()` early exits if `isBeingDefined()` returns true, so probably this check additional doesn't make sense at all.
> > Maybe we should just move both checks on having a definition and not being in the process of definition under `hasReachableDefinition` after all. That will require changing unrelated places, so I would prefer doing this separately in any case.
> >
> > I can't grep `hasCompleteDefinition()` either, so I suppose you meant `isCompleteDefinition()`, I think this is basically the same thing as having definition and additionally the declaration through which the method called is checked that IT IS the definition. I'm not sure we have to require it here.
> >
> @shafik , are you satisfied with the explanation?
I think we are good.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D148330/new/
https://reviews.llvm.org/D148330
More information about the cfe-commits
mailing list