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