| 1 | // RUN: %clang_cc1 -triple=i386-pc-solaris2.11 -w -emit-llvm %s -o - | FileCheck %s |
| 2 | |
| 3 | #pragma redefine_extname fake real |
| 4 | #pragma redefine_extname name alias |
| 5 | |
| 6 | extern int fake(void); |
| 7 | |
| 8 | int name; |
| 9 | |
| 10 | // __PRAGMA_REDEFINE_EXTNAME should be defined. This will fail if it isn't... |
| 11 | int fish() { return fake() + __PRAGMA_REDEFINE_EXTNAME + name; } |
| 12 | // Check that the call to fake() is emitted as a call to real() |
| 13 | // CHECK: call i32 @real() |
| 14 | // Check that this also works with variables names |
| 15 | // CHECK: load i32, i32* @alias |
| 16 | |
| 17 | // This is a case when redefenition is deferred *and* we have a local of the |
| 18 | // same name. PR23923. |
| 19 | #pragma redefine_extname foo bar |
| 20 | int f() { |
| 21 | int foo = 0; |
| 22 | return foo; |
| 23 | } |
| 24 | extern int foo() { return 1; } |
| 25 | // CHECK: define i32 @bar() |
| 26 | |
| 27 | // Check that pragma redefine_extname applies to external declarations only. |
| 28 | #pragma redefine_extname foo_static bar_static |
| 29 | static int foo_static() { return 1; } |
| 30 | int baz() { return foo_static(); } |
| 31 | // CHECK-NOT: call i32 @bar_static() |
| 32 | |
| 33 | |