[PATCH] D40381: Parse concept definition
changyu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 20 23:59:31 PST 2017
changyu marked 6 inline comments as done.
changyu added inline comments.
================
Comment at: lib/Sema/SemaTemplate.cpp:7735
+ ActOnDocumentableDecl(NewDecl);
+ CurContext->addDecl(NewDecl);
+ return NewDecl;
----------------
faisalv wrote:
> Why not use 'PushOnScopeChains' onto the enclosing scope?
> Something along these lines:
> assert(S->isTemplateParamScope() && S->getParent() &&
> !S->getParent()->isTemplateParamScope() && "...");
> PushOnScopeChains(NewDecl, S->getParent(),/*AddToContext*/true);
The condition
```
S->isTemplateParamScope()
```
fails in this case
```
template<concept T> concept D1 = true; // expected-error {{expected template parameter}}
```
`ParseTemplateDeclarationOrSpecialization` calls `ParseTemplateParameters` which eventually calls `ParseNonTypeTemplateParameter`. `ParseNonTypeTemplateParameter` prints the diag and fails but does not cause `ParseTemplateParameters` to fail (I'm not sure why). `ParseTemplateDeclarationOrSpecialization` proceeds to parse the concept definition, and we get this
```
/home/changyu/test.cpp:1:10: error: expected template parameter
template<concept T> concept D1 = true; // expected-error {{expected template parameter}}
^
clang: /home/changyu/git/llvm/tools/clang/lib/Sema/SemaTemplate.cpp:7747: clang::Decl* clang::Sema::ActOnConceptDefinition(clang::Scope*, clang::MultiTemplateParamsArg, clang::IdentifierInfo*, clang::SourceLocation, clang::Expr*): Assertion `S->isTemplateParamScope() && "Not in template param scope?"' failed.
```
What should we do?
https://reviews.llvm.org/D40381
More information about the cfe-commits
mailing list