[Concepts] Fix ConceptSpecializationExpr profiling crash
authorSaar Raz <saar@raz.email>
Thu, 16 Jan 2020 11:35:20 +0000 (13:35 +0200)
committerSaar Raz <saar@raz.email>
Thu, 16 Jan 2020 11:39:30 +0000 (13:39 +0200)
ConceptSpecializationExprs (CSEs) were being created with nullptr
TemplateArgsAsWritten during TemplateTemplateParmDecl canonicalization, and
we were relying on them during profiling which caused sporadic crashes
in test/CXX/.../temp.arg.template/p3-2a.cpp introduced in D44352.

Change profiling of CSEs to instead rely on the actual converted template
arguments and concept named.

clang/lib/AST/StmtProfile.cpp

index 2aa5106e90faed35514bd00510906d0f14b69b98..c0b0f3b0b064ce8dcc17b5e49ad695485659cfe6 100644 (file)
@@ -1335,9 +1335,9 @@ void StmtProfiler::VisitAtomicExpr(const AtomicExpr *S) {
 void StmtProfiler::VisitConceptSpecializationExpr(
                                            const ConceptSpecializationExpr *S) {
   VisitExpr(S);
-  VisitDecl(S->getFoundDecl());
-  VisitTemplateArguments(S->getTemplateArgsAsWritten()->getTemplateArgs(),
-                         S->getTemplateArgsAsWritten()->NumTemplateArgs);
+  VisitDecl(S->getNamedConcept());
+  for (const TemplateArgument &Arg : S->getTemplateArguments())
+    VisitTemplateArgument(Arg);
 }
 
 static Stmt::StmtClass DecodeOperatorCall(const CXXOperatorCallExpr *S,