llvm-project/clang/test/CodeGen/ms-declspecs.cpp
Nico Weber 608e768d8d Don't crash when a selectany symbol would get common linkage
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
2015-04-15 23:04:24 +00:00

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