| /* { dg-final { scan-assembler "bar" } } */ |
| /* { dg-final { scan-assembler-not "foo" } } */ |
| /* { dg-final { scan-assembler "_Z3bazv" } } */ |
| /* { dg-final { scan-assembler-not "baq" } } */ |
| /* { dg-final { scan-assembler "tut" } } */ |
| /* { dg-final { scan-assembler-not "gee" } } */ |
| /* { dg-final { scan-assembler "bang" } } */ |
| /* { dg-final { scan-assembler-not "whiz" } } */ |
| /* { dg-final { scan-assembler "eek" } } */ |
| /* { dg-final { scan-assembler-not "boo" } } */ |
| |
| #ifndef __PRAGMA_REDEFINE_EXTNAME |
| #error |
| #endif |
| |
| /* This one is expected to work. */ |
| #pragma redefine_extname foo bar |
| extern "C" int foo(void); |
| int (*p)(void) = foo; |
| |
| /* This one is expected not to work (redefine_extname |
| can only be applied to extern "C" names). */ |
| #pragma redefine_extname baz baq |
| extern int baz(void); |
| int (*q)(void) = baz; |
| |
| // PR c++/30112 |
| // These are expected to work. |
| #pragma redefine_extname gee tut |
| namespace somewhere { |
| extern "C" int gee(void); |
| int (*r)(void) = gee; |
| |
| extern "C" int whiz(void); |
| int whiz(int); |
| } |
| #pragma redefine_extname whiz bang |
| int (*s)() = somewhere::whiz; |
| |
| namespace elsewhere { |
| extern "C" int whiz(void); |
| } |
| int (*t)() = elsewhere::whiz; |
| |
| namespace A |
| { |
| extern "C" int boo(void); |
| } |
| |
| namespace B |
| { |
| extern "C" int boo(void); |
| } |
| #pragma redefine_extname boo eek |
| |
| int (*u)() = A::boo; |
| int (*v)() = B::boo; |