Clang Project

clang_source_code/test/CodeGen/redefine_extname.c
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
6extern int fake(void);
7
8int name;
9
10// __PRAGMA_REDEFINE_EXTNAME should be defined.  This will fail if it isn't...
11int 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
20int f() {
21  int foo = 0;
22  return foo;
23}
24extern 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
29static int foo_static() { return 1; }
30int baz() { return foo_static(); }
31// CHECK-NOT: call i32 @bar_static()
32
33