diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 805fe6684205c..0305954a278e9 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -11303,7 +11303,7 @@ TreeTransform::TransformRequiresExpr(RequiresExpr *E) { SemaRef, Sema::ExpressionEvaluationContext::Unevaluated); RequiresExprBodyDecl *Body = RequiresExprBodyDecl::Create( - getSema().Context, E->getBody()->getDeclContext(), + getSema().Context, getSema().CurContext, E->getBody()->getBeginLoc()); Sema::ContextRAII SavedContext(getSema(), Body, /*NewThisContext*/false); diff --git a/clang/test/SemaTemplate/instantiate-requires-expr.cpp b/clang/test/SemaTemplate/instantiate-requires-expr.cpp index 927bc1bf8f12a..ba82fc1313fc9 100644 --- a/clang/test/SemaTemplate/instantiate-requires-expr.cpp +++ b/clang/test/SemaTemplate/instantiate-requires-expr.cpp @@ -164,6 +164,19 @@ namespace expr_requirement { struct r3 {}; using r3i = r3; // expected-error{{constraints not satisfied for class template 'r3' [with Ts = ]}} + + template + struct r4 { + constexpr int foo() { + if constexpr (requires { this->invalid(); }) + return 1; + else + return 0; + } + + constexpr void invalid() requires false { } + }; + static_assert(r4{}.foo() == 0); } namespace nested_requirement {