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" } } */
11 
12 #ifndef __PRAGMA_REDEFINE_EXTNAME
13 #error
14 #endif
15 
16 /* This one is expected to work.  */
17 #pragma redefine_extname foo bar
18 extern "C" int foo(void);
19 int (*p)(void) = foo;
20 
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;
26 
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;
33 
34   extern "C" int whiz(void);
35   int whiz(int);
36 }
37 #pragma redefine_extname whiz bang
38 int (*s)() = somewhere::whiz;
39 
40 namespace elsewhere {
41   extern "C" int whiz(void);
42 }
43 int (*t)() = elsewhere::whiz;
44 
45 namespace A
46 {
47   extern "C" int boo(void);
48 }
49 
50 namespace B
51 {
52   extern "C" int boo(void);
53 }
54 #pragma redefine_extname boo eek
55 
56 int (*u)() = A::boo;
57 int (*v)() = B::boo;
58