re PR c++/67184 (Missed optimization with C++11 final specifier)
[official-gcc.git] / gcc / testsuite / g++.dg / other / pragma-re-1.C
blob6a94c5d68a7e77020c001a93fc1a42f57d6f57b6
1 /* { dg-final { scan-assembler "bar" } } */
2 /* { dg-final { scan-assembler-not "foo" } } */
3 /* { dg-final { scan-assembler "_Z3bazv" } } */
4 /* { dg-final { scan-assembler-not "baq" } } */
5 /* { dg-final { scan-assembler "tut" } } */
6 /* { dg-final { scan-assembler-not "gee" } } */
7 /* { dg-final { scan-assembler "bang" } } */
8 /* { dg-final { scan-assembler-not "whiz" } } */
9 /* { dg-final { scan-assembler "eek" } } */
10 /* { dg-final { scan-assembler-not "boo" } } */
12 #ifndef __PRAGMA_REDEFINE_EXTNAME
13 #error 
14 #endif
16 /* This one is expected to work.  */
17 #pragma redefine_extname foo bar
18 extern "C" int foo(void);
19 int (*p)(void) = foo;
21 /* This one is expected not to work (redefine_extname
22    can only be applied to extern "C" names).  */
23 #pragma redefine_extname baz baq
24 extern int baz(void);
25 int (*q)(void) = baz;
27 // PR c++/30112
28 // These are expected to work.
29 #pragma redefine_extname gee tut
30 namespace somewhere {
31   extern "C" int gee(void);
32   int (*r)(void) = gee;
34   extern "C" int whiz(void);
35   int whiz(int);
37 #pragma redefine_extname whiz bang
38 int (*s)() = somewhere::whiz;
40 namespace elsewhere {
41   extern "C" int whiz(void);
43 int (*t)() = elsewhere::whiz;
45 namespace A
47   extern "C" int boo(void);
50 namespace B
52   extern "C" int boo(void);
54 #pragma redefine_extname boo eek
56 int (*u)() = A::boo;
57 int (*v)() = B::boo;