33 lines
		
	
	
		
			984 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			984 B
		
	
	
	
		
			C
		
	
	
	
| // RUN: %clang_cc1 -triple=i386-pc-solaris2.11 -w -emit-llvm %s -o - | FileCheck %s
 | |
| 
 | |
| #pragma redefine_extname fake real
 | |
| #pragma redefine_extname name alias
 | |
| 
 | |
| extern int fake(void);
 | |
| 
 | |
| int name;
 | |
| 
 | |
| // __PRAGMA_REDEFINE_EXTNAME should be defined.  This will fail if it isn't...
 | |
| int fish() { return fake() + __PRAGMA_REDEFINE_EXTNAME + name; }
 | |
| // Check that the call to fake() is emitted as a call to real()
 | |
| // CHECK:   call i32 @real()
 | |
| // Check that this also works with variables names
 | |
| // CHECK:   load i32, i32* @alias
 | |
| 
 | |
| // This is a case when redefenition is deferred *and* we have a local of the
 | |
| // same name. PR23923.
 | |
| #pragma redefine_extname foo bar
 | |
| int f() {
 | |
|   int foo = 0;
 | |
|   return foo;
 | |
| }
 | |
| extern int foo() { return 1; }
 | |
| // CHECK: define i32 @bar()
 | |
| 
 | |
| // Check that pragma redefine_extname applies to external declarations only.
 | |
| #pragma redefine_extname foo_static bar_static
 | |
| static int foo_static() { return 1; }
 | |
| int baz() { return foo_static(); }
 | |
| // CHECK-NOT: call i32 @bar_static()
 | |
| 
 |