diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 2c81f7c583eb6..d2149bdbac054 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -18485,7 +18485,7 @@ void Sema::MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func, // Do not defer instantiations of constexpr functions, to avoid the // expression evaluator needing to call back into Sema if it sees a // call to such a function. - InstantiateFunctionDefinition(PointOfInstantiation, Func); + InstantiateFunctionDefinition(PointOfInstantiation, Func, true); else { Func->setInstantiationIsPending(true); PendingInstantiations.push_back( diff --git a/clang/test/SemaTemplate/instantiate-pure-virtual-function.cpp b/clang/test/SemaTemplate/instantiate-pure-virtual-function.cpp index caec42b6b77f9..adb0f3310ff68 100644 --- a/clang/test/SemaTemplate/instantiate-pure-virtual-function.cpp +++ b/clang/test/SemaTemplate/instantiate-pure-virtual-function.cpp @@ -43,18 +43,9 @@ namespace non_pure_virtual_function { constexpr void foo(const T &) { bar(1); } virtual constexpr void bar(unsigned int); // expected-warning {{inline function 'non_pure_virtual_function::B::bar' is not defined}} - // expected-note@-1 {{forward declaration of template entity is here}} - // expected-note@-2 {{forward declaration of template entity is here}} - // expected-note@-3 {{forward declaration of template entity is here}} }; - template class D : public B { // expected-warning {{instantiation of function 'non_pure_virtual_function::B::bar' required here, but no definition is available}} -// expected-warning@-1 {{instantiation of function 'non_pure_virtual_function::B::bar' required here, but no definition is available}} -// expected-warning@-2 {{instantiation of function 'non_pure_virtual_function::B::bar' required here, but no definition is available}} -// expected-note@-3 {{add an explicit instantiation declaration to suppress this warning if 'non_pure_virtual_function::B::bar' is explicitly instantiated in another translation unit}} -// expected-note@-4 {{add an explicit instantiation declaration to suppress this warning if 'non_pure_virtual_function::B::bar' is explicitly instantiated in another translation unit}} -// expected-note@-5 {{add an explicit instantiation declaration to suppress this warning if 'non_pure_virtual_function::B::bar' is explicitly instantiated in another translation unit}} -// expected-note@-6 {{used here}} + template class D : public B { // expected-note@ {{used here}} public: constexpr void bar(unsigned int) override { } diff --git a/clang/unittests/Support/TimeProfilerTest.cpp b/clang/unittests/Support/TimeProfilerTest.cpp index 7698742426dfc..49a24bb62bdb0 100644 --- a/clang/unittests/Support/TimeProfilerTest.cpp +++ b/clang/unittests/Support/TimeProfilerTest.cpp @@ -332,8 +332,8 @@ Frontend (test.cc) | | InstantiateFunction (fooA, a.h:7) | | | InstantiateFunction (fooB, b.h:8) | | | | DeferInstantiation (fooC) +| | | | InstantiateFunction (fooC, b.h:3) | | | DeferInstantiation (fooMTA) -| | | InstantiateFunction (fooC, b.h:3) | | | InstantiateFunction (fooMTA, a.h:4) )", buildTraceGraph(Json));