
Things can't both be in comdats and have common linkage, so never give things in comdats common linkage. Common linkage is only used in .c files, and the only thing that can trigger a comdat in c is selectany from what I can tell. Fixes PR23243. Also address an over-the-shoulder review comment from rnk by moving the hasAttr<SelectAnyAttr>() in Decl.cpp around a bit. It only makes a minor difference for selectany on global variables, so it goes well with the rest of this patch. http://reviews.llvm.org/D9042 llvm-svn: 235053
16 lines
671 B
C++
16 lines
671 B
C++
// RUN: %clang_cc1 -triple i386-pc-win32 %s -emit-llvm -fms-compatibility -o - | FileCheck %s
|
|
|
|
// selectany turns extern "C" variable declarations into definitions.
|
|
extern __declspec(selectany) int x1;
|
|
extern "C" __declspec(selectany) int x2;
|
|
extern "C++" __declspec(selectany) int x3;
|
|
extern "C" {
|
|
__declspec(selectany) int x4;
|
|
}
|
|
__declspec(selectany) int x5;
|
|
// CHECK: @"\01?x1@@3HA" = weak_odr global i32 0, comdat, align 4
|
|
// CHECK: @x2 = weak_odr global i32 0, comdat, align 4
|
|
// CHECK: @"\01?x3@@3HA" = weak_odr global i32 0, comdat, align 4
|
|
// CHECK: @x4 = weak_odr global i32 0, comdat, align 4
|
|
// CHECK: @"\01?x5@@3HA" = weak_odr global i32 0, comdat, align 4
|