From 2cded44d82d7c6e9221419b7014a6d9053c69cf3 Mon Sep 17 00:00:00 2001 From: Hubert Tong Date: Tue, 1 Sep 2015 22:50:31 +0000 Subject: [PATCH] Fix assertion failure in TransformOpaqueValueExpr Summary: `OpaqueValueExpr`s may not have a source expression (as in the case when they are created due to a default argument error). This can cause an assertion failure in `TransformOpaqueValueExpr` during template instantiation. This patch fixes the assertion failure. Reviewers: hfinkel, rsmith Subscribers: fraggamuffin, cfe-commits Differential Revision: http://reviews.llvm.org/D11582 Patch by Rachel Craik! llvm-svn: 246600 --- clang/lib/Sema/TreeTransform.h | 2 +- clang/test/SemaTemplate/default-arguments.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 9074c39ad5db..692a2f1dcb48 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -7806,7 +7806,7 @@ TreeTransform::TransformOffsetOfExpr(OffsetOfExpr *E) { template ExprResult TreeTransform::TransformOpaqueValueExpr(OpaqueValueExpr *E) { - assert(getDerived().AlreadyTransformed(E->getType()) && + assert((!E->getSourceExpr() || getDerived().AlreadyTransformed(E->getType())) && "opaque value expression requires transformation"); return E; } diff --git a/clang/test/SemaTemplate/default-arguments.cpp b/clang/test/SemaTemplate/default-arguments.cpp index 0e972522d40b..37d144b71971 100644 --- a/clang/test/SemaTemplate/default-arguments.cpp +++ b/clang/test/SemaTemplate/default-arguments.cpp @@ -166,3 +166,9 @@ namespace NondefDecls { } template void f1(); // expected-note{{in instantiation of function template specialization 'NondefDecls::f1' requested here}} } + +template +struct C { + C(T t = ); // expected-error {{expected expression}} +}; +C obj;