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 | |