Skip to content

Commit 1aa99ba

Browse files
committed
[clang] check deduction consistency when partial ordering function templates
This makes partial ordering of function templates consistent with other entities. Fixes #18291
1 parent 70a9535 commit 1aa99ba

File tree

9 files changed

+712
-298
lines changed

9 files changed

+712
-298
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ Bug Fixes to C++ Support
153153

154154
- Fixed a crash when an expression with a dependent ``__typeof__`` type is used as the operand of a unary operator. (#GH97646)
155155
- Fixed a failed assertion when checking invalid delete operator declaration. (#GH96191)
156+
- When performing partial ordering of function templates, clang now checks that
157+
the deduction was consistent. Fixes (#GH18291).
156158

157159
Bug Fixes to AST Handling
158160
^^^^^^^^^^^^^^^^^^^^^^^^^

clang/lib/AST/ExprConstant.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5346,7 +5346,6 @@ static EvalStmtResult EvaluateStmt(StmtResult &Result, EvalInfo &Info,
53465346
const Expr *RetExpr = cast<ReturnStmt>(S)->getRetValue();
53475347
FullExpressionRAII Scope(Info);
53485348
if (RetExpr && RetExpr->isValueDependent()) {
5349-
EvaluateDependentExpr(RetExpr, Info);
53505349
// We know we returned, but we don't know what the value is.
53515350
return ESR_Failed;
53525351
}

clang/lib/Sema/SemaTemplateDeduction.cpp

Lines changed: 565 additions & 249 deletions
Large diffs are not rendered by default.

clang/test/CodeCompletion/variadic-template.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ void f() {
88
// The important thing is that we provide OVERLOAD signature in all those cases.
99
//
1010
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-5):7 %s -o - | FileCheck --check-prefix=CHECK-1 %s
11-
// CHECK-1: OVERLOAD: [#void#]fun(<#T x#>, Args args...)
11+
// CHECK-1: OVERLOAD: [#void#]fun(<#T x#>)
1212
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-7):10 %s -o - | FileCheck --check-prefix=CHECK-2 %s
1313
// CHECK-2: OVERLOAD: [#void#]fun(int x)
1414
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-9):13 %s -o - | FileCheck --check-prefix=CHECK-3 %s

clang/test/SemaTemplate/GH18291.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// RUN: %clang_cc1 -std=c++23 -verify %s
2+
3+
template<bool> struct enable_if { typedef void type; };
4+
template <class T> class Foo {};
5+
template <class X> constexpr bool check() { return true; }
6+
template <class X, class Enable = void> struct Bar {};
7+
8+
template<class X> void func(Bar<X, typename enable_if<check<X>()>::type>) {}
9+
// expected-note@-1 {{candidate function}}
10+
11+
template<class T> void func(Bar<Foo<T>>) {}
12+
// expected-note@-1 {{candidate function}}
13+
14+
void g() {
15+
func(Bar<Foo<int>>()); // expected-error {{call to 'func' is ambiguous}}
16+
}

clang/test/SemaTemplate/cwg2398.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,20 @@ namespace class_template {
7474
// new-error@-1 {{ambiguous partial specialization}}
7575
} // namespace class_template
7676

77+
namespace class_template_func {
78+
template <class T1, class T2 = float> struct A {};
79+
80+
template <template <class T4> class TT1, class T5> void f(TT1<T5>);
81+
// new-note@-1 {{candidate function}}
82+
83+
template <class T6, class T7> void f(A<T6, T7>) {};
84+
// new-note@-1 {{candidate function}}
85+
86+
void g() {
87+
f(A<int>()); // new-error {{call to 'f' is ambiguous}}
88+
}
89+
} // namespace class_template_func
90+
7791
namespace type_pack1 {
7892
template<class T2> struct A;
7993
template<template<class ...T3s> class TT1, class T4> struct A<TT1<T4>> ;

clang/test/SemaTemplate/temp_arg_nontype.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -458,17 +458,13 @@ namespace dependent_nested_partial_specialization {
458458
namespace nondependent_default_arg_ordering {
459459
int n, m;
460460
template<typename A, A B = &n> struct X {};
461-
template<typename A> void f(X<A>); // expected-note {{candidate}}
462-
template<typename A> void f(X<A, &m>); // expected-note {{candidate}}
463-
template<typename A, A B> void f(X<A, B>); // expected-note 2{{candidate}}
461+
template<typename A> void f(X<A>);
462+
template<typename A> void f(X<A, &m>);
463+
template<typename A, A B> void f(X<A, B>);
464464
template<template<typename U, U> class T, typename A, int *B> void f(T<A, B>);
465465
void g() {
466-
// FIXME: The first and second function templates above should be
467-
// considered more specialized than the third, but during partial
468-
// ordering we fail to check that we actually deduced template arguments
469-
// that make the deduced A identical to A.
470-
X<int *, &n> x; f(x); // expected-error {{ambiguous}}
471-
X<int *, &m> y; f(y); // expected-error {{ambiguous}}
466+
X<int *, &n> x; f(x);
467+
X<int *, &m> y; f(y);
472468
}
473469
}
474470

clang/test/SemaTemplate/temp_arg_type.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,10 @@ namespace deduce_noexcept {
6969
void noexcept_function() noexcept;
7070
void throwing_function();
7171

72-
template<typename T, bool B> float &deduce_function(T(*)() noexcept(B)); // expected-note {{candidate}}
73-
template<typename T> int &deduce_function(T(*)() noexcept); // expected-note {{candidate}}
72+
template<typename T, bool B> float &deduce_function(T(*)() noexcept(B));
73+
template<typename T> int &deduce_function(T(*)() noexcept);
7474
void test_function_deduction() {
75-
// FIXME: This should probably unambiguously select the second overload.
76-
int &r = deduce_function(noexcept_function); // expected-error {{ambiguous}}
75+
int &r = deduce_function(noexcept_function);
7776
float &s = deduce_function(throwing_function);
7877
}
7978

clang/test/Templight/templight-empty-entries-fix.cpp

Lines changed: 106 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,78 @@ template <bool d = true, class = typename b<d>::c> void a() { a(); }
170170

171171
template <bool = true> void d(int = 0) { d(); }
172172

173+
// CHECK-LABEL: {{^---$}}
174+
// CHECK: {{^name:[ ]+a$}}
175+
// CHECK: {{^kind:[ ]+DeducedTemplateArgumentSubstitution$}}
176+
// CHECK: {{^event:[ ]+Begin$}}
177+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:60:57'$}}
178+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:60:63'$}}
179+
// CHECK-LABEL: {{^---$}}
180+
// CHECK: {{^name:[ ]+d$}}
181+
// CHECK: {{^kind:[ ]+DefaultTemplateArgumentInstantiation$}}
182+
// CHECK: {{^event:[ ]+Begin$}}
183+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:60:16'$}}
184+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:60:57'$}}
185+
// CHECK-LABEL: {{^---$}}
186+
// CHECK: {{^name:[ ]+d$}}
187+
// CHECK: {{^kind:[ ]+DefaultTemplateArgumentInstantiation$}}
188+
// CHECK: {{^event:[ ]+End$}}
189+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:60:16'$}}
190+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:60:57'$}}
191+
// CHECK-LABEL: {{^---$}}
192+
// CHECK: {{^name:[ ]+unnamed template type parameter 1 of a$}}
193+
// CHECK: {{^kind:[ ]+DefaultTemplateArgumentInstantiation$}}
194+
// CHECK: {{^event:[ ]+Begin$}}
195+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:60:32'$}}
196+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:60:57'$}}
197+
// CHECK-LABEL: {{^---$}}
198+
// CHECK: {{^name:[ ]+'b<1>'$}}
199+
// CHECK: {{^kind:[ ]+Memoization$}}
200+
// CHECK: {{^event:[ ]+Begin$}}
201+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:59:23'$}}
202+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:60:43'$}}
203+
// CHECK-LABEL: {{^---$}}
204+
// CHECK: {{^name:[ ]+'b<1>'$}}
205+
// CHECK: {{^kind:[ ]+Memoization$}}
206+
// CHECK: {{^event:[ ]+End$}}
207+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:59:23'$}}
208+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:60:43'$}}
209+
// CHECK-LABEL: {{^---$}}
210+
// CHECK: {{^name:[ ]+unnamed template type parameter 1 of a$}}
211+
// CHECK: {{^kind:[ ]+DefaultTemplateArgumentInstantiation$}}
212+
// CHECK: {{^event:[ ]+End$}}
213+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:60:32'$}}
214+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:60:57'$}}
215+
// CHECK-LABEL: {{^---$}}
216+
// CHECK: {{^name:[ ]+a$}}
217+
// CHECK: {{^kind:[ ]+DeducedTemplateArgumentSubstitution$}}
218+
// CHECK: {{^event:[ ]+End$}}
219+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:60:57'$}}
220+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:60:63'$}}
221+
// CHECK-LABEL: {{^---$}}
222+
// CHECK: {{^name:[ ]+a$}}
223+
// CHECK: {{^kind:[ ]+DeducedTemplateArgumentSubstitution$}}
224+
// CHECK: {{^event:[ ]+Begin$}}
225+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:20:25'$}}
226+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:60:63'$}}
227+
// CHECK-LABEL: {{^---$}}
228+
// CHECK: {{^name:[ ]+unnamed template non-type parameter 0 of a$}}
229+
// CHECK: {{^kind:[ ]+DefaultTemplateArgumentInstantiation$}}
230+
// CHECK: {{^event:[ ]+Begin$}}
231+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:20:15'$}}
232+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:20:25'$}}
233+
// CHECK-LABEL: {{^---$}}
234+
// CHECK: {{^name:[ ]+unnamed template non-type parameter 0 of a$}}
235+
// CHECK: {{^kind:[ ]+DefaultTemplateArgumentInstantiation$}}
236+
// CHECK: {{^event:[ ]+End$}}
237+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:20:15'$}}
238+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:20:25'$}}
239+
// CHECK-LABEL: {{^---$}}
240+
// CHECK: {{^name:[ ]+a$}}
241+
// CHECK: {{^kind:[ ]+DeducedTemplateArgumentSubstitution$}}
242+
// CHECK: {{^event:[ ]+End$}}
243+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:20:25'$}}
244+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:60:63'$}}
173245
// CHECK-LABEL: {{^---$}}
174246
// CHECK: {{^name:[ ]+d$}}
175247
// CHECK: {{^kind:[ ]+DeducedTemplateArgumentSubstitution$}}
@@ -225,41 +297,41 @@ void e() {
225297
}
226298

227299
// CHECK-LABEL: {{^---$}}
228-
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:223:3\)'$}}
300+
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:295:3\)'$}}
229301
// CHECK: {{^kind:[ ]+Memoization$}}
230302
// CHECK: {{^event:[ ]+Begin$}}
231-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:223:3'$}}
232-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:224:5'$}}
303+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:295:3'$}}
304+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:296:5'$}}
233305
// CHECK-LABEL: {{^---$}}
234-
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:223:3\)'$}}
306+
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:295:3\)'$}}
235307
// CHECK: {{^kind:[ ]+Memoization$}}
236308
// CHECK: {{^event:[ ]+End$}}
237-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:223:3'$}}
238-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:224:5'$}}
309+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:295:3'$}}
310+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:296:5'$}}
239311
// CHECK-LABEL: {{^---$}}
240-
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:223:3\)'$}}
312+
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:295:3\)'$}}
241313
// CHECK: {{^kind:[ ]+Memoization$}}
242314
// CHECK: {{^event:[ ]+Begin$}}
243-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:223:3'$}}
244-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:224:5'$}}
315+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:295:3'$}}
316+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:296:5'$}}
245317
// CHECK-LABEL: {{^---$}}
246-
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:223:3\)'$}}
318+
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:295:3\)'$}}
247319
// CHECK: {{^kind:[ ]+Memoization$}}
248320
// CHECK: {{^event:[ ]+End$}}
249-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:223:3'$}}
250-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:224:5'$}}
321+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:295:3'$}}
322+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:296:5'$}}
251323
// CHECK-LABEL: {{^---$}}
252-
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:223:3\)'$}}
324+
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:295:3\)'$}}
253325
// CHECK: {{^kind:[ ]+Memoization$}}
254326
// CHECK: {{^event:[ ]+Begin$}}
255-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:223:3'$}}
256-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:223:3'$}}
327+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:295:3'$}}
328+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:295:3'$}}
257329
// CHECK-LABEL: {{^---$}}
258-
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:223:3\)'$}}
330+
// CHECK: {{^name:[ ]+'\(unnamed struct at .*templight-empty-entries-fix.cpp:295:3\)'$}}
259331
// CHECK: {{^kind:[ ]+Memoization$}}
260332
// CHECK: {{^event:[ ]+End$}}
261-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:223:3'$}}
262-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:223:3'$}}
333+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:295:3'$}}
334+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:295:3'$}}
263335

