Correctly profile CXXPseudoDestructorExprs.
CXXPseudoDestructorExprs may not contain a type. PR16852. llvm-svn: 188123
This commit is contained in:
parent
d6ce6cbdac
commit
8564139c0e
|
@ -910,7 +910,14 @@ StmtProfiler::VisitCXXPseudoDestructorExpr(const CXXPseudoDestructorExpr *S) {
|
|||
VisitExpr(S);
|
||||
ID.AddBoolean(S->isArrow());
|
||||
VisitNestedNameSpecifier(S->getQualifier());
|
||||
VisitType(S->getDestroyedType());
|
||||
ID.AddBoolean(S->getScopeTypeInfo() != 0);
|
||||
if (S->getScopeTypeInfo())
|
||||
VisitType(S->getScopeTypeInfo()->getType());
|
||||
ID.AddBoolean(S->getDestroyedTypeInfo() != 0);
|
||||
if (S->getDestroyedTypeInfo())
|
||||
VisitType(S->getDestroyedType());
|
||||
else
|
||||
ID.AddPointer(S->getDestroyedTypeIdentifier());
|
||||
}
|
||||
|
||||
void StmtProfiler::VisitOverloadExpr(const OverloadExpr *S) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
|
||||
|
||||
template<typename A> class s0 {
|
||||
|
||||
|
@ -76,3 +76,9 @@ namespace rdar13140795 {
|
|||
Marshal<int>::gc();
|
||||
}
|
||||
}
|
||||
|
||||
namespace PR16852 {
|
||||
template<typename T> struct S { int a; T x; };
|
||||
template<typename T> decltype(S<T>().~S()) f(); // expected-note {{candidate template ignored: couldn't infer template argument 'T'}}
|
||||
void g() { f(); } // expected-error {{no matching function for call to 'f'}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue