@@ -969,7 +969,7 @@ void CXXNameMangler::mangleUnscopedTemplateName(
969
969
assert (!AdditionalAbiTags &&
970
970
" template template param cannot have abi tags" );
971
971
mangleTemplateParameter (TTP->getDepth (), TTP->getIndex ());
972
- } else if (isa<BuiltinTemplateDecl>(ND)) {
972
+ } else if (isa<BuiltinTemplateDecl>(ND) || isa<ConceptDecl>(ND) ) {
973
973
mangleUnscopedName (ND, AdditionalAbiTags);
974
974
} else {
975
975
mangleUnscopedName (ND->getTemplatedDecl (), AdditionalAbiTags);
@@ -1890,7 +1890,7 @@ void CXXNameMangler::mangleTemplatePrefix(const TemplateDecl *ND,
1890
1890
mangleTemplateParameter (TTP->getDepth (), TTP->getIndex ());
1891
1891
} else {
1892
1892
manglePrefix (getEffectiveDeclContext (ND), NoFunction);
1893
- if (isa<BuiltinTemplateDecl>(ND))
1893
+ if (isa<BuiltinTemplateDecl>(ND) || isa<ConceptDecl>(ND) )
1894
1894
mangleUnqualifiedName (ND, nullptr );
1895
1895
else
1896
1896
mangleUnqualifiedName (ND->getTemplatedDecl (), nullptr );
@@ -3658,7 +3658,6 @@ void CXXNameMangler::mangleExpression(const Expr *E, unsigned Arity) {
3658
3658
case Expr::ConvertVectorExprClass:
3659
3659
case Expr::StmtExprClass:
3660
3660
case Expr::TypeTraitExprClass:
3661
- case Expr::ConceptSpecializationExprClass:
3662
3661
case Expr::ArrayTypeTraitExprClass:
3663
3662
case Expr::ExpressionTraitExprClass:
3664
3663
case Expr::VAArgExprClass:
@@ -4168,6 +4167,18 @@ void CXXNameMangler::mangleExpression(const Expr *E, unsigned Arity) {
4168
4167
mangleExpression (cast<ParenExpr>(E)->getSubExpr (), Arity);
4169
4168
break ;
4170
4169
4170
+
4171
+ case Expr::ConceptSpecializationExprClass: {
4172
+ // <expr-primary> ::= L <mangled-name> E # external name
4173
+ Out << " L_Z" ;
4174
+ auto *CSE = cast<ConceptSpecializationExpr>(E);
4175
+ mangleTemplateName (CSE->getNamedConcept (),
4176
+ CSE->getTemplateArguments ().data (),
4177
+ CSE->getTemplateArguments ().size ());
4178
+ Out << ' E' ;
4179
+ break ;
4180
+ }
4181
+
4171
4182
case Expr::DeclRefExprClass:
4172
4183
mangleDeclRefExpr (cast<DeclRefExpr>(E)->getDecl ());
4173
4184
break ;
0 commit comments