264336

265337
template <template<typename> class>
@@ -275,59 +347,59 @@ void foo() {
275347
// CHECK: {{^name:[ ]+d$}}
276348
// CHECK: {{^kind:[ ]+ExplicitTemplateArgumentSubstitution$}}
277349
// CHECK: {{^event:[ ]+Begin$}}
278-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:266:6'$}}
279-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:271:3'$}}
350+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:338:6'$}}
351+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:343:3'$}}
280352
// CHECK-LABEL: {{^---$}}
281353
// CHECK: {{^name:[ ]+unnamed template template parameter 0 of d$}}
282354
// CHECK: {{^kind:[ ]+PriorTemplateArgumentSubstitution$}}
283355
// CHECK: {{^event:[ ]+Begin$}}
284-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:265:35'$}}
356+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:337:35'$}}
285357
// CHECK: {{^poi:[ ]+''$}}
286358
// CHECK-LABEL: {{^---$}}
287359
// CHECK: {{^name:[ ]+unnamed template template parameter 0 of d$}}
288360
// CHECK: {{^kind:[ ]+PriorTemplateArgumentSubstitution$}}
289361
// CHECK: {{^event:[ ]+End$}}
290-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:265:35'$}}
362+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:337:35'$}}
291363
// CHECK: {{^poi:[ ]+''$}}
292364
// CHECK-LABEL: {{^---$}}
293365
// CHECK: {{^name:[ ]+d$}}
294366
// CHECK: {{^kind:[ ]+ExplicitTemplateArgumentSubstitution$}}
295367
// CHECK: {{^event:[ ]+End$}}
296-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:266:6'$}}
297-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:271:3'$}}
368+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:338:6'$}}
369+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:343:3'$}}
298370
// CHECK-LABEL: {{^---$}}
299371
// CHECK: {{^name:[ ]+d$}}
300372
// CHECK: {{^kind:[ ]+DeducedTemplateArgumentSubstitution$}}
301373
// CHECK: {{^event:[ ]+Begin$}}
302-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:266:6'$}}
303-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:271:3'$}}
374+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:338:6'$}}
375+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:343:3'$}}
304376
// CHECK-LABEL: {{^---$}}
305377
// CHECK: {{^name:[ ]+d$}}
306378
// CHECK: {{^kind:[ ]+DeducedTemplateArgumentSubstitution$}}
307379
// CHECK: {{^event:[ ]+End$}}
308-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:266:6'$}}
309-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:271:3'$}}
380+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:338:6'$}}
381+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:343:3'$}}
310382
// CHECK-LABEL: {{^---$}}
311383
// CHECK: {{^name:[ ]+'d<C>'$}}
312384
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
313385
// CHECK: {{^event:[ ]+Begin$}}
314-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:266:6'$}}
315-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:271:3'$}}
386+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:338:6'$}}
387+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:343:3'$}}
316388
// CHECK-LABEL: {{^---$}}
317389
// CHECK: {{^name:[ ]+'d<C>'$}}
318390
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
319391
// CHECK: {{^event:[ ]+End$}}
320-
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:266:6'$}}
321-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:271:3'$}}
392+
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:338:6'$}}
393+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:343:3'$}}
322394
// CHECK-LABEL: {{^---$}}
323395
// CHECK: {{^name:[ ]+d$}}
324396
// CHECK: {{^kind:[ ]+ExplicitTemplateArgumentSubstitution$}}
325397
// CHECK: {{^event:[ ]+Begin$}}
326398
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:171:29'$}}
327-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:271:3'$}}
399+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:343:3'$}}
328400
// CHECK-LABEL: {{^---$}}
329401
// CHECK: {{^name:[ ]+d$}}
330402
// CHECK: {{^kind:[ ]+ExplicitTemplateArgumentSubstitution$}}
331403
// CHECK: {{^event:[ ]+End$}}
332404
// CHECK: {{^orig:[ ]+'.*templight-empty-entries-fix.cpp:171:29'$}}
333-
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:271:3'$}}
405+
// CHECK: {{^poi:[ ]+'.*templight-empty-entries-fix.cpp:343:3'$}}

0 commit comments

Comments
 (0)