mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-28 07:49:01 -04:00

selectany only applies to externally visible global variables. It has the effect of making the data weak_odr. The MSDN docs suggest that unused definitions can only be dropped at linktime, so Clang uses weak instead of linkonce. MSVC optimizes away references to constant selectany data, so it must assume that there is only one definition, hence weak_odr. Reviewers: espindola Differential Revision: http://llvm-reviews.chandlerc.com/D814 llvm-svn: 182266
34 lines
969 B
C
34 lines
969 B
C
// RUN: %clang_cc1 -triple i386-pc-win32 %s -emit-llvm -fms-compatibility -o - | FileCheck %s
|
|
|
|
__declspec(selectany) int x1 = 1;
|
|
const __declspec(selectany) int x2 = 2;
|
|
// CHECK: @x1 = weak_odr global i32 1, align 4
|
|
// CHECK: @x2 = weak_odr constant i32 2, align 4
|
|
|
|
struct __declspec(align(16)) S {
|
|
char x;
|
|
};
|
|
union { struct S s; } u;
|
|
|
|
// CHECK: @u = {{.*}}zeroinitializer, align 16
|
|
|
|
|
|
// CHECK: define void @t3() [[NAKED:#[0-9]+]] {
|
|
__declspec(naked) void t3() {}
|
|
|
|
// CHECK: define void @t22() [[NUW:#[0-9]+]]
|
|
void __declspec(nothrow) t22();
|
|
void t22() {}
|
|
|
|
// CHECK: define void @t2() [[NI:#[0-9]+]] {
|
|
__declspec(noinline) void t2() {}
|
|
|
|
// CHECK: call void @f20_t() [[NR:#[0-9]+]]
|
|
__declspec(noreturn) void f20_t(void);
|
|
void f20(void) { f20_t(); }
|
|
|
|
// CHECK: attributes [[NAKED]] = { naked noinline nounwind{{.*}} }
|
|
// CHECK: attributes [[NUW]] = { nounwind{{.*}} }
|
|
// CHECK: attributes [[NI]] = { noinline nounwind{{.*}} }
|
|
// CHECK: attributes [[NR]] = { noreturn }
|