Skip to content

Commit a450de8

Browse files
committed
Only profile Decls for dependent VarTemplates
1 parent c7b2fde commit a450de8

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

clang/lib/AST/StmtProfile.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2189,11 +2189,14 @@ StmtProfiler::VisitCXXPseudoDestructorExpr(const CXXPseudoDestructorExpr *S) {
21892189

21902190
void StmtProfiler::VisitOverloadExpr(const OverloadExpr *S) {
21912191
VisitExpr(S);
2192-
if (S->getNumDecls() == 1)
2192+
bool DescribingDependentVarTemplate =
2193+
S->getNumDecls() == 1 && isa<VarTemplateDecl>(*S->decls_begin());
2194+
if (DescribingDependentVarTemplate) {
21932195
VisitDecl(*S->decls_begin());
2194-
else
2196+
} else {
21952197
VisitNestedNameSpecifier(S->getQualifier());
2196-
VisitName(S->getName(), /*TreatAsDecl*/ true);
2198+
VisitName(S->getName(), /*TreatAsDecl*/ true);
2199+
}
21972200
ID.AddBoolean(S->hasExplicitTemplateArgs());
21982201
if (S->hasExplicitTemplateArgs())
21992202
VisitTemplateArguments(S->getTemplateArgs(), S->getNumTemplateArgs());

clang/test/SemaCXX/exception-spec.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,24 @@ namespace AssignmentOp {
5252
D2 &operator=(const D2&); // expected-error {{more lax}}
5353
};
5454
}
55+
56+
namespace OverloadedFunctions {
57+
58+
template <typename T>
59+
void f(T&) noexcept;
60+
61+
template <typename T, int N>
62+
void f(T (&arr)[N]) noexcept(noexcept(f(*arr)));
63+
64+
template <typename T>
65+
inline void f(T&) noexcept {}
66+
67+
template <typename T, int N>
68+
inline void f(T (&arr)[N]) noexcept(noexcept(f(*arr))) {}
69+
70+
void g() {
71+
int x[1];
72+
f(x);
73+
}
74+
75+
}

0 commit comments

Comments
 (0)