On Tue, Jul 16, 2024 at 11:17:14AM -0400, Jason Merrill wrote:
> On 7/16/24 11:15 AM, Andi Kleen wrote:
> > > In the adjusted test it looks like the types of f and g match, so I 
> > > wouldn't
> > > expect an error.
> > 
> > Good point! Missing the forest for the trees.
> > 
> > Anyways are the C++ patches ok with this change?
> 
> I'm still looking for a test which does error because the types are
> different.

Like this?

-Andi


diff --git a/gcc/testsuite/g++.dg/musttail10.C 
b/gcc/testsuite/g++.dg/musttail10.C
index 6a8507784a14..e454a6238a06 100644
--- a/gcc/testsuite/g++.dg/musttail10.C
+++ b/gcc/testsuite/g++.dg/musttail10.C
@@ -4,7 +4,7 @@
 
 template <class T> T f();
 
-double h() { [[gnu::musttail]] return f<int>(); } /* { dg-error "cannot 
tail-call" } */
+double g() { [[gnu::musttail]] return f<int>(); } /* { dg-error "cannot 
tail-call" } */
 
 template <class T>
 __attribute__((noinline, noclone, noipa))
@@ -18,6 +18,10 @@ template <class T>
 __attribute__((noinline, noclone, noipa))
 T g3() { [[gnu::musttail]] return f<T>(); }
 
+template <class T>
+__attribute__((noinline, noclone, noipa))
+T g4() { [[gnu::musttail]] return f<double>(); } /* { dg-error "cannot 
tail-call" } */
+
 class C
 {
   double x;
@@ -31,4 +35,5 @@ int main()
   g1<int>();
   g2<double>();
   g3<C>();
+  g4<int>();
 }

Reply via email to