mizvekov wrote:

Sure, but I'd have to resist the urge to fix them, so that they can end up as 
test cases. They probably wouldn't survive long either way.

For example, I grepped the source tree for diagnostics where we are emitting 
'type-parameter-X-X', and where this is happening not because the parameter is 
anonymous.

Found this one in `CXX/temp/temp.decls/temp.mem/p5.cpp` (reduced):
```C++
struct X0 {
  template<typename T> operator T*() const; // expected-note{{explicit 
instantiation refers here}}
};
template X0::operator float*() const; // expected-error{{explicit instantiation 
of undefined function template 'operator type-parameter-0-0 *'}}
```

Converting this test case to one involving NTTP is easy:
```C++
template<int A> struct B {};
struct X0 {
  template<int C> operator B<C>() const;
};
template X0::operator B<0>() const;
```

And sure enough, with this patch we produce:
`error: explicit instantiation of undefined function template 'operator 
B<value-parameter-0-0>'`
Instead of:
`error: explicit instantiation of undefined function template 'operator B<A>'`

Now you could devise a more complicated scenario where, instead of 
coincidentally printing the correct template parameter name, we produce an 
earlier equivalent template specialization with a different parameter name, and 
that causes a later one to be printed incorrectly.

https://github.com/llvm/llvm-project/pull/135133
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to