PR c++/86728 - C variadic generic lambda.
[official-gcc.git] / gcc / testsuite / g++.dg / abi / nvptx-nrv1.C
blob6a05b4fc4c5bbe80b2642435770623178cce7543
1 // { dg-do compile { target nvptx-*-* } }
2 // { dg-additional-options "-m64" }
4 // Check NRV optimization doesn't change the PTX prototypes.
6 struct A
8   int d;
10 // { dg-final { scan-assembler-times ".weak .func _ZN1AC1Ev \\(.param.u64 %in_ar0\\)(?:;|\[\r\n\]+\{)" 2 } }
11   A () { d = 123; }
12   A (const A & o) { d = o.d; }
13   void frob ();
17 namespace unopt 
19   // { dg-final { scan-assembler ".extern .func _ZN5unopt3fooEv \\(.param.u64 %in_ar0\\);" } }
20   A __attribute__ ((__optimize__ ("O0"))) foo ();
22   // { dg-final { scan-assembler-times ".visible .func _ZN5unopt3barEv \\(.param.u64 %in_ar0\\)(?:;|\[\r\n\]+\{)" 2 } }
23   A __attribute__ ((__optimize__ ("O0"), noinline)) bar()
24   {
25     A l;
26     return l;
27   }
29   // { dg-final { scan-assembler-times ".visible .func _ZN5unopt3bazEv \\(.param.u64 %in_ar0\\)(?:;|\[\r\n\]+\{)" 2 } }
30   A __attribute__ ((__optimize__ ("O0"), noinline)) baz ()
31   {
32     return foo ();
33   }
35   void __attribute__ ((__optimize__ ("O0"), noinline)) quux ()
36   {
37     bar ().frob ();
38     baz ().frob ();
39     foo ().frob ();
40   }
41   
44 namespace opt
46   // { dg-final { scan-assembler ".extern .func _ZN3opt3fooEv \\(.param.u64 %in_ar0\\);" } }
47   A __attribute__ ((__optimize__ ("O2"), noinline)) foo ();
49   // { dg-final { scan-assembler-times ".visible .func _ZN3opt3barEv \\(.param.u64 %in_ar0\\)(?:;|\[\r\n\]+\{)" 2 } }
50   A __attribute__ ((__optimize__ ("O2"), noinline)) bar()
51   {
52     A l;
53     return l;
54   }
56   // { dg-final { scan-assembler-times ".visible .func _ZN3opt3bazEv \\(.param.u64 %in_ar0\\)(?:;|\[\r\n\]+\{)" 2 } }
57   A __attribute__ ((__optimize__ ("O2"))) baz ()
58   {
59     return foo ();
60   }
62   void __attribute__ ((__optimize__ ("O2"), noinline)) quux ()
63   {
64     bar ().frob ();
65     baz ().frob ();
66     foo ().frob ();
67   }
70 // Make sure we're not trying return a return value anywhere.
71 // { dg-final { scan-assembler-not "st.param.u64\[\t \]*\\\[%out_retval\\\], %\[_a-z0-9\]*;" } }