forked from OSchip/llvm-project
Start setting dso_local for COFF.
With this there are still some GVs where we don't set dso_local because setGVProperties is never called. I intend to fix that in followup commits. This is just the bare minimum to teach shouldAssumeDSOLocal what it should do for COFF. llvm-svn: 325915
This commit is contained in:
parent
504d23551e
commit
004d240b6a
clang
lib/CodeGen
test
CodeGen
aarch64-varargs-ms.cattr-x86-interrupt.cblocks-windows.cbuiltins-ms.cbuiltins-overflow.cc-strings.ccfi-icall-cross-dso.ccfi-icall.ccfstring-windows.cdllexport.cdllimport.cdso-local-executable.cexceptions-seh-finally.cexceptions-seh-leave.cexceptions-seh.cinline.cmangle-ms.cmangle-windows-rtd.cmangle-windows.cmicrosoft-call-conv-x64.cmingw-long-double.cms-align-tentative.cms-annotation.cms-barriers-intrinsics.cms-declspecs.cms-declspecs.cppms-inline-asm-align.cms-inline-asm-avx512.cms-intrinsics.cms-setjmp.cms-x86-intrinsics.cms_abi.cms_abi_aarch64.cms_this.cpppreserve-call-conv.cregcall.cvariadic-null-win64.cvectorcall.cwindows-itanium.cwindows-on-arm-dllimport-dllexport.cwindows-struct-abi.cwindows-swiftcall.cx86_32-arguments-win32.cx86_32-fpcc-struct-return.cx86_64-arguments-win32.c
CodeGenCXX
PR19955.cppatomic-dllexport.cppattr-x86-interrupt.cppconstructor-destructor-return-this.cppdllexport-alias.cppdllexport-ctor-closure.cppdllexport-dtor-thunks.cppdllexport-members.cppdllexport-ms-friend.cppdllexport-pr26549.cppdllexport-vtable-thunks.cppdllexport.cppdllimport-dtor-thunks.cppdllimport-members.cppdllimport-memptr-global.cppdllimport-rtti.cppdllimport.cppexceptions-cxx-ehsc.cppexceptions-cxx-new.cppexceptions-seh-filter-captures.cppexceptions-seh.cppexplicit-instantiation.cpphomogeneous-aggregates.cppinitializer-list-ctor-order.cppinline-dllexport-member.cppinline-functions.cppmangle-ms-cxx11.cppmangle-ms-md5.cppmangle-ms-templates-memptrs-2.cppmangle-ms-vector-types.cppmangle-ms.cppmangle-windows.cppmember-function-pointer-calls.cppmicrosoft-abi-arg-order.cppmicrosoft-abi-array-cookies.cppmicrosoft-abi-byval-sret.cppmicrosoft-abi-byval-thunks.cppmicrosoft-abi-byval-vararg.cppmicrosoft-abi-cdecl-method-sret.cppmicrosoft-abi-constexpr-vs-inheritance.cppmicrosoft-abi-default-cc.cppmicrosoft-abi-dynamic-cast.cppmicrosoft-abi-eh-catch.cppmicrosoft-abi-eh-cleanups.cppmicrosoft-abi-eh-inlineasm.cppmicrosoft-abi-eh-terminate.cppmicrosoft-abi-extern-template.cppmicrosoft-abi-member-pointers.cppmicrosoft-abi-methods.cppmicrosoft-abi-multiple-nonvirtual-inheritance.cppmicrosoft-abi-sret-and-byval.cpp
|
@ -240,7 +240,6 @@ llvm::Constant *CodeGenModule::getOrCreateStaticVarDecl(
|
|||
getModule(), LTy, Ty.isConstant(getContext()), Linkage, Init, Name,
|
||||
nullptr, llvm::GlobalVariable::NotThreadLocal, TargetAS);
|
||||
GV->setAlignment(getContext().getDeclAlign(&D).getQuantity());
|
||||
setGVProperties(GV, &D);
|
||||
|
||||
if (supportsCOMDAT() && GV->isWeakForLinker())
|
||||
GV->setComdat(TheModule.getOrInsertComdat(GV->getName()));
|
||||
|
@ -255,6 +254,8 @@ llvm::Constant *CodeGenModule::getOrCreateStaticVarDecl(
|
|||
GV->setDLLStorageClass(llvm::GlobalVariable::DLLExportStorageClass);
|
||||
}
|
||||
|
||||
setGVProperties(GV, &D);
|
||||
|
||||
// Make sure the result is of the correct type.
|
||||
LangAS ExpectedAS = Ty.getAddressSpace();
|
||||
llvm::Constant *Addr = GV;
|
||||
|
|
|
@ -713,8 +713,20 @@ void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV,
|
|||
|
||||
static bool shouldAssumeDSOLocal(const CodeGenModule &CGM,
|
||||
llvm::GlobalValue *GV) {
|
||||
// DLLImport explicitly marks the GV as external.
|
||||
if (GV->hasDLLImportStorageClass())
|
||||
return false;
|
||||
|
||||
const llvm::Triple &TT = CGM.getTriple();
|
||||
// Only handle ELF for now.
|
||||
// Every other GV is local on COFF.
|
||||
// Make an exception for windows OS in the triple: Some firmware builds use
|
||||
// *-win32-macho triples. This (accidentally?) produced windows relocations
|
||||
// without GOT tables in older clang versions; Keep this behaviour.
|
||||
// FIXME: even thread local variables?
|
||||
if (TT.isOSBinFormatCOFF() || (TT.isOSWindows() && TT.isOSBinFormatMachO()))
|
||||
return true;
|
||||
|
||||
// Only handle COFF and ELF for now.
|
||||
if (!TT.isOSBinFormatELF())
|
||||
return false;
|
||||
|
||||
|
|
|
@ -723,6 +723,9 @@ public:
|
|||
|
||||
void setDSOLocal(llvm::GlobalValue *GV) const;
|
||||
|
||||
/// Set visibility and dso_local.
|
||||
/// This must be called after dllimport/dllexport is set.
|
||||
/// FIXME: should this set dllimport/dllexport instead?
|
||||
void setGVProperties(llvm::GlobalValue *GV, const NamedDecl *D) const;
|
||||
|
||||
/// Set the TLS mode for the given LLVM GlobalValue for the thread-local
|
||||
|
|
|
@ -1641,13 +1641,14 @@ llvm::GlobalVariable *ItaniumCXXABI::getAddrOfVTable(const CXXRecordDecl *RD,
|
|||
VTable = CGM.CreateOrReplaceCXXRuntimeVariable(
|
||||
Name, VTableType, llvm::GlobalValue::ExternalLinkage);
|
||||
VTable->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
|
||||
CGM.setGVProperties(VTable, RD);
|
||||
|
||||
if (RD->hasAttr<DLLImportAttr>())
|
||||
VTable->setDLLStorageClass(llvm::GlobalValue::DLLImportStorageClass);
|
||||
else if (RD->hasAttr<DLLExportAttr>())
|
||||
VTable->setDLLStorageClass(llvm::GlobalValue::DLLExportStorageClass);
|
||||
|
||||
CGM.setGVProperties(VTable, RD);
|
||||
|
||||
return VTable;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include <stdarg.h>
|
||||
|
||||
int simple_int(va_list ap) {
|
||||
// CHECK-LABEL: define i32 @simple_int
|
||||
// CHECK-LABEL: define dso_local i32 @simple_int
|
||||
return va_arg(ap, int);
|
||||
// CHECK: [[ADDR:%[a-z_0-9]+]] = bitcast i8* %argp.cur to i32*
|
||||
// CHECK: [[RESULT:%[a-z_0-9]+]] = load i32, i32* [[ADDR]]
|
||||
|
|
|
@ -23,12 +23,12 @@ __attribute__((interrupt)) void foo8(int *a) {}
|
|||
// X86_LINUX: "disable-tail-calls"="true"
|
||||
// X86_LINUX-NOT: "disable-tail-calls"="false"
|
||||
// X86_64_WIN: @llvm.used = appending global [2 x i8*] [i8* bitcast (void (i32*, i64)* @foo7 to i8*), i8* bitcast (void (i32*)* @foo8 to i8*)], section "llvm.metadata"
|
||||
// X86_64_WIN: define x86_intrcc void @foo7(i32* %{{.+}}, i64 %{{.+}})
|
||||
// X86_64_WIN: define x86_intrcc void @foo8(i32* %{{.+}})
|
||||
// X86_64_WIN: define dso_local x86_intrcc void @foo7(i32* %{{.+}}, i64 %{{.+}})
|
||||
// X86_64_WIN: define dso_local x86_intrcc void @foo8(i32* %{{.+}})
|
||||
// X86_64_Win: "disable-tail-calls"="true"
|
||||
// X86_64_Win-NOT: "disable-tail-calls"="false"
|
||||
// X86_WIN: @llvm.used = appending global [2 x i8*] [i8* bitcast (void (i32*, i32)* @foo7 to i8*), i8* bitcast (void (i32*)* @foo8 to i8*)], section "llvm.metadata"
|
||||
// X86_WIN: define x86_intrcc void @foo7(i32* %{{.+}}, i32 %{{.+}})
|
||||
// X86_WIN: define x86_intrcc void @foo8(i32* %{{.+}})
|
||||
// X86_WIN: define dso_local x86_intrcc void @foo7(i32* %{{.+}}, i32 %{{.+}})
|
||||
// X86_WIN: define dso_local x86_intrcc void @foo8(i32* %{{.+}})
|
||||
// X86_Win: "disable-tail-calls"="true"
|
||||
// X86_Win-NOT: "disable-tail-calls"="false"
|
||||
|
|
|
@ -68,7 +68,7 @@ int (*g(void))(void) {
|
|||
}
|
||||
|
||||
// CHECK-BLOCKS-IN-BLOCKS-DECL: @_NSConcreteStackBlock = external dllexport global i8*
|
||||
// CHECK-BLOCKS-IN-BLOCKS-DEFN: @_NSConcreteStackBlock = common dllexport global [5 x i32]
|
||||
// CHECK-BLOCKS-IN-BLOCKS-DEFN: @_NSConcreteStackBlock = common dso_local dllexport global [5 x i32]
|
||||
// CHECK-BLOCKS-NOT-IN-BLOCKS: @_NSConcreteStackBlock = external dllimport global i8*
|
||||
// CHECK-BLOCKS-NOT-IN-BLOCKS-EXTERN: @_NSConcreteStackBlock = external dllimport global i8*
|
||||
// CHECK-BLOCKS-NOT-IN-BLOCKS-EXTERN-DLLIMPORT: @_NSConcreteStackBlock = external dllimport global i8*
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// RUN: %clang_cc1 %s -emit-llvm -o - -fms-extensions -triple i686-pc-win32 | FileCheck %s
|
||||
|
||||
// CHECK-LABEL: define void @test_alloca(
|
||||
// CHECK-LABEL: define dso_local void @test_alloca(
|
||||
void capture(void *);
|
||||
void test_alloca(int n) {
|
||||
capture(_alloca(n));
|
||||
|
@ -8,7 +8,7 @@ void test_alloca(int n) {
|
|||
// CHECK: call void @capture(i8* %[[arg]])
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @test_alloca_with_align(
|
||||
// CHECK-LABEL: define dso_local void @test_alloca_with_align(
|
||||
void test_alloca_with_align(int n) {
|
||||
capture(__builtin_alloca_with_align(n, 64));
|
||||
// CHECK: %[[arg:.*]] = alloca i8, i32 %{{.*}}, align 8
|
||||
|
|
|
@ -14,7 +14,7 @@ extern long long LongLongErrorCode;
|
|||
void overflowed(void);
|
||||
|
||||
unsigned test_add_overflow_uint_uint_uint(unsigned x, unsigned y) {
|
||||
// CHECK-LABEL: define i32 @test_add_overflow_uint_uint_uint
|
||||
// CHECK-LABEL: define {{(dso_local )?}}i32 @test_add_overflow_uint_uint_uint
|
||||
// CHECK-NOT: ext
|
||||
// CHECK: [[S:%.+]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 %{{.+}}, i32 %{{.+}})
|
||||
// CHECK-DAG: [[Q:%.+]] = extractvalue { i32, i1 } [[S]], 0
|
||||
|
@ -28,7 +28,7 @@ unsigned test_add_overflow_uint_uint_uint(unsigned x, unsigned y) {
|
|||
}
|
||||
|
||||
int test_add_overflow_int_int_int(int x, int y) {
|
||||
// CHECK-LABEL: define i32 @test_add_overflow_int_int_int
|
||||
// CHECK-LABEL: define {{(dso_local )?}}i32 @test_add_overflow_int_int_int
|
||||
// CHECK-NOT: ext
|
||||
// CHECK: [[S:%.+]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %{{.+}}, i32 %{{.+}})
|
||||
// CHECK-DAG: [[C:%.+]] = extractvalue { i32, i1 } [[S]], 1
|
||||
|
@ -42,7 +42,7 @@ int test_add_overflow_int_int_int(int x, int y) {
|
|||
}
|
||||
|
||||
unsigned test_sub_overflow_uint_uint_uint(unsigned x, unsigned y) {
|
||||
// CHECK-LABEL: define i32 @test_sub_overflow_uint_uint_uint
|
||||
// CHECK-LABEL: define {{(dso_local )?}}i32 @test_sub_overflow_uint_uint_uint
|
||||
// CHECK-NOT: ext
|
||||
// CHECK: [[S:%.+]] = call { i32, i1 } @llvm.usub.with.overflow.i32(i32 %{{.+}}, i32 %{{.+}})
|
||||
// CHECK-DAG: [[Q:%.+]] = extractvalue { i32, i1 } [[S]], 0
|
||||
|
@ -56,7 +56,7 @@ unsigned test_sub_overflow_uint_uint_uint(unsigned x, unsigned y) {
|
|||
}
|
||||
|
||||
int test_sub_overflow_int_int_int(int x, int y) {
|
||||
// CHECK-LABEL: define i32 @test_sub_overflow_int_int_int
|
||||
// CHECK-LABEL: define {{(dso_local )?}}i32 @test_sub_overflow_int_int_int
|
||||
// CHECK-NOT: ext
|
||||
// CHECK: [[S:%.+]] = call { i32, i1 } @llvm.ssub.with.overflow.i32(i32 %{{.+}}, i32 %{{.+}})
|
||||
// CHECK-DAG: [[C:%.+]] = extractvalue { i32, i1 } [[S]], 1
|
||||
|
@ -70,7 +70,7 @@ int test_sub_overflow_int_int_int(int x, int y) {
|
|||
}
|
||||
|
||||
unsigned test_mul_overflow_uint_uint_uint(unsigned x, unsigned y) {
|
||||
// CHECK-LABEL: define i32 @test_mul_overflow_uint_uint_uint
|
||||
// CHECK-LABEL: define {{(dso_local )?}}i32 @test_mul_overflow_uint_uint_uint
|
||||
// CHECK-NOT: ext
|
||||
// CHECK: [[S:%.+]] = call { i32, i1 } @llvm.umul.with.overflow.i32(i32 %{{.+}}, i32 %{{.+}})
|
||||
// CHECK-DAG: [[Q:%.+]] = extractvalue { i32, i1 } [[S]], 0
|
||||
|
@ -84,7 +84,7 @@ unsigned test_mul_overflow_uint_uint_uint(unsigned x, unsigned y) {
|
|||
}
|
||||
|
||||
int test_mul_overflow_int_int_int(int x, int y) {
|
||||
// CHECK-LABEL: define i32 @test_mul_overflow_int_int_int
|
||||
// CHECK-LABEL: define {{(dso_local )?}}i32 @test_mul_overflow_int_int_int
|
||||
// CHECK-NOT: ext
|
||||
// CHECK: [[S:%.+]] = call { i32, i1 } @llvm.smul.with.overflow.i32(i32 %{{.+}}, i32 %{{.+}})
|
||||
// CHECK-DAG: [[C:%.+]] = extractvalue { i32, i1 } [[S]], 1
|
||||
|
@ -98,7 +98,7 @@ int test_mul_overflow_int_int_int(int x, int y) {
|
|||
}
|
||||
|
||||
int test_add_overflow_uint_int_int(unsigned x, int y) {
|
||||
// CHECK-LABEL: define i32 @test_add_overflow_uint_int_int
|
||||
// CHECK-LABEL: define {{(dso_local )?}}i32 @test_add_overflow_uint_int_int
|
||||
// CHECK: [[XE:%.+]] = zext i32 %{{.+}} to i33
|
||||
// CHECK: [[YE:%.+]] = sext i32 %{{.+}} to i33
|
||||
// CHECK: [[S:%.+]] = call { i33, i1 } @llvm.sadd.with.overflow.i33(i33 [[XE]], i33 [[YE]])
|
||||
|
@ -136,7 +136,7 @@ _Bool test_add_overflow_uint_uint_bool(unsigned x, unsigned y) {
|
|||
}
|
||||
|
||||
unsigned test_add_overflow_bool_bool_uint(_Bool x, _Bool y) {
|
||||
// CHECK-LABEL: define i32 @test_add_overflow_bool_bool_uint
|
||||
// CHECK-LABEL: define {{(dso_local )?}}i32 @test_add_overflow_bool_bool_uint
|
||||
// CHECK: [[XE:%.+]] = zext i1 %{{.+}} to i32
|
||||
// CHECK: [[YE:%.+]] = zext i1 %{{.+}} to i32
|
||||
// CHECK: [[S:%.+]] = call { i32, i1 } @llvm.uadd.with.overflow.i32(i32 [[XE]], i32 [[YE]])
|
||||
|
@ -165,7 +165,7 @@ _Bool test_add_overflow_bool_bool_bool(_Bool x, _Bool y) {
|
|||
}
|
||||
|
||||
int test_add_overflow_volatile(int x, int y) {
|
||||
// CHECK-LABEL: define i32 @test_add_overflow_volatile
|
||||
// CHECK-LABEL: define {{(dso_local )?}}i32 @test_add_overflow_volatile
|
||||
// CHECK: [[S:%.+]] = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %{{.+}}, i32 %{{.+}})
|
||||
// CHECK-DAG: [[Q:%.+]] = extractvalue { i32, i1 } [[S]], 0
|
||||
// CHECK-DAG: [[C:%.+]] = extractvalue { i32, i1 } [[S]], 1
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// Should be 3 hello strings, two global (of different sizes), the rest are
|
||||
// shared.
|
||||
|
||||
// CHECK: @align = global i8 [[ALIGN:[0-9]+]]
|
||||
// CHECK: @align = {{(dso_local )?}}global i8 [[ALIGN:[0-9]+]]
|
||||
// ITANIUM: @.str = private unnamed_addr constant [6 x i8] c"hello\00"
|
||||
// MSABI: @"\01??_C@_05CJBACGMB@hello?$AA@" = linkonce_odr unnamed_addr constant [6 x i8] c"hello\00", comdat, align 1
|
||||
// ITANIUM: @f1.x = internal global i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i32 0, i32 0)
|
||||
|
@ -13,7 +13,7 @@
|
|||
// CHECK: @f3.x = internal global [8 x i8] c"hello\00\00\00", align [[ALIGN]]
|
||||
// ITANIUM: @f4.x = internal global %struct.s { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i32 0, i32 0) }
|
||||
// MSABI: @f4.x = internal global %struct.s { i8* getelementptr inbounds ([6 x i8], [6 x i8]* @"\01??_C@_05CJBACGMB@hello?$AA@", i32 0, i32 0) }
|
||||
// CHECK: @x = global [3 x i8] c"ola", align [[ALIGN]]
|
||||
// CHECK: @x = {{(dso_local )?}}global [3 x i8] c"ola", align [[ALIGN]]
|
||||
|
||||
// XFAIL: hexagon
|
||||
// Hexagon aligns arrays of size 8+ bytes to a 64-bit boundary, which
|
||||
|
|
|
@ -49,7 +49,7 @@ void caller(void (*f)()) {
|
|||
// CHECK: define internal void @g({{.*}} !type [[TVOID:![0-9]+]] !type [[TVOID_GENERALIZED:![0-9]+]] !type [[TVOID_ID:![0-9]+]]
|
||||
static void g(void) {}
|
||||
|
||||
// CHECK: declare void @h({{[^!]*$}}
|
||||
// CHECK: declare {{(dso_local )?}}void @h({{[^!]*$}}
|
||||
void h(void);
|
||||
|
||||
typedef void (*Fn)(void);
|
||||
|
@ -60,9 +60,9 @@ Fn h1() {
|
|||
return &h;
|
||||
}
|
||||
|
||||
// CHECK: define void @bar({{.*}} !type [[TNOPROTO:![0-9]+]] !type [[TNOPROTO_GENERALIZED:![0-9]+]] !type [[TNOPROTO_ID:![0-9]+]]
|
||||
// CHECK: define {{(dso_local )?}}void @bar({{.*}} !type [[TNOPROTO:![0-9]+]] !type [[TNOPROTO_GENERALIZED:![0-9]+]] !type [[TNOPROTO_ID:![0-9]+]]
|
||||
// ITANIUM: define available_externally void @foo({{[^!]*$}}
|
||||
// MS: define linkonce_odr void @foo({{.*}} !type [[TNOPROTO]] !type [[TNOPROTO_GENERALIZED:![0-9]+]] !type [[TNOPROTO_ID]]
|
||||
// MS: define linkonce_odr dso_local void @foo({{.*}} !type [[TNOPROTO]] !type [[TNOPROTO_GENERALIZED:![0-9]+]] !type [[TNOPROTO_ID]]
|
||||
inline void foo() {}
|
||||
void bar() { foo(); }
|
||||
|
||||
|
|
|
@ -3,20 +3,20 @@
|
|||
|
||||
// Tests that we assign appropriate identifiers to unprototyped functions.
|
||||
|
||||
// CHECK: define void @f({{.*}} !type [[TVOID:![0-9]+]] !type [[TVOID_GENERALIZED:![0-9]+]]
|
||||
// CHECK: define {{(dso_local )?}}void @f({{.*}} !type [[TVOID:![0-9]+]] !type [[TVOID_GENERALIZED:![0-9]+]]
|
||||
void f() {
|
||||
}
|
||||
|
||||
void xf();
|
||||
|
||||
// CHECK: define void @g({{.*}} !type [[TINT:![0-9]+]] !type [[TINT_GENERALIZED:![0-9]+]]
|
||||
// CHECK: define {{(dso_local )?}}void @g({{.*}} !type [[TINT:![0-9]+]] !type [[TINT_GENERALIZED:![0-9]+]]
|
||||
void g(int b) {
|
||||
void (*fp)() = b ? f : xf;
|
||||
// ITANIUM: call i1 @llvm.type.test(i8* {{.*}}, metadata !"_ZTSFvE")
|
||||
fp();
|
||||
}
|
||||
|
||||
// CHECK: declare !type [[TVOID]] !type [[TVOID_GENERALIZED]] void @xf({{.*}}
|
||||
// CHECK: declare !type [[TVOID]] !type [[TVOID_GENERALIZED]] {{(dso_local )?}}void @xf({{.*}}
|
||||
|
||||
// ITANIUM-DAG: [[TVOID]] = !{i64 0, !"_ZTSFvE"}
|
||||
// ITANIUM-DAG: [[TVOID_GENERALIZED]] = !{i64 0, !"_ZTSFvE.generalized"}
|
||||
|
|
|
@ -32,7 +32,7 @@ typedef struct __CFString *CFStringRef;
|
|||
const CFStringRef string = (CFStringRef)__builtin___CFStringMakeConstantString("string");
|
||||
|
||||
// CHECK-CF-IN-CF-DECL: @__CFConstantStringClassReference = external dllexport global [0 x i32]
|
||||
// CHECK-CF-IN-CF-DEFN: @__CFConstantStringClassReference = common dllexport global [32 x i32]
|
||||
// CHECK-CF-IN-CF-DEFN: @__CFConstantStringClassReference = common dso_local dllexport global [32 x i32]
|
||||
// CHECK-CF: @__CFConstantStringClassReference = external dllimport global [0 x i32]
|
||||
// CHECK-CF-EXTERN: @__CFConstantStringClassReference = external dllimport global [0 x i32]
|
||||
// CHECK-CF-EXTERN-DLLIMPORT: @__CFConstantStringClassReference = external dllimport global [0 x i32]
|
||||
|
|
|
@ -14,24 +14,24 @@
|
|||
__declspec(dllexport) extern int ExternGlobalDecl;
|
||||
|
||||
// dllexport implies a definition.
|
||||
// CHECK-DAG: @GlobalDef = common dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @GlobalDef = common dso_local dllexport global i32 0, align 4
|
||||
__declspec(dllexport) int GlobalDef;
|
||||
|
||||
// Export definition.
|
||||
// CHECK-DAG: @GlobalInit = dllexport global i32 1, align 4
|
||||
// CHECK-DAG: @GlobalInit = dso_local dllexport global i32 1, align 4
|
||||
__declspec(dllexport) int GlobalInit = 1;
|
||||
|
||||
// Declare, then export definition.
|
||||
// CHECK-DAG: @GlobalDeclInit = dllexport global i32 1, align 4
|
||||
// CHECK-DAG: @GlobalDeclInit = dso_local dllexport global i32 1, align 4
|
||||
__declspec(dllexport) extern int GlobalDeclInit;
|
||||
int GlobalDeclInit = 1;
|
||||
|
||||
// Redeclarations
|
||||
// CHECK-DAG: @GlobalRedecl1 = common dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @GlobalRedecl1 = common dso_local dllexport global i32 0, align 4
|
||||
__declspec(dllexport) extern int GlobalRedecl1;
|
||||
__declspec(dllexport) int GlobalRedecl1;
|
||||
|
||||
// CHECK-DAG: @GlobalRedecl2 = common dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @GlobalRedecl2 = common dso_local dllexport global i32 0, align 4
|
||||
__declspec(dllexport) extern int GlobalRedecl2;
|
||||
int GlobalRedecl2;
|
||||
|
||||
|
@ -44,22 +44,22 @@ __declspec(dllexport) extern int GlobalRedecl2;
|
|||
// Declarations are not exported.
|
||||
|
||||
// Export function definition.
|
||||
// CHECK-DAG: define dllexport void @def()
|
||||
// CHECK-DAG: define dso_local dllexport void @def()
|
||||
__declspec(dllexport) void def(void) {}
|
||||
|
||||
// Export inline function.
|
||||
// CHECK-DAG: define weak_odr dllexport void @inlineFunc()
|
||||
// CHECK-DAG: define weak_odr dllexport void @externInlineFunc()
|
||||
// CHECK-DAG: define weak_odr dso_local dllexport void @inlineFunc()
|
||||
// CHECK-DAG: define weak_odr dso_local dllexport void @externInlineFunc()
|
||||
__declspec(dllexport) inline void inlineFunc(void) {}
|
||||
__declspec(dllexport) inline void externInlineFunc(void) {}
|
||||
extern void externInlineFunc(void);
|
||||
|
||||
// Redeclarations
|
||||
// CHECK-DAG: define dllexport void @redecl1()
|
||||
// CHECK-DAG: define dso_local dllexport void @redecl1()
|
||||
__declspec(dllexport) void redecl1(void);
|
||||
__declspec(dllexport) void redecl1(void) {}
|
||||
|
||||
// CHECK-DAG: define dllexport void @redecl2()
|
||||
// CHECK-DAG: define dso_local dllexport void @redecl2()
|
||||
__declspec(dllexport) void redecl2(void);
|
||||
void redecl2(void) {}
|
||||
|
||||
|
@ -70,46 +70,46 @@ __declspec(dllexport) void redecl2(void);
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// dllexport takes precedence over the dllimport if both are specified.
|
||||
// CHECK-DAG: @PrecedenceGlobal1A = common dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal1B = common dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal1A = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal1B = common dso_local dllexport global i32 0, align 4
|
||||
__attribute__((dllimport, dllexport)) int PrecedenceGlobal1A;
|
||||
__declspec(dllimport) __declspec(dllexport) int PrecedenceGlobal1B;
|
||||
|
||||
// CHECK-DAG: @PrecedenceGlobal2A = common dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal2B = common dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal2A = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal2B = common dso_local dllexport global i32 0, align 4
|
||||
__attribute__((dllexport, dllimport)) int PrecedenceGlobal2A;
|
||||
__declspec(dllexport) __declspec(dllimport) int PrecedenceGlobal2B;
|
||||
|
||||
// CHECK-DAG: @PrecedenceGlobalRedecl1 = dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobalRedecl1 = dso_local dllexport global i32 0, align 4
|
||||
__declspec(dllexport) extern int PrecedenceGlobalRedecl1;
|
||||
__declspec(dllimport) int PrecedenceGlobalRedecl1 = 0;
|
||||
|
||||
// CHECK-DAG: @PrecedenceGlobalRedecl2 = common dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobalRedecl2 = common dso_local dllexport global i32 0, align 4
|
||||
__declspec(dllimport) extern int PrecedenceGlobalRedecl2;
|
||||
__declspec(dllexport) int PrecedenceGlobalRedecl2;
|
||||
|
||||
// CHECK-DAG: @PrecedenceGlobalMixed1 = dllexport global i32 1, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobalMixed1 = dso_local dllexport global i32 1, align 4
|
||||
__attribute__((dllexport)) extern int PrecedenceGlobalMixed1;
|
||||
__declspec(dllimport) int PrecedenceGlobalMixed1 = 1;
|
||||
|
||||
// CHECK-DAG: @PrecedenceGlobalMixed2 = common dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobalMixed2 = common dso_local dllexport global i32 0, align 4
|
||||
__attribute__((dllimport)) extern int PrecedenceGlobalMixed2;
|
||||
__declspec(dllexport) int PrecedenceGlobalMixed2;
|
||||
|
||||
// CHECK-DAG: define dllexport void @precedence1A()
|
||||
// CHECK-DAG: define dllexport void @precedence1B()
|
||||
// CHECK-DAG: define dso_local dllexport void @precedence1A()
|
||||
// CHECK-DAG: define dso_local dllexport void @precedence1B()
|
||||
void __attribute__((dllimport, dllexport)) precedence1A(void) {}
|
||||
void __declspec(dllimport) __declspec(dllexport) precedence1B(void) {}
|
||||
|
||||
// CHECK-DAG: define dllexport void @precedence2A()
|
||||
// CHECK-DAG: define dllexport void @precedence2B()
|
||||
// CHECK-DAG: define dso_local dllexport void @precedence2A()
|
||||
// CHECK-DAG: define dso_local dllexport void @precedence2B()
|
||||
void __attribute__((dllexport, dllimport)) precedence2A(void) {}
|
||||
void __declspec(dllexport) __declspec(dllimport) precedence2B(void) {}
|
||||
|
||||
// CHECK-DAG: define dllexport void @precedenceRedecl1()
|
||||
// CHECK-DAG: define dso_local dllexport void @precedenceRedecl1()
|
||||
void __declspec(dllimport) precedenceRedecl1(void);
|
||||
void __declspec(dllexport) precedenceRedecl1(void) {}
|
||||
|
||||
// CHECK-DAG: define dllexport void @precedenceRedecl2()
|
||||
// CHECK-DAG: define dso_local dllexport void @precedenceRedecl2()
|
||||
void __declspec(dllexport) precedenceRedecl2(void);
|
||||
void __declspec(dllimport) precedenceRedecl2(void) {}
|
||||
|
|
|
@ -39,14 +39,14 @@ USEVAR(GlobalRedecl2)
|
|||
|
||||
// NB: MSVC issues a warning and makes GlobalRedecl3 dllexport. We follow GCC
|
||||
// and drop the dllimport with a warning.
|
||||
// CHECK: @GlobalRedecl3 = external global i32
|
||||
// CHECK: @GlobalRedecl3 = external dso_local global i32
|
||||
__declspec(dllimport) extern int GlobalRedecl3;
|
||||
extern int GlobalRedecl3; // dllimport ignored
|
||||
USEVAR(GlobalRedecl3)
|
||||
|
||||
// Make sure this works even if the decl has been used before it's defined (PR20792).
|
||||
// MS: @GlobalRedecl4 = common dllexport global i32
|
||||
// GNU: @GlobalRedecl4 = common global i32
|
||||
// MS: @GlobalRedecl4 = common dso_local dllexport global i32
|
||||
// GNU: @GlobalRedecl4 = common dso_local global i32
|
||||
__declspec(dllimport) extern int GlobalRedecl4;
|
||||
USEVAR(GlobalRedecl4)
|
||||
int GlobalRedecl4; // dllimport ignored
|
||||
|
@ -76,22 +76,22 @@ int functionScope() {
|
|||
__declspec(dllimport) void decl(void);
|
||||
|
||||
// Initialize use_decl with the address of the thunk.
|
||||
// CHECK-DAG: @use_decl = global void ()* @decl
|
||||
// CHECK-DAG: @use_decl = dso_local global void ()* @decl
|
||||
void (*use_decl)(void) = &decl;
|
||||
|
||||
// Import inline function.
|
||||
// MS-DAG: declare dllimport void @inlineFunc()
|
||||
// MO1-DAG: define available_externally dllimport void @inlineFunc()
|
||||
// GNU-DAG: declare void @inlineFunc()
|
||||
// GO1-DAG: define available_externally void @inlineFunc()
|
||||
// GNU-DAG: declare dso_local void @inlineFunc()
|
||||
// GO1-DAG: define available_externally dso_local void @inlineFunc()
|
||||
__declspec(dllimport) inline void inlineFunc(void) {}
|
||||
USE(inlineFunc)
|
||||
|
||||
// inline attributes
|
||||
// MS-DAG: declare dllimport void @noinline()
|
||||
// MO1-DAG: define available_externally dllimport void @noinline()
|
||||
// GNU-DAG: declare void @noinline()
|
||||
// GO1-DAG: define available_externally void @noinline()
|
||||
// GNU-DAG: declare dso_local void @noinline()
|
||||
// GO1-DAG: define available_externally dso_local void @noinline()
|
||||
// CHECK-NOT: @alwaysInline()
|
||||
// O1-NOT: @alwaysInline()
|
||||
__declspec(dllimport) __attribute__((noinline)) inline void noinline(void) {}
|
||||
|
@ -107,20 +107,20 @@ USE(redecl1)
|
|||
|
||||
// NB: MSVC issues a warning and makes redecl2/redecl3 dllexport. We follow GCC
|
||||
// and drop the dllimport with a warning.
|
||||
// CHECK-DAG: declare void @redecl2()
|
||||
// CHECK-DAG: declare dso_local void @redecl2()
|
||||
__declspec(dllimport) void redecl2(void);
|
||||
void redecl2(void);
|
||||
USE(redecl2)
|
||||
|
||||
// MS: define dllexport void @redecl3()
|
||||
// GNU: define void @redecl3()
|
||||
// MS: define dso_local dllexport void @redecl3()
|
||||
// GNU: define dso_local void @redecl3()
|
||||
__declspec(dllimport) void redecl3(void);
|
||||
void redecl3(void) {} // dllimport ignored
|
||||
USE(redecl3)
|
||||
|
||||
// Make sure this works even if the decl is used before it's defined (PR20792).
|
||||
// MS: define dllexport void @redecl4()
|
||||
// GNU: define void @redecl4()
|
||||
// MS: define dso_local dllexport void @redecl4()
|
||||
// GNU: define dso_local void @redecl4()
|
||||
__declspec(dllimport) void redecl4(void);
|
||||
USE(redecl4)
|
||||
void redecl4(void) {} // dllimport ignored
|
||||
|
|
|
@ -1,3 +1,14 @@
|
|||
// RUN: %clang_cc1 -triple x86_64-pc-win32 -emit-llvm %s -o - | FileCheck --check-prefix=COFF %s
|
||||
// COFF-DAG: @bar = external dso_local global i32
|
||||
// COFF-DAG: @weak_bar = extern_weak dso_local global i32
|
||||
// COFF-DAG: declare dso_local void @foo()
|
||||
// COFF-DAG: @baz = dso_local global i32 42
|
||||
// COFF-DAG: define dso_local i32* @zed()
|
||||
// COFF-DAG: @thread_var = external dso_local thread_local global i32
|
||||
// COFF-DAG: @local_thread_var = dso_local thread_local global i32 42
|
||||
// COFF-DAG: @import_var = external dllimport global i32
|
||||
// COFF-DAG: declare dllimport void @import_func()
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -mrelocation-model static %s -o - | FileCheck --check-prefix=STATIC %s
|
||||
// STATIC-DAG: @bar = external dso_local global i32
|
||||
// STATIC-DAG: @weak_bar = extern_weak dso_local global i32
|
||||
|
@ -6,6 +17,8 @@
|
|||
// STATIC-DAG: define dso_local i32* @zed()
|
||||
// STATIC-DAG: @thread_var = external thread_local global i32
|
||||
// STATIC-DAG: @local_thread_var = dso_local thread_local global i32 42
|
||||
// STATIC-DAG: @import_var = external dso_local global i32
|
||||
// STATIC-DAG: declare dso_local void @import_func()
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie -mpie-copy-relocations %s -o - | FileCheck --check-prefix=PIE-COPY %s
|
||||
// PIE-COPY-DAG: @bar = external dso_local global i32
|
||||
|
@ -15,6 +28,8 @@
|
|||
// PIE-COPY-DAG: define dso_local i32* @zed()
|
||||
// PIE-COPY-DAG: @thread_var = external thread_local global i32
|
||||
// PIE-COPY-DAG: @local_thread_var = dso_local thread_local global i32 42
|
||||
// PIE-COPY-DAG: @import_var = external dso_local global i32
|
||||
// PIE-COPY-DAG: declare void @import_func()
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie %s -o - | FileCheck --check-prefix=PIE %s
|
||||
// PIE-DAG: @bar = external global i32
|
||||
|
@ -24,6 +39,8 @@
|
|||
// PIE-DAG: define dso_local i32* @zed()
|
||||
// PIE-DAG: @thread_var = external thread_local global i32
|
||||
// PIE-DAG: @local_thread_var = dso_local thread_local global i32 42
|
||||
// PIE-DAG: @import_var = external global i32
|
||||
// PIE-DAG: declare void @import_func()
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -mrelocation-model static -fno-plt %s -o - | FileCheck --check-prefix=NOPLT %s
|
||||
// NOPLT-DAG: @bar = external dso_local global i32
|
||||
|
@ -33,6 +50,8 @@
|
|||
// NOPLT-DAG: define dso_local i32* @zed()
|
||||
// NOPLT-DAG: @thread_var = external thread_local global i32
|
||||
// NOPLT-DAG: @local_thread_var = dso_local thread_local global i32 42
|
||||
// NOPLT-DAG: @import_var = external dso_local global i32
|
||||
// NOPLT-DAG: declare void @import_func()
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -fno-plt -pic-is-pie -mpie-copy-relocations %s -o - | FileCheck --check-prefix=PIE-COPY-NOPLT %s
|
||||
// PIE-COPY-NOPLT-DAG: @bar = external dso_local global i32
|
||||
|
@ -42,6 +61,8 @@
|
|||
// PIE-COPY-NOPLT-DAG: define dso_local i32* @zed()
|
||||
// PIE-COPY-NOPLT-DAG: @thread_var = external thread_local global i32
|
||||
// PIE-COPY-NOPLT-DAG: @local_thread_var = dso_local thread_local global i32 42
|
||||
// PIE-COPY-NOPLT-DAG: @import_var = external dso_local global i32
|
||||
// PIE-COPY-NOPLT-DAG: declare void @import_func()
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm -pic-is-pie -fno-plt %s -o - | FileCheck --check-prefix=PIE-NO-PLT %s
|
||||
// RUN: %clang_cc1 -triple powerpc64le-pc-linux -emit-llvm -mrelocation-model static %s -o - | FileCheck --check-prefix=PIE-NO-PLT %s
|
||||
|
@ -52,6 +73,8 @@
|
|||
// PIE-NO-PLT-DAG: define dso_local i32* @zed()
|
||||
// PIE-NO-PLT-DAG: @thread_var = external thread_local global i32
|
||||
// PIE-NO-PLT-DAG: @local_thread_var = dso_local thread_local global i32 42
|
||||
// PIE-NO-PLT-DAG: @import_var = external global i32
|
||||
// PIE-NO-PLT-DAG: declare void @import_func()
|
||||
|
||||
// RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm %s -o - | FileCheck --check-prefix=SHARED %s
|
||||
// SHARED-DAG: @bar = external global i32
|
||||
|
@ -61,6 +84,16 @@
|
|||
// SHARED-DAG: define i32* @zed()
|
||||
// SHARED-DAG: @thread_var = external thread_local global i32
|
||||
// SHARED-DAG: @local_thread_var = thread_local global i32 42
|
||||
// PIE-NO-PLT-DAG: @import_var = external global i32
|
||||
// PIE-NO-PLT-DAG: declare void @import_func()
|
||||
|
||||
__attribute__((dllimport)) extern int import_var;
|
||||
__attribute__((dllimport)) void import_func(void);
|
||||
|
||||
int *use_import() {
|
||||
import_func();
|
||||
return &import_var;
|
||||
}
|
||||
|
||||
extern int bar;
|
||||
__attribute__((weak)) extern int weak_bar;
|
||||
|
|
|
@ -13,7 +13,7 @@ void basic_finally(void) {
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @basic_finally()
|
||||
// CHECK-LABEL: define dso_local void @basic_finally()
|
||||
// CHECK: invoke void @might_crash()
|
||||
// CHECK: to label %[[invoke_cont:[^ ]*]] unwind label %[[lpad:[^ ]*]]
|
||||
//
|
||||
|
@ -53,7 +53,7 @@ l:
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @label_in_finally()
|
||||
// CHECK-LABEL: define dso_local void @label_in_finally()
|
||||
// CHECK: invoke void @might_crash()
|
||||
// CHECK: to label %[[invoke_cont:[^ ]*]] unwind label %[[lpad:[^ ]*]]
|
||||
//
|
||||
|
@ -81,7 +81,7 @@ void use_abnormal_termination(void) {
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @use_abnormal_termination()
|
||||
// CHECK-LABEL: define dso_local void @use_abnormal_termination()
|
||||
// CHECK: invoke void @might_crash()
|
||||
// CHECK: to label %[[invoke_cont:[^ ]*]] unwind label %[[lpad:[^ ]*]]
|
||||
//
|
||||
|
@ -110,7 +110,7 @@ void noreturn_noop_finally() {
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @noreturn_noop_finally()
|
||||
// CHECK-LABEL: define dso_local void @noreturn_noop_finally()
|
||||
// CHECK: call void @"\01?fin$0@0@noreturn_noop_finally@@"({{.*}})
|
||||
// CHECK: ret void
|
||||
|
||||
|
@ -127,7 +127,7 @@ void noreturn_finally() {
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @noreturn_finally()
|
||||
// CHECK-LABEL: define dso_local void @noreturn_finally()
|
||||
// CHECK: invoke void @might_crash()
|
||||
// CHECK: to label %[[cont:[^ ]*]] unwind label %[[lpad:[^ ]*]]
|
||||
//
|
||||
|
@ -151,7 +151,7 @@ int finally_with_return() {
|
|||
} __finally {
|
||||
}
|
||||
}
|
||||
// CHECK-LABEL: define i32 @finally_with_return()
|
||||
// CHECK-LABEL: define dso_local i32 @finally_with_return()
|
||||
// CHECK: call void @"\01?fin$0@0@finally_with_return@@"({{.*}})
|
||||
// CHECK-NEXT: ret i32 42
|
||||
|
||||
|
@ -173,7 +173,7 @@ int nested___finally___finally() {
|
|||
return 0;
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define i32 @nested___finally___finally
|
||||
// CHECK-LABEL: define dso_local i32 @nested___finally___finally
|
||||
// CHECK: invoke void @"\01?fin$1@0@nested___finally___finally@@"({{.*}})
|
||||
// CHECK: to label %[[outercont:[^ ]*]] unwind label %[[lpad:[^ ]*]]
|
||||
//
|
||||
|
@ -208,7 +208,7 @@ int nested___finally___finally_with_eh_edge() {
|
|||
}
|
||||
return 912;
|
||||
}
|
||||
// CHECK-LABEL: define i32 @nested___finally___finally_with_eh_edge
|
||||
// CHECK-LABEL: define dso_local i32 @nested___finally___finally_with_eh_edge
|
||||
// CHECK: invoke void @might_crash()
|
||||
// CHECK-NEXT: to label %[[invokecont:[^ ]*]] unwind label %[[lpad1:[^ ]*]]
|
||||
//
|
||||
|
@ -252,7 +252,7 @@ void finally_within_finally() {
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @finally_within_finally(
|
||||
// CHECK-LABEL: define dso_local void @finally_within_finally(
|
||||
// CHECK: invoke void @might_crash(
|
||||
|
||||
// CHECK: call void @"\01?fin$0@0@finally_within_finally@@"(
|
||||
|
|
|
@ -17,7 +17,7 @@ int __leave_with___except_simple() {
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
// CHECK-LABEL: define i32 @__leave_with___except_simple()
|
||||
// CHECK-LABEL: define dso_local i32 @__leave_with___except_simple()
|
||||
// CHECK: store i32 15, i32* %myres
|
||||
// CHECK-NEXT: br label %[[tryleave:[^ ]*]]
|
||||
// CHECK-NOT: store i32 23
|
||||
|
@ -37,7 +37,7 @@ int __leave_with___except() {
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
// CHECK-LABEL: define i32 @__leave_with___except()
|
||||
// CHECK-LABEL: define dso_local i32 @__leave_with___except()
|
||||
// CHECK: invoke void @g()
|
||||
// CHECK-NEXT: to label %[[cont:.*]] unwind label %{{.*}}
|
||||
// For __excepts, instead of an explicit __try.__leave label, we could use
|
||||
|
@ -69,7 +69,7 @@ int __leave_with___finally_simple() {
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
// CHECK-LABEL: define i32 @__leave_with___finally_simple()
|
||||
// CHECK-LABEL: define dso_local i32 @__leave_with___finally_simple()
|
||||
// CHECK: store i32 15, i32* %myres
|
||||
// CHECK-NEXT: br label %[[tryleave:[^ ]*]]
|
||||
// CHECK-NOT: store i32 23
|
||||
|
@ -89,7 +89,7 @@ int __leave_with___finally_noreturn() {
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
// CHECK-LABEL: define i32 @__leave_with___finally_noreturn()
|
||||
// CHECK-LABEL: define dso_local i32 @__leave_with___finally_noreturn()
|
||||
// CHECK: store i32 15, i32* %myres
|
||||
// CHECK-NEXT: br label %[[tryleave:[^ ]*]]
|
||||
// CHECK-NOT: store i32 23
|
||||
|
@ -109,7 +109,7 @@ int __leave_with___finally() {
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
// CHECK-LABEL: define i32 @__leave_with___finally()
|
||||
// CHECK-LABEL: define dso_local i32 @__leave_with___finally()
|
||||
// CHECK: invoke void @g()
|
||||
// CHECK-NEXT: to label %[[cont:.*]] unwind label %{{.*}}
|
||||
// For __finally, there needs to be an explicit __try.__leave, because
|
||||
|
@ -142,7 +142,7 @@ int nested___except___finally() {
|
|||
}
|
||||
return 1;
|
||||
}
|
||||
// CHECK-LABEL: define i32 @nested___except___finally()
|
||||
// CHECK-LABEL: define dso_local i32 @nested___except___finally()
|
||||
|
||||
// CHECK-LABEL: invoke void @g()
|
||||
// CHECK-NEXT: to label %[[g1_cont1:.*]] unwind label %[[g1_lpad:.*]]
|
||||
|
@ -194,7 +194,7 @@ int nested___except___except() {
|
|||
return 1;
|
||||
}
|
||||
// The order of basic blocks in the below doesn't matter.
|
||||
// CHECK-LABEL: define i32 @nested___except___except()
|
||||
// CHECK-LABEL: define dso_local i32 @nested___except___except()
|
||||
|
||||
// CHECK-LABEL: invoke void @g()
|
||||
// CHECK-NEXT: to label %[[g1_cont:.*]] unwind label %[[g1_lpad:.*]]
|
||||
|
@ -247,7 +247,7 @@ int nested___finally___except() {
|
|||
return 1;
|
||||
}
|
||||
// The order of basic blocks in the below doesn't matter.
|
||||
// CHECK-LABEL: define i32 @nested___finally___except()
|
||||
// CHECK-LABEL: define dso_local i32 @nested___finally___except()
|
||||
|
||||
// CHECK-LABEL: invoke void @g()
|
||||
// CHECK-NEXT: to label %[[g1_cont:.*]] unwind label %[[g1_lpad:.*]]
|
||||
|
@ -302,7 +302,7 @@ int nested___finally___finally() {
|
|||
return 1;
|
||||
}
|
||||
// The order of basic blocks in the below doesn't matter.
|
||||
// CHECK-LABEL: define i32 @nested___finally___finally()
|
||||
// CHECK-LABEL: define dso_local i32 @nested___finally___finally()
|
||||
|
||||
// CHECK: invoke void @g()
|
||||
// CHECK-NEXT: to label %[[g1_cont:.*]] unwind label %[[g1_lpad:.*]]
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
void try_body(int numerator, int denominator, int *myres) {
|
||||
*myres = numerator / denominator;
|
||||
}
|
||||
// CHECK-LABEL: define void @try_body(i32 %numerator, i32 %denominator, i32* %myres)
|
||||
// CHECK-LABEL: define dso_local void @try_body(i32 %numerator, i32 %denominator, i32* %myres)
|
||||
// CHECK: sdiv i32
|
||||
// CHECK: store i32 %{{.*}}, i32*
|
||||
// CHECK: ret void
|
||||
|
@ -27,7 +27,7 @@ int safe_div(int numerator, int denominator, int *res) {
|
|||
return success;
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define i32 @safe_div(i32 %numerator, i32 %denominator, i32* %res)
|
||||
// CHECK-LABEL: define dso_local i32 @safe_div(i32 %numerator, i32 %denominator, i32* %res)
|
||||
// X64-SAME: personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*)
|
||||
// X86-SAME: personality i8* bitcast (i32 (...)* @_except_handler3 to i8*)
|
||||
// CHECK: invoke void @try_body(i32 %{{.*}}, i32 %{{.*}}, i32* %{{.*}}) #[[NOINLINE:[0-9]+]]
|
||||
|
@ -57,9 +57,9 @@ int safe_div(int numerator, int denominator, int *res) {
|
|||
// X86: ret i32 1
|
||||
|
||||
// Mingw uses msvcrt, so it can also use _except_handler3.
|
||||
// X86-GNU-LABEL: define i32 @safe_div(i32 %numerator, i32 %denominator, i32* %res)
|
||||
// X86-GNU-LABEL: define dso_local i32 @safe_div(i32 %numerator, i32 %denominator, i32* %res)
|
||||
// X86-GNU-SAME: personality i8* bitcast (i32 (...)* @_except_handler3 to i8*)
|
||||
// X64-GNU-LABEL: define i32 @safe_div(i32 %numerator, i32 %denominator, i32* %res)
|
||||
// X64-GNU-LABEL: define dso_local i32 @safe_div(i32 %numerator, i32 %denominator, i32* %res)
|
||||
// X64-GNU-SAME: personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*)
|
||||
|
||||
void j(void);
|
||||
|
@ -74,7 +74,7 @@ int filter_expr_capture(void) {
|
|||
return r;
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define i32 @filter_expr_capture()
|
||||
// CHECK-LABEL: define dso_local i32 @filter_expr_capture()
|
||||
// X64-SAME: personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*)
|
||||
// X86-SAME: personality i8* bitcast (i32 (...)* @_except_handler3 to i8*)
|
||||
// X64: call void (...) @llvm.localescape(i32* %[[r:[^ ,]*]])
|
||||
|
@ -114,7 +114,7 @@ int nested_try(void) {
|
|||
}
|
||||
return r;
|
||||
}
|
||||
// CHECK-LABEL: define i32 @nested_try()
|
||||
// CHECK-LABEL: define dso_local i32 @nested_try()
|
||||
// X64-SAME: personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*)
|
||||
// X86-SAME: personality i8* bitcast (i32 (...)* @_except_handler3 to i8*)
|
||||
// CHECK: store i32 42, i32* %[[r:[^ ,]*]]
|
||||
|
@ -174,7 +174,7 @@ int basic_finally(int g) {
|
|||
}
|
||||
return g;
|
||||
}
|
||||
// CHECK-LABEL: define i32 @basic_finally(i32 %g)
|
||||
// CHECK-LABEL: define dso_local i32 @basic_finally(i32 %g)
|
||||
// X64-SAME: personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*)
|
||||
// X86-SAME: personality i8* bitcast (i32 (...)* @_except_handler3 to i8*)
|
||||
// CHECK: %[[g_addr:[^ ]*]] = alloca i32, align 4
|
||||
|
@ -211,7 +211,7 @@ int except_return(void) {
|
|||
return 42;
|
||||
}
|
||||
}
|
||||
// CHECK-LABEL: define i32 @except_return()
|
||||
// CHECK-LABEL: define dso_local i32 @except_return()
|
||||
// CHECK: %[[tmp:[^ ]*]] = invoke i32 @returns_int()
|
||||
// CHECK: to label %[[cont:[^ ]*]] unwind label %[[catchpad:[^ ]*]]
|
||||
//
|
||||
|
@ -240,7 +240,7 @@ void finally_capture_twice(int x) {
|
|||
}
|
||||
}
|
||||
//
|
||||
// CHECK-LABEL: define void @finally_capture_twice(
|
||||
// CHECK-LABEL: define dso_local void @finally_capture_twice(
|
||||
// CHECK: [[X:%.*]] = alloca i32, align 4
|
||||
// CHECK: call void (...) @llvm.localescape(i32* [[X]])
|
||||
// CHECK-NEXT: store i32 {{.*}}, i32* [[X]], align 4
|
||||
|
@ -267,7 +267,7 @@ int exception_code_in_except(void) {
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define i32 @exception_code_in_except()
|
||||
// CHECK-LABEL: define dso_local i32 @exception_code_in_except()
|
||||
// CHECK: %[[ret_slot:[^ ]*]] = alloca i32
|
||||
// CHECK: %[[code_slot:[^ ]*]] = alloca i32
|
||||
// CHECK: invoke void @try_body(i32 0, i32 0, i32* null)
|
||||
|
|
|
@ -61,13 +61,13 @@
|
|||
// RUN: %clang_cc1 %s -triple i386-pc-win32 -O1 -disable-llvm-passes -emit-llvm -o - -std=c99 | FileCheck %s --check-prefix=CHECK4
|
||||
// RUN: %clang_cc1 %s -triple i386-pc-win32 -fexperimental-new-pass-manager -O1 -disable-llvm-passes -emit-llvm -o - -std=c99 | FileCheck %s --check-prefix=CHECK4
|
||||
// CHECK4-NOT: define weak_odr void @_Exit(
|
||||
// CHECK4-LABEL: define weak_odr i32 @ei()
|
||||
// CHECK4-LABEL: define i32 @bar()
|
||||
// CHECK4-LABEL: define weak_odr dso_local i32 @ei()
|
||||
// CHECK4-LABEL: define dso_local i32 @bar()
|
||||
// CHECK4-NOT: unreferenced1
|
||||
// CHECK4-LABEL: define weak_odr void @unreferenced2()
|
||||
// CHECK4-LABEL: define void @gnu_inline()
|
||||
// CHECK4-LABEL: define linkonce_odr i32 @foo()
|
||||
// CHECK4-LABEL: define available_externally void @gnu_ei_inline()
|
||||
// CHECK4-LABEL: define weak_odr dso_local void @unreferenced2()
|
||||
// CHECK4-LABEL: define dso_local void @gnu_inline()
|
||||
// CHECK4-LABEL: define linkonce_odr dso_local i32 @foo()
|
||||
// CHECK4-LABEL: define available_externally dso_local void @gnu_ei_inline()
|
||||
|
||||
__attribute__((noreturn)) void __cdecl _exit(int _Code);
|
||||
__inline void __cdecl _Exit(int status) { _exit(status); }
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-pc-win32 | FileCheck %s
|
||||
|
||||
// CHECK: define void @"\01?f@@$$J0YAXP6AX@Z@Z"
|
||||
// CHECK: define dso_local void @"\01?f@@$$J0YAXP6AX@Z@Z"
|
||||
__attribute__((overloadable)) void f(void (*x)()) {}
|
||||
|
||||
// CHECK: define void @f
|
||||
// CHECK: define dso_local void @f
|
||||
void f(void (*x)(int)) {}
|
||||
|
||||
// CHECK: define void @g
|
||||
// CHECK: define dso_local void @g
|
||||
void g(void (*x)(int)) {}
|
||||
|
||||
// CHECK: define void @"\01?g@@$$J0YAXP6AX@Z@Z"
|
||||
// CHECK: define dso_local void @"\01?g@@$$J0YAXP6AX@Z@Z"
|
||||
__attribute__((overloadable)) void g(void (*x)()) {}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -mrtd %s -o - -triple=i386-mingw32 | FileCheck %s
|
||||
|
||||
void f1(void) {}
|
||||
// CHECK: define x86_stdcallcc void @"\01_f1@0"
|
||||
// CHECK: define dso_local x86_stdcallcc void @"\01_f1@0"
|
||||
|
||||
void __stdcall f2(void) {}
|
||||
// CHECK: define x86_stdcallcc void @"\01_f2@0"
|
||||
// CHECK: define dso_local x86_stdcallcc void @"\01_f2@0"
|
||||
|
||||
void __fastcall f3(void) {}
|
||||
// CHECK: define x86_fastcallcc void @"\01@f3@0"
|
||||
// CHECK: define dso_local x86_fastcallcc void @"\01@f3@0"
|
||||
|
|
|
@ -11,73 +11,73 @@
|
|||
// ELF64: target datalayout = "e-m:e-{{.*}}"
|
||||
|
||||
void __stdcall f1(void) {}
|
||||
// CHECK: define x86_stdcallcc void @"\01_f1@0"
|
||||
// X64: define void @f1(
|
||||
// CHECK: define dso_local x86_stdcallcc void @"\01_f1@0"
|
||||
// X64: define dso_local void @f1(
|
||||
// ELF32: define x86_stdcallcc void @"\01_f1@0"
|
||||
// ELF64: define void @f1(
|
||||
|
||||
void __fastcall f2(void) {}
|
||||
// CHECK: define x86_fastcallcc void @"\01@f2@0"
|
||||
// X64: define void @f2(
|
||||
// CHECK: define dso_local x86_fastcallcc void @"\01@f2@0"
|
||||
// X64: define dso_local void @f2(
|
||||
// ELF32: define x86_fastcallcc void @"\01@f2@0"
|
||||
// ELF64: define void @f2(
|
||||
|
||||
void __stdcall f3() {}
|
||||
// CHECK: define x86_stdcallcc void @"\01_f3@0"
|
||||
// X64: define void @f3(
|
||||
// CHECK: define dso_local x86_stdcallcc void @"\01_f3@0"
|
||||
// X64: define dso_local void @f3(
|
||||
|
||||
void __fastcall f4(char a) {}
|
||||
// CHECK: define x86_fastcallcc void @"\01@f4@4"
|
||||
// X64: define void @f4(
|
||||
// CHECK: define dso_local x86_fastcallcc void @"\01@f4@4"
|
||||
// X64: define dso_local void @f4(
|
||||
|
||||
void __fastcall f5(short a) {}
|
||||
// CHECK: define x86_fastcallcc void @"\01@f5@4"
|
||||
// X64: define void @f5(
|
||||
// CHECK: define dso_local x86_fastcallcc void @"\01@f5@4"
|
||||
// X64: define dso_local void @f5(
|
||||
|
||||
void __fastcall f6(int a) {}
|
||||
// CHECK: define x86_fastcallcc void @"\01@f6@4"
|
||||
// X64: define void @f6(
|
||||
// CHECK: define dso_local x86_fastcallcc void @"\01@f6@4"
|
||||
// X64: define dso_local void @f6(
|
||||
|
||||
void __fastcall f7(long a) {}
|
||||
// CHECK: define x86_fastcallcc void @"\01@f7@4"
|
||||
// X64: define void @f7(
|
||||
// CHECK: define dso_local x86_fastcallcc void @"\01@f7@4"
|
||||
// X64: define dso_local void @f7(
|
||||
|
||||
void __fastcall f8(long long a) {}
|
||||
// CHECK: define x86_fastcallcc void @"\01@f8@8"
|
||||
// X64: define void @f8(
|
||||
// CHECK: define dso_local x86_fastcallcc void @"\01@f8@8"
|
||||
// X64: define dso_local void @f8(
|
||||
|
||||
void __fastcall f9(long long a, char b, char c, short d) {}
|
||||
// CHECK: define x86_fastcallcc void @"\01@f9@20"(i64 %a, i8 signext %b, i8 signext %c, i16 signext %d)
|
||||
// X64: define void @f9(
|
||||
// CHECK: define dso_local x86_fastcallcc void @"\01@f9@20"(i64 %a, i8 signext %b, i8 signext %c, i16 signext %d)
|
||||
// X64: define dso_local void @f9(
|
||||
|
||||
void f12(void) {}
|
||||
// CHECK: define void @f12(
|
||||
// X64: define void @f12(
|
||||
// CHECK: define dso_local void @f12(
|
||||
// X64: define dso_local void @f12(
|
||||
|
||||
void __vectorcall v1(void) {}
|
||||
// CHECK: define x86_vectorcallcc void @"\01v1@@0"(
|
||||
// X64: define x86_vectorcallcc void @"\01v1@@0"(
|
||||
// CHECK: define dso_local x86_vectorcallcc void @"\01v1@@0"(
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01v1@@0"(
|
||||
// ELF32: define x86_vectorcallcc void @"\01v1@@0"(
|
||||
// ELF64: define x86_vectorcallcc void @"\01v1@@0"(
|
||||
|
||||
void __vectorcall v2(char a) {}
|
||||
// CHECK: define x86_vectorcallcc void @"\01v2@@4"(
|
||||
// X64: define x86_vectorcallcc void @"\01v2@@8"(
|
||||
// CHECK: define dso_local x86_vectorcallcc void @"\01v2@@4"(
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01v2@@8"(
|
||||
// ELF32: define x86_vectorcallcc void @"\01v2@@4"(
|
||||
// ELF64: define x86_vectorcallcc void @"\01v2@@8"(
|
||||
|
||||
void __vectorcall v3(short a) {}
|
||||
// CHECK: define x86_vectorcallcc void @"\01v3@@4"(
|
||||
// X64: define x86_vectorcallcc void @"\01v3@@8"(
|
||||
// CHECK: define dso_local x86_vectorcallcc void @"\01v3@@4"(
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01v3@@8"(
|
||||
|
||||
void __vectorcall v4(int a) {}
|
||||
// CHECK: define x86_vectorcallcc void @"\01v4@@4"(
|
||||
// X64: define x86_vectorcallcc void @"\01v4@@8"(
|
||||
// CHECK: define dso_local x86_vectorcallcc void @"\01v4@@4"(
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01v4@@8"(
|
||||
|
||||
void __vectorcall v5(long long a) {}
|
||||
// CHECK: define x86_vectorcallcc void @"\01v5@@8"(
|
||||
// X64: define x86_vectorcallcc void @"\01v5@@8"(
|
||||
// CHECK: define dso_local x86_vectorcallcc void @"\01v5@@8"(
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01v5@@8"(
|
||||
|
||||
void __vectorcall v6(char a, char b) {}
|
||||
// CHECK: define x86_vectorcallcc void @"\01v6@@8"(
|
||||
// X64: define x86_vectorcallcc void @"\01v6@@16"(
|
||||
// CHECK: define dso_local x86_vectorcallcc void @"\01v6@@8"(
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01v6@@16"(
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
void __fastcall f1(void);
|
||||
void __stdcall f2(void);
|
||||
void __fastcall f4(void) {
|
||||
// CHECK-LABEL: define void @f4()
|
||||
// CHECK-LABEL: define dso_local void @f4()
|
||||
f1();
|
||||
// CHECK: call void @f1()
|
||||
}
|
||||
void __stdcall f5(void) {
|
||||
// CHECK-LABEL: define void @f5()
|
||||
// CHECK-LABEL: define dso_local void @f5()
|
||||
f2();
|
||||
// CHECK: call void @f2()
|
||||
}
|
||||
|
|
|
@ -10,32 +10,32 @@ struct {
|
|||
long double ldb;
|
||||
} agggregate_LD = {};
|
||||
// GNU32: %struct.anon = type { i8, x86_fp80 }
|
||||
// GNU32: @agggregate_LD = global %struct.anon zeroinitializer, align 4
|
||||
// GNU32: @agggregate_LD = dso_local global %struct.anon zeroinitializer, align 4
|
||||
// GNU64: %struct.anon = type { i8, x86_fp80 }
|
||||
// GNU64: @agggregate_LD = global %struct.anon zeroinitializer, align 16
|
||||
// GNU64: @agggregate_LD = dso_local global %struct.anon zeroinitializer, align 16
|
||||
// MSC64: %struct.anon = type { i8, double }
|
||||
// MSC64: @agggregate_LD = global %struct.anon zeroinitializer, align 8
|
||||
// MSC64: @agggregate_LD = dso_local global %struct.anon zeroinitializer, align 8
|
||||
|
||||
long double dataLD = 1.0L;
|
||||
// GNU32: @dataLD = global x86_fp80 0xK3FFF8000000000000000, align 4
|
||||
// GNU64: @dataLD = global x86_fp80 0xK3FFF8000000000000000, align 16
|
||||
// MSC64: @dataLD = global double 1.000000e+00, align 8
|
||||
// GNU32: @dataLD = dso_local global x86_fp80 0xK3FFF8000000000000000, align 4
|
||||
// GNU64: @dataLD = dso_local global x86_fp80 0xK3FFF8000000000000000, align 16
|
||||
// MSC64: @dataLD = dso_local global double 1.000000e+00, align 8
|
||||
|
||||
long double _Complex dataLDC = {1.0L, 1.0L};
|
||||
// GNU32: @dataLDC = global { x86_fp80, x86_fp80 } { x86_fp80 0xK3FFF8000000000000000, x86_fp80 0xK3FFF8000000000000000 }, align 4
|
||||
// GNU64: @dataLDC = global { x86_fp80, x86_fp80 } { x86_fp80 0xK3FFF8000000000000000, x86_fp80 0xK3FFF8000000000000000 }, align 16
|
||||
// MSC64: @dataLDC = global { double, double } { double 1.000000e+00, double 1.000000e+00 }, align 8
|
||||
// GNU32: @dataLDC = dso_local global { x86_fp80, x86_fp80 } { x86_fp80 0xK3FFF8000000000000000, x86_fp80 0xK3FFF8000000000000000 }, align 4
|
||||
// GNU64: @dataLDC = dso_local global { x86_fp80, x86_fp80 } { x86_fp80 0xK3FFF8000000000000000, x86_fp80 0xK3FFF8000000000000000 }, align 16
|
||||
// MSC64: @dataLDC = dso_local global { double, double } { double 1.000000e+00, double 1.000000e+00 }, align 8
|
||||
|
||||
long double TestLD(long double x) {
|
||||
return x * x;
|
||||
}
|
||||
// GNU32: define x86_fp80 @TestLD(x86_fp80 %x)
|
||||
// GNU64: define void @TestLD(x86_fp80* noalias sret %agg.result, x86_fp80*)
|
||||
// MSC64: define double @TestLD(double %x)
|
||||
// GNU32: define dso_local x86_fp80 @TestLD(x86_fp80 %x)
|
||||
// GNU64: define dso_local void @TestLD(x86_fp80* noalias sret %agg.result, x86_fp80*)
|
||||
// MSC64: define dso_local double @TestLD(double %x)
|
||||
|
||||
long double _Complex TestLDC(long double _Complex x) {
|
||||
return x * x;
|
||||
}
|
||||
// GNU32: define void @TestLDC({ x86_fp80, x86_fp80 }* noalias sret %agg.result, { x86_fp80, x86_fp80 }* byval align 4 %x)
|
||||
// GNU64: define void @TestLDC({ x86_fp80, x86_fp80 }* noalias sret %agg.result, { x86_fp80, x86_fp80 }* %x)
|
||||
// MSC64: define void @TestLDC({ double, double }* noalias sret %agg.result, { double, double }* %x)
|
||||
// GNU32: define dso_local void @TestLDC({ x86_fp80, x86_fp80 }* noalias sret %agg.result, { x86_fp80, x86_fp80 }* byval align 4 %x)
|
||||
// GNU64: define dso_local void @TestLDC({ x86_fp80, x86_fp80 }* noalias sret %agg.result, { x86_fp80, x86_fp80 }* %x)
|
||||
// MSC64: define dso_local void @TestLDC({ double, double }* noalias sret %agg.result, { double, double }* %x)
|
||||
|
|
|
@ -1,25 +1,25 @@
|
|||
// RUN: %clang_cc1 -triple i386-pc-win32 -emit-llvm -fms-compatibility -o - < %s | FileCheck %s
|
||||
|
||||
char __declspec(align(8192)) x;
|
||||
// CHECK-DAG: @x = global i8 0, align 8192
|
||||
// CHECK-DAG: @x = dso_local global i8 0, align 8192
|
||||
|
||||
typedef char __declspec(align(8192)) T;
|
||||
T y;
|
||||
// CHECK-DAG: @y = global i8 0, align 8192
|
||||
// CHECK-DAG: @y = dso_local global i8 0, align 8192
|
||||
|
||||
T __declspec(align(8192)) z;
|
||||
// CHECK-DAG: @z = global i8 0, align 8192
|
||||
// CHECK-DAG: @z = dso_local global i8 0, align 8192
|
||||
|
||||
int __declspec(align(16)) redef;
|
||||
int __declspec(align(32)) redef = 8;
|
||||
// CHECK-DAG: @redef = global i32 8, align 32
|
||||
// CHECK-DAG: @redef = dso_local global i32 8, align 32
|
||||
|
||||
struct __declspec(align(64)) S {
|
||||
char fd;
|
||||
} s;
|
||||
// CHECK-DAG: @s = global %struct.S zeroinitializer, align 64
|
||||
// CHECK-DAG: @s = dso_local global %struct.S zeroinitializer, align 64
|
||||
|
||||
struct Wrap {
|
||||
struct S x;
|
||||
} w;
|
||||
// CHECK-DAG: @w = global %struct.Wrap zeroinitializer, align 64
|
||||
// CHECK-DAG: @w = dso_local global %struct.Wrap zeroinitializer, align 64
|
||||
|
|
|
@ -11,7 +11,7 @@ void test1(void) {
|
|||
__annotation(L"unicode: \u0ca0_\u0ca0");
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @test1()
|
||||
// CHECK-LABEL: define dso_local void @test1()
|
||||
// CHECK: call void @llvm.codeview.annotation(metadata ![[A1:[0-9]+]])
|
||||
// CHECK: call void @llvm.codeview.annotation(metadata ![[A2:[0-9]+]])
|
||||
// CHECK: call void @llvm.codeview.annotation(metadata ![[A3:[0-9]+]])
|
||||
|
|
|
@ -12,26 +12,26 @@ typedef __SIZE_TYPE__ size_t;
|
|||
#include <intrin.h>
|
||||
|
||||
void test_ReadWriteBarrier() { _ReadWriteBarrier(); }
|
||||
// CHECK-LABEL: define void @test_ReadWriteBarrier
|
||||
// CHECK-LABEL: define dso_local void @test_ReadWriteBarrier
|
||||
// CHECK: fence syncscope("singlethread") seq_cst
|
||||
// CHECK: ret void
|
||||
// CHECK: }
|
||||
|
||||
void test_ReadBarrier() { _ReadBarrier(); }
|
||||
// CHECK-LABEL: define void @test_ReadBarrier
|
||||
// CHECK-LABEL: define dso_local void @test_ReadBarrier
|
||||
// CHECK: fence syncscope("singlethread") seq_cst
|
||||
// CHECK: ret void
|
||||
// CHECK: }
|
||||
|
||||
void test_WriteBarrier() { _WriteBarrier(); }
|
||||
// CHECK-LABEL: define void @test_WriteBarrier
|
||||
// CHECK-LABEL: define dso_local void @test_WriteBarrier
|
||||
// CHECK: fence syncscope("singlethread") seq_cst
|
||||
// CHECK: ret void
|
||||
// CHECK: }
|
||||
|
||||
#if defined(__x86_64__)
|
||||
void test__faststorefence() { __faststorefence(); }
|
||||
// CHECK-X64-LABEL: define void @test__faststorefence
|
||||
// CHECK-X64-LABEL: define dso_local void @test__faststorefence
|
||||
// CHECK-X64: fence seq_cst
|
||||
// CHECK-X64: ret void
|
||||
// CHECK-X64: }
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
__declspec(selectany) int x1 = 1;
|
||||
const __declspec(selectany) int x2 = 2;
|
||||
// CHECK: @x1 = weak_odr global i32 1, comdat, align 4
|
||||
// CHECK: @x2 = weak_odr constant i32 2, comdat, align 4
|
||||
// CHECK: @x1 = weak_odr dso_local global i32 1, comdat, align 4
|
||||
// CHECK: @x2 = weak_odr dso_local constant i32 2, comdat, align 4
|
||||
|
||||
// selectany turns extern variable declarations into definitions.
|
||||
__declspec(selectany) int x3;
|
||||
extern __declspec(selectany) int x4;
|
||||
// CHECK: @x3 = weak_odr global i32 0, comdat, align 4
|
||||
// CHECK: @x4 = weak_odr global i32 0, comdat, align 4
|
||||
// CHECK: @x3 = weak_odr dso_local global i32 0, comdat, align 4
|
||||
// CHECK: @x4 = weak_odr dso_local global i32 0, comdat, align 4
|
||||
|
||||
struct __declspec(align(16)) S {
|
||||
char x;
|
||||
|
@ -19,14 +19,14 @@ union { struct S s; } u;
|
|||
// CHECK: @u = {{.*}}zeroinitializer, align 16
|
||||
|
||||
|
||||
// CHECK: define void @t3() [[NAKED:#[0-9]+]] {
|
||||
// CHECK: define dso_local void @t3() [[NAKED:#[0-9]+]] {
|
||||
__declspec(naked) void t3() {}
|
||||
|
||||
// CHECK: define void @t22() [[NUW:#[0-9]+]]
|
||||
// CHECK: define dso_local void @t22() [[NUW:#[0-9]+]]
|
||||
void __declspec(nothrow) t22();
|
||||
void t22() {}
|
||||
|
||||
// CHECK: define void @t2() [[NI:#[0-9]+]] {
|
||||
// CHECK: define dso_local void @t2() [[NI:#[0-9]+]] {
|
||||
__declspec(noinline) void t2() {}
|
||||
|
||||
// CHECK: call void @f20_t() [[NR:#[0-9]+]]
|
||||
|
|
|
@ -8,8 +8,8 @@ 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
|
||||
// CHECK: @"\01?x1@@3HA" = weak_odr dso_local global i32 0, comdat, align 4
|
||||
// CHECK: @x2 = weak_odr dso_local global i32 0, comdat, align 4
|
||||
// CHECK: @"\01?x3@@3HA" = weak_odr dso_local global i32 0, comdat, align 4
|
||||
// CHECK: @x4 = weak_odr dso_local global i32 0, comdat, align 4
|
||||
// CHECK: @"\01?x5@@3HA" = weak_odr dso_local global i32 0, comdat, align 4
|
||||
|
|
|
@ -21,7 +21,7 @@ void align_test() {
|
|||
// DARWIN-SAME: .align 8
|
||||
// DARWIN-SAME: "~{dirflag},~{fpsr},~{flags}"()
|
||||
|
||||
// WINDOWS-LABEL: define void @align_test()
|
||||
// WINDOWS-LABEL: define dso_local void @align_test()
|
||||
// WINDOWS: call void asm sideeffect inteldialect
|
||||
// WINDOWS-SAME: .align 8
|
||||
// WINDOWS-SAME: .align 16
|
||||
|
|
|
@ -21,7 +21,7 @@ void t2() {
|
|||
}
|
||||
|
||||
void ignore_fe_size() {
|
||||
// CHECK-LABEL: define void @ignore_fe_size()
|
||||
// CHECK-LABEL: define dso_local void @ignore_fe_size()
|
||||
char c;
|
||||
// CHECK: vaddps xmm1, xmm2, $1{1to4}
|
||||
__asm vaddps xmm1, xmm2, [c]{1to4}
|
||||
|
|
|
@ -55,7 +55,7 @@ void *test_ReturnAddress() {
|
|||
void *test_AddressOfReturnAddress() {
|
||||
return _AddressOfReturnAddress();
|
||||
}
|
||||
// CHECK-INTEL-LABEL: define i8* @test_AddressOfReturnAddress()
|
||||
// CHECK-INTEL-LABEL: define dso_local i8* @test_AddressOfReturnAddress()
|
||||
// CHECK-INTEL: = tail call i8* @llvm.addressofreturnaddress()
|
||||
// CHECK-INTEL: ret i8*
|
||||
#endif
|
||||
|
|
|
@ -13,11 +13,11 @@ jmp_buf jb;
|
|||
|
||||
int test_setjmp() {
|
||||
return _setjmp(jb);
|
||||
// I386-LABEL: define i32 @test_setjmp
|
||||
// I386-LABEL: define dso_local i32 @test_setjmp
|
||||
// I386: %[[call:.*]] = call i32 (i8*, i32, ...) @_setjmp3(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i32 0, i32 0), i32 0)
|
||||
// I386-NEXT: ret i32 %[[call]]
|
||||
|
||||
// X64-LABEL: define i32 @test_setjmp
|
||||
// X64-LABEL: define dso_local i32 @test_setjmp
|
||||
// X64: %[[addr:.*]] = call i8* @llvm.frameaddress(i32 0)
|
||||
// X64: %[[call:.*]] = call i32 @_setjmp(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i32 0, i32 0), i8* %[[addr]])
|
||||
// X64-NEXT: ret i32 %[[call]]
|
||||
|
@ -25,7 +25,7 @@ int test_setjmp() {
|
|||
|
||||
int test_setjmpex() {
|
||||
return _setjmpex(jb);
|
||||
// X64-LABEL: define i32 @test_setjmpex
|
||||
// X64-LABEL: define dso_local i32 @test_setjmpex
|
||||
// X64: %[[addr:.*]] = call i8* @llvm.frameaddress(i32 0)
|
||||
// X64: %[[call:.*]] = call i32 @_setjmpex(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @jb, i32 0, i32 0), i8* %[[addr]])
|
||||
// X64-NEXT: ret i32 %[[call]]
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
char test__readfsbyte(unsigned long Offset) {
|
||||
return __readfsbyte(Offset);
|
||||
}
|
||||
// CHECK-I386-LABEL: define signext i8 @test__readfsbyte(i32 %Offset)
|
||||
// CHECK-I386-LABEL: define dso_local signext i8 @test__readfsbyte(i32 %Offset)
|
||||
// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %Offset to i8 addrspace(257)*
|
||||
// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i8, i8 addrspace(257)* [[PTR]], align 1
|
||||
// CHECK-I386: ret i8 [[VALUE:%[0-9]+]]
|
||||
|
@ -17,7 +17,7 @@ char test__readfsbyte(unsigned long Offset) {
|
|||
short test__readfsword(unsigned long Offset) {
|
||||
return __readfsword(Offset);
|
||||
}
|
||||
// CHECK-I386-LABEL: define signext i16 @test__readfsword(i32 %Offset)
|
||||
// CHECK-I386-LABEL: define dso_local signext i16 @test__readfsword(i32 %Offset)
|
||||
// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %Offset to i16 addrspace(257)*
|
||||
// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i16, i16 addrspace(257)* [[PTR]], align 2
|
||||
// CHECK-I386: ret i16 [[VALUE:%[0-9]+]]
|
||||
|
@ -25,7 +25,7 @@ short test__readfsword(unsigned long Offset) {
|
|||
long test__readfsdword(unsigned long Offset) {
|
||||
return __readfsdword(Offset);
|
||||
}
|
||||
// CHECK-I386-LABEL: define i32 @test__readfsdword(i32 %Offset)
|
||||
// CHECK-I386-LABEL: define dso_local i32 @test__readfsdword(i32 %Offset)
|
||||
// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %Offset to i32 addrspace(257)*
|
||||
// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i32, i32 addrspace(257)* [[PTR]], align 4
|
||||
// CHECK-I386: ret i32 [[VALUE:%[0-9]+]]
|
||||
|
@ -33,7 +33,7 @@ long test__readfsdword(unsigned long Offset) {
|
|||
long long test__readfsqword(unsigned long Offset) {
|
||||
return __readfsqword(Offset);
|
||||
}
|
||||
// CHECK-I386-LABEL: define i64 @test__readfsqword(i32 %Offset)
|
||||
// CHECK-I386-LABEL: define dso_local i64 @test__readfsqword(i32 %Offset)
|
||||
// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %Offset to i64 addrspace(257)*
|
||||
// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i64, i64 addrspace(257)* [[PTR]], align 8
|
||||
// CHECK-I386: ret i64 [[VALUE:%[0-9]+]]
|
||||
|
@ -42,7 +42,7 @@ long long test__readfsqword(unsigned long Offset) {
|
|||
__int64 test__emul(int a, int b) {
|
||||
return __emul(a, b);
|
||||
}
|
||||
// CHECK-LABEL: define i64 @test__emul(i32 %a, i32 %b)
|
||||
// CHECK-LABEL: define dso_local i64 @test__emul(i32 %a, i32 %b)
|
||||
// CHECK: [[X:%[0-9]+]] = sext i32 %a to i64
|
||||
// CHECK: [[Y:%[0-9]+]] = sext i32 %b to i64
|
||||
// CHECK: [[RES:%[0-9]+]] = mul nsw i64 [[Y]], [[X]]
|
||||
|
@ -51,7 +51,7 @@ __int64 test__emul(int a, int b) {
|
|||
unsigned __int64 test__emulu(unsigned int a, unsigned int b) {
|
||||
return __emulu(a, b);
|
||||
}
|
||||
// CHECK-LABEL: define i64 @test__emulu(i32 %a, i32 %b)
|
||||
// CHECK-LABEL: define dso_local i64 @test__emulu(i32 %a, i32 %b)
|
||||
// CHECK: [[X:%[0-9]+]] = zext i32 %a to i64
|
||||
// CHECK: [[Y:%[0-9]+]] = zext i32 %b to i64
|
||||
// CHECK: [[RES:%[0-9]+]] = mul nuw i64 [[Y]], [[X]]
|
||||
|
@ -62,7 +62,7 @@ unsigned __int64 test__emulu(unsigned int a, unsigned int b) {
|
|||
char test__readgsbyte(unsigned long Offset) {
|
||||
return __readgsbyte(Offset);
|
||||
}
|
||||
// CHECK-X64-LABEL: define i8 @test__readgsbyte(i32 %Offset)
|
||||
// CHECK-X64-LABEL: define dso_local i8 @test__readgsbyte(i32 %Offset)
|
||||
// CHECK-X64: [[ZEXT:%[0-9]+]] = zext i32 %Offset to i64
|
||||
// CHECK-X64: [[PTR:%[0-9]+]] = inttoptr i64 [[ZEXT]] to i8 addrspace(256)*
|
||||
// CHECK-X64: [[VALUE:%[0-9]+]] = load volatile i8, i8 addrspace(256)* [[PTR]], align 1
|
||||
|
@ -71,7 +71,7 @@ char test__readgsbyte(unsigned long Offset) {
|
|||
short test__readgsword(unsigned long Offset) {
|
||||
return __readgsword(Offset);
|
||||
}
|
||||
// CHECK-X64-LABEL: define i16 @test__readgsword(i32 %Offset)
|
||||
// CHECK-X64-LABEL: define dso_local i16 @test__readgsword(i32 %Offset)
|
||||
// CHECK-X64: [[ZEXT:%[0-9]+]] = zext i32 %Offset to i64
|
||||
// CHECK-X64: [[PTR:%[0-9]+]] = inttoptr i64 [[ZEXT]] to i16 addrspace(256)*
|
||||
// CHECK-X64: [[VALUE:%[0-9]+]] = load volatile i16, i16 addrspace(256)* [[PTR]], align 2
|
||||
|
@ -80,7 +80,7 @@ short test__readgsword(unsigned long Offset) {
|
|||
long test__readgsdword(unsigned long Offset) {
|
||||
return __readgsdword(Offset);
|
||||
}
|
||||
// CHECK-X64-LABEL: define i32 @test__readgsdword(i32 %Offset)
|
||||
// CHECK-X64-LABEL: define dso_local i32 @test__readgsdword(i32 %Offset)
|
||||
// CHECK-X64: [[ZEXT:%[0-9]+]] = zext i32 %Offset to i64
|
||||
// CHECK-X64: [[PTR:%[0-9]+]] = inttoptr i64 [[ZEXT]] to i32 addrspace(256)*
|
||||
// CHECK-X64: [[VALUE:%[0-9]+]] = load volatile i32, i32 addrspace(256)* [[PTR]], align 4
|
||||
|
@ -89,7 +89,7 @@ long test__readgsdword(unsigned long Offset) {
|
|||
long long test__readgsqword(unsigned long Offset) {
|
||||
return __readgsqword(Offset);
|
||||
}
|
||||
// CHECK-X64-LABEL: define i64 @test__readgsqword(i32 %Offset)
|
||||
// CHECK-X64-LABEL: define dso_local i64 @test__readgsqword(i32 %Offset)
|
||||
// CHECK-X64: [[ZEXT:%[0-9]+]] = zext i32 %Offset to i64
|
||||
// CHECK-X64: [[PTR:%[0-9]+]] = inttoptr i64 [[ZEXT]] to i64 addrspace(256)*
|
||||
// CHECK-X64: [[VALUE:%[0-9]+]] = load volatile i64, i64 addrspace(256)* [[PTR]], align 8
|
||||
|
@ -98,13 +98,13 @@ long long test__readgsqword(unsigned long Offset) {
|
|||
__int64 test__mulh(__int64 a, __int64 b) {
|
||||
return __mulh(a, b);
|
||||
}
|
||||
// CHECK-X64-LABEL: define i64 @test__mulh(i64 %a, i64 %b)
|
||||
// CHECK-X64-LABEL: define dso_local i64 @test__mulh(i64 %a, i64 %b)
|
||||
// CHECK-X64: = mul nsw i128 %
|
||||
|
||||
unsigned __int64 test__umulh(unsigned __int64 a, unsigned __int64 b) {
|
||||
return __umulh(a, b);
|
||||
}
|
||||
// CHECK-X64-LABEL: define i64 @test__umulh(i64 %a, i64 %b)
|
||||
// CHECK-X64-LABEL: define dso_local i64 @test__umulh(i64 %a, i64 %b)
|
||||
// CHECK-X64: = mul nuw i128 %
|
||||
|
||||
__int64 test_mul128(__int64 Multiplier,
|
||||
|
@ -112,7 +112,7 @@ __int64 test_mul128(__int64 Multiplier,
|
|||
__int64 *HighProduct) {
|
||||
return _mul128(Multiplier, Multiplicand, HighProduct);
|
||||
}
|
||||
// CHECK-X64-LABEL: define i64 @test_mul128(i64 %Multiplier, i64 %Multiplicand, i64*{{[a-z_ ]*}}%HighProduct)
|
||||
// CHECK-X64-LABEL: define dso_local i64 @test_mul128(i64 %Multiplier, i64 %Multiplicand, i64*{{[a-z_ ]*}}%HighProduct)
|
||||
// CHECK-X64: = sext i64 %Multiplier to i128
|
||||
// CHECK-X64: = sext i64 %Multiplicand to i128
|
||||
// CHECK-X64: = mul nsw i128 %
|
||||
|
@ -124,7 +124,7 @@ unsigned __int64 test_umul128(unsigned __int64 Multiplier,
|
|||
unsigned __int64 *HighProduct) {
|
||||
return _umul128(Multiplier, Multiplicand, HighProduct);
|
||||
}
|
||||
// CHECK-X64-LABEL: define i64 @test_umul128(i64 %Multiplier, i64 %Multiplicand, i64*{{[a-z_ ]*}}%HighProduct)
|
||||
// CHECK-X64-LABEL: define dso_local i64 @test_umul128(i64 %Multiplier, i64 %Multiplicand, i64*{{[a-z_ ]*}}%HighProduct)
|
||||
// CHECK-X64: = zext i64 %Multiplier to i128
|
||||
// CHECK-X64: = zext i64 %Multiplicand to i128
|
||||
// CHECK-X64: = mul nuw i128 %
|
||||
|
|
|
@ -13,7 +13,7 @@ void __attribute__((ms_abi)) f1(void);
|
|||
void __attribute__((sysv_abi)) f2(void);
|
||||
void f3(void) {
|
||||
// FREEBSD-LABEL: define void @f3()
|
||||
// WIN64-LABEL: define void @f3()
|
||||
// WIN64-LABEL: define dso_local void @f3()
|
||||
f1();
|
||||
// FREEBSD: call win64cc void @f1()
|
||||
// WIN64: call void @f1()
|
||||
|
@ -23,13 +23,13 @@ void f3(void) {
|
|||
}
|
||||
// FREEBSD: declare win64cc void @f1()
|
||||
// FREEBSD: declare void @f2()
|
||||
// WIN64: declare void @f1()
|
||||
// WIN64: declare x86_64_sysvcc void @f2()
|
||||
// WIN64: declare dso_local void @f1()
|
||||
// WIN64: declare dso_local x86_64_sysvcc void @f2()
|
||||
|
||||
// Win64 ABI varargs
|
||||
void __attribute__((ms_abi)) f4(int a, ...) {
|
||||
// FREEBSD-LABEL: define win64cc void @f4
|
||||
// WIN64-LABEL: define void @f4
|
||||
// WIN64-LABEL: define dso_local void @f4
|
||||
__builtin_ms_va_list ap;
|
||||
__builtin_ms_va_start(ap, a);
|
||||
// FREEBSD: %[[AP:.*]] = alloca i8*
|
||||
|
@ -79,7 +79,7 @@ void __attribute__((ms_abi)) f4(int a, ...) {
|
|||
|
||||
// Let's verify that normal va_lists work right on Win64, too.
|
||||
void f5(int a, ...) {
|
||||
// WIN64-LABEL: define void @f5
|
||||
// WIN64-LABEL: define dso_local void @f5
|
||||
__builtin_va_list ap;
|
||||
__builtin_va_start(ap, a);
|
||||
// WIN64: %[[AP:.*]] = alloca i8*
|
||||
|
@ -110,7 +110,7 @@ void f5(int a, ...) {
|
|||
void __attribute__((sysv_abi)) f6(__builtin_ms_va_list ap) {
|
||||
// FREEBSD-LABEL: define void @f6
|
||||
// FREEBSD: store i8* %ap, i8** %[[AP:.*]]
|
||||
// WIN64-LABEL: define x86_64_sysvcc void @f6
|
||||
// WIN64-LABEL: define dso_local x86_64_sysvcc void @f6
|
||||
// WIN64: store i8* %ap, i8** %[[AP:.*]]
|
||||
int b = __builtin_va_arg(ap, int);
|
||||
// FREEBSD: %[[AP_CUR:.*]] = load i8*, i8** %[[AP]]
|
||||
|
@ -155,7 +155,7 @@ struct i128 {
|
|||
};
|
||||
|
||||
__attribute__((ms_abi)) struct i128 f7(struct i128 a) {
|
||||
// WIN64: define void @f7(%struct.i128* noalias sret %agg.result, %struct.i128* %a)
|
||||
// WIN64: define dso_local void @f7(%struct.i128* noalias sret %agg.result, %struct.i128* %a)
|
||||
// FREEBSD: define win64cc void @f7(%struct.i128* noalias sret %agg.result, %struct.i128* %a)
|
||||
return a;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ void __attribute__((ms_abi)) f1(void);
|
|||
void f2(void);
|
||||
void f3(void) {
|
||||
// LINUX-LABEL: define void @f3()
|
||||
// WIN64-LABEL: define void @f3()
|
||||
// WIN64-LABEL: define dso_local void @f3()
|
||||
f1();
|
||||
// LINUX: call win64cc void @f1()
|
||||
// WIN64: call void @f1()
|
||||
|
@ -15,13 +15,13 @@ void f3(void) {
|
|||
}
|
||||
// LINUX: declare win64cc void @f1()
|
||||
// LINUX: declare void @f2()
|
||||
// WIN64: declare void @f1()
|
||||
// WIN64: declare void @f2()
|
||||
// WIN64: declare dso_local void @f1()
|
||||
// WIN64: declare dso_local void @f2()
|
||||
|
||||
// Win64 ABI varargs
|
||||
void __attribute__((ms_abi)) f4(int a, ...) {
|
||||
// LINUX-LABEL: define win64cc void @f4
|
||||
// WIN64-LABEL: define void @f4
|
||||
// WIN64-LABEL: define dso_local void @f4
|
||||
__builtin_ms_va_list ap;
|
||||
__builtin_ms_va_start(ap, a);
|
||||
// LINUX: %[[AP:.*]] = alloca i8*
|
||||
|
@ -50,7 +50,7 @@ void __attribute__((ms_abi)) f4(int a, ...) {
|
|||
|
||||
// Let's verify that normal va_lists work right on Win64, too.
|
||||
void f5(int a, ...) {
|
||||
// WIN64-LABEL: define void @f5
|
||||
// WIN64-LABEL: define dso_local void @f5
|
||||
__builtin_va_list ap;
|
||||
__builtin_va_start(ap, a);
|
||||
// WIN64: %[[AP:.*]] = alloca i8*
|
||||
|
|
|
@ -13,7 +13,7 @@ public:
|
|||
void runc();
|
||||
};
|
||||
|
||||
// CHECK: define void @"\01?runc@t2@@
|
||||
// CHECK: define dso_local void @"\01?runc@t2@@
|
||||
void t2::runc() {
|
||||
double num = 0;
|
||||
__asm {
|
||||
|
@ -26,7 +26,7 @@ void t2::runc() {
|
|||
};
|
||||
}
|
||||
|
||||
// CHECK: define void @"\01?runc@t1@@
|
||||
// CHECK: define dso_local void @"\01?runc@t1@@
|
||||
void t1::runc() {
|
||||
double num = 0;
|
||||
__asm {
|
||||
|
@ -41,7 +41,7 @@ void t1::runc() {
|
|||
|
||||
struct s {
|
||||
int a;
|
||||
// CHECK: define linkonce_odr void @"\01?func@s@@
|
||||
// CHECK: define linkonce_odr dso_local void @"\01?func@s@@
|
||||
void func() {
|
||||
__asm mov rax, [this]
|
||||
// CHECK: [[THIS_ADDR_S:%.+]] = alloca %struct.s*
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
// is lowered to the corresponding calling convention attrribute at the LLVM IR
|
||||
// level.
|
||||
void foo() __attribute__((preserve_most)) {
|
||||
// CHECK-LABEL: define preserve_mostcc void @foo()
|
||||
// CHECK-LABEL: define {{(dso_local )?}}preserve_mostcc void @foo()
|
||||
}
|
||||
|
||||
// Check that the preserve_most calling convention attribute at the source level
|
||||
// is lowered to the corresponding calling convention attrribute at the LLVM IR
|
||||
// level.
|
||||
void boo() __attribute__((preserve_all)) {
|
||||
// CHECK-LABEL: define preserve_allcc void @boo()
|
||||
// CHECK-LABEL: define {{(dso_local )?}}preserve_allcc void @boo()
|
||||
}
|
||||
|
||||
|
|
|
@ -6,34 +6,34 @@
|
|||
#include <xmmintrin.h>
|
||||
|
||||
void __regcall v1(int a, int b) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__v1(i32 inreg %a, i32 inreg %b)
|
||||
// Win64: define x86_regcallcc void @__regcall3__v1(i32 %a, i32 %b)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__v1(i32 inreg %a, i32 inreg %b)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__v1(i32 %a, i32 %b)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__v1(i32 inreg %a, i32 inreg %b)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__v1(i32 %a, i32 %b)
|
||||
|
||||
void __attribute__((regcall)) v1b(int a, int b) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__v1b(i32 inreg %a, i32 inreg %b)
|
||||
// Win64: define x86_regcallcc void @__regcall3__v1b(i32 %a, i32 %b)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__v1b(i32 inreg %a, i32 inreg %b)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__v1b(i32 %a, i32 %b)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__v1b(i32 inreg %a, i32 inreg %b)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__v1b(i32 %a, i32 %b)
|
||||
|
||||
void __regcall v2(char a, char b) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__v2(i8 inreg signext %a, i8 inreg signext %b)
|
||||
// Win64: define x86_regcallcc void @__regcall3__v2(i8 %a, i8 %b)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__v2(i8 inreg signext %a, i8 inreg signext %b)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__v2(i8 %a, i8 %b)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__v2(i8 inreg signext %a, i8 inreg signext %b)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__v2(i8 signext %a, i8 signext %b)
|
||||
|
||||
struct Small { int x; };
|
||||
void __regcall v3(int a, struct Small b, int c) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__v3(i32 inreg %a, i32 %b.0, i32 inreg %c)
|
||||
// Win64: define x86_regcallcc void @__regcall3__v3(i32 %a, i32 %b.coerce, i32 %c)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__v3(i32 inreg %a, i32 %b.0, i32 inreg %c)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__v3(i32 %a, i32 %b.coerce, i32 %c)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__v3(i32 inreg %a, i32 inreg, i32 %b.0, i32 inreg %c)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__v3(i32 %a, i32 %b.coerce, i32 %c)
|
||||
|
||||
struct Large { int a[5]; };
|
||||
void __regcall v4(int a, struct Large b, int c) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__v4(i32 inreg %a, %struct.Large* byval align 4 %b, i32 inreg %c)
|
||||
// Win64: define x86_regcallcc void @__regcall3__v4(i32 %a, %struct.Large* %b, i32 %c)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__v4(i32 inreg %a, %struct.Large* byval align 4 %b, i32 inreg %c)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__v4(i32 %a, %struct.Large* %b, i32 %c)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__v4(i32 inreg %a, %struct.Large* byval align 4 %b, i32 %c)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__v4(i32 %a, [5 x i32] %b.coerce, i32 %c)
|
||||
|
||||
|
@ -42,8 +42,8 @@ struct HFA4 { double w, x, y, z; };
|
|||
struct HFA5 { double v, w, x, y, z; };
|
||||
|
||||
void __regcall hfa1(int a, struct HFA4 b, int c) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__hfa1(i32 inreg %a, double %b.0, double %b.1, double %b.2, double %b.3, i32 inreg %c)
|
||||
// Win64: define x86_regcallcc void @__regcall3__hfa1(i32 %a, double %b.0, double %b.1, double %b.2, double %b.3, i32 %c)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__hfa1(i32 inreg %a, double %b.0, double %b.1, double %b.2, double %b.3, i32 inreg %c)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__hfa1(i32 %a, double %b.0, double %b.1, double %b.2, double %b.3, i32 %c)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__hfa1(i32 inreg %a, double %b.0, double %b.1, double %b.2, double %b.3, i32 inreg %c)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__hfa1(i32 %a, double %b.coerce0, double %b.coerce1, double %b.coerce2, double %b.coerce3, i32 %c)
|
||||
|
||||
|
@ -51,16 +51,16 @@ void __regcall hfa1(int a, struct HFA4 b, int c) {}
|
|||
// indirectly. Additional vector arguments can consume the rest of the SSE
|
||||
// registers.
|
||||
void __regcall hfa2(struct HFA4 a, struct HFA4 b, double c) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__hfa2(double %a.0, double %a.1, double %a.2, double %a.3, double %b.0, double %b.1, double %b.2, double %b.3, double* inreg)
|
||||
// Win64: define x86_regcallcc void @__regcall3__hfa2(double %a.0, double %a.1, double %a.2, double %a.3, double %b.0, double %b.1, double %b.2, double %b.3, double %c)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__hfa2(double %a.0, double %a.1, double %a.2, double %a.3, double %b.0, double %b.1, double %b.2, double %b.3, double* inreg)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__hfa2(double %a.0, double %a.1, double %a.2, double %a.3, double %b.0, double %b.1, double %b.2, double %b.3, double %c)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__hfa2(double %a.0, double %a.1, double %a.2, double %a.3, double %b.0, double %b.1, double %b.2, double %b.3, double* inreg)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__hfa2(double %a.coerce0, double %a.coerce1, double %a.coerce2, double %a.coerce3, double %b.coerce0, double %b.coerce1, double %b.coerce2, double %b.coerce3, double %c)
|
||||
|
||||
// Ensure that we pass builtin types directly while counting them against the
|
||||
// SSE register usage.
|
||||
void __regcall hfa3(double a, double b, double c, double d, double e, struct HFA2 f) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__hfa3(double %a, double %b, double %c, double %d, double %e, double %f.0, double %f.1)
|
||||
// Win64: define x86_regcallcc void @__regcall3__hfa3(double %a, double %b, double %c, double %d, double %e, double %f.0, double %f.1)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__hfa3(double %a, double %b, double %c, double %d, double %e, double %f.0, double %f.1)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__hfa3(double %a, double %b, double %c, double %d, double %e, double %f.0, double %f.1)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__hfa3(double %a, double %b, double %c, double %d, double %e, double %f.0, double %f.1)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__hfa3(double %a, double %b, double %c, double %d, double %e, double %f.coerce0, double %f.coerce1)
|
||||
|
||||
|
@ -68,16 +68,16 @@ void __regcall hfa3(double a, double b, double c, double d, double e, struct HFA
|
|||
// Because they are not classified as homogeneous, they don't get special
|
||||
// handling to ensure alignment.
|
||||
void __regcall hfa4(struct HFA5 a) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__hfa4(%struct.HFA5* byval align 4)
|
||||
// Win64: define x86_regcallcc void @__regcall3__hfa4(%struct.HFA5* %a)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__hfa4(%struct.HFA5* byval align 4)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__hfa4(%struct.HFA5* %a)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__hfa4(%struct.HFA5* byval align 4 %a)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__hfa4(double %a.coerce0, double %a.coerce1, double %a.coerce2, double %a.coerce3, double %a.coerce4)
|
||||
|
||||
// Return HFAs of 4 or fewer elements in registers.
|
||||
static struct HFA2 g_hfa2;
|
||||
struct HFA2 __regcall hfa5(void) { return g_hfa2; }
|
||||
// Win32: define x86_regcallcc %struct.HFA2 @__regcall3__hfa5()
|
||||
// Win64: define x86_regcallcc %struct.HFA2 @__regcall3__hfa5()
|
||||
// Win32: define dso_local x86_regcallcc %struct.HFA2 @__regcall3__hfa5()
|
||||
// Win64: define dso_local x86_regcallcc %struct.HFA2 @__regcall3__hfa5()
|
||||
// Lin32: define x86_regcallcc %struct.HFA2 @__regcall3__hfa5()
|
||||
// Lin64: define x86_regcallcc %struct.HFA2 @__regcall3__hfa5()
|
||||
|
||||
|
@ -86,20 +86,20 @@ struct HVA2 { v4f32 x, y; };
|
|||
struct HVA4 { v4f32 w, x, y, z; };
|
||||
|
||||
void __regcall hva1(int a, struct HVA4 b, int c) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__hva1(i32 inreg %a, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, i32 inreg %c)
|
||||
// Win64: define x86_regcallcc void @__regcall3__hva1(i32 %a, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, i32 %c)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__hva1(i32 inreg %a, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, i32 inreg %c)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__hva1(i32 %a, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, i32 %c)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__hva1(i32 inreg %a, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, i32 inreg %c)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__hva1(i32 %a, <4 x float> %b.coerce0, <4 x float> %b.coerce1, <4 x float> %b.coerce2, <4 x float> %b.coerce3, i32 %c)
|
||||
|
||||
void __regcall hva2(struct HVA4 a, struct HVA4 b, v4f32 c) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__hva2(<4 x float> %a.0, <4 x float> %a.1, <4 x float> %a.2, <4 x float> %a.3, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, <4 x float>* inreg)
|
||||
// Win64: define x86_regcallcc void @__regcall3__hva2(<4 x float> %a.0, <4 x float> %a.1, <4 x float> %a.2, <4 x float> %a.3, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, <4 x float> %c)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__hva2(<4 x float> %a.0, <4 x float> %a.1, <4 x float> %a.2, <4 x float> %a.3, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, <4 x float>* inreg)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__hva2(<4 x float> %a.0, <4 x float> %a.1, <4 x float> %a.2, <4 x float> %a.3, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, <4 x float> %c)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__hva2(<4 x float> %a.0, <4 x float> %a.1, <4 x float> %a.2, <4 x float> %a.3, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, <4 x float>* inreg)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__hva2(<4 x float> %a.coerce0, <4 x float> %a.coerce1, <4 x float> %a.coerce2, <4 x float> %a.coerce3, <4 x float> %b.coerce0, <4 x float> %b.coerce1, <4 x float> %b.coerce2, <4 x float> %b.coerce3, <4 x float> %c)
|
||||
|
||||
void __regcall hva3(v4f32 a, v4f32 b, v4f32 c, v4f32 d, v4f32 e, struct HVA2 f) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__hva3(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e, <4 x float> %f.0, <4 x float> %f.1)
|
||||
// Win64: define x86_regcallcc void @__regcall3__hva3(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e, <4 x float> %f.0, <4 x float> %f.1)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__hva3(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e, <4 x float> %f.0, <4 x float> %f.1)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__hva3(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e, <4 x float> %f.0, <4 x float> %f.1)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__hva3(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e, <4 x float> %f.0, <4 x float> %f.1)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__hva3(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e, <4 x float> %f.coerce0, <4 x float> %f.coerce1)
|
||||
|
||||
|
@ -107,14 +107,14 @@ typedef float __attribute__((ext_vector_type(3))) v3f32;
|
|||
struct OddSizeHVA { v3f32 x, y; };
|
||||
|
||||
void __regcall odd_size_hva(struct OddSizeHVA a) {}
|
||||
// Win32: define x86_regcallcc void @__regcall3__odd_size_hva(<3 x float> %a.0, <3 x float> %a.1)
|
||||
// Win64: define x86_regcallcc void @__regcall3__odd_size_hva(<3 x float> %a.0, <3 x float> %a.1)
|
||||
// Win32: define dso_local x86_regcallcc void @__regcall3__odd_size_hva(<3 x float> %a.0, <3 x float> %a.1)
|
||||
// Win64: define dso_local x86_regcallcc void @__regcall3__odd_size_hva(<3 x float> %a.0, <3 x float> %a.1)
|
||||
// Lin32: define x86_regcallcc void @__regcall3__odd_size_hva(<3 x float> %a.0, <3 x float> %a.1)
|
||||
// Lin64: define x86_regcallcc void @__regcall3__odd_size_hva(<3 x float> %a.coerce0, <3 x float> %a.coerce1)
|
||||
|
||||
struct HFA6 { __m128 f[4]; };
|
||||
struct HFA6 __regcall ret_reg_reused(struct HFA6 a, struct HFA6 b, struct HFA6 c, struct HFA6 d){ struct HFA6 h; return h;}
|
||||
// Win32: define x86_regcallcc %struct.HFA6 @__regcall3__ret_reg_reused(<4 x float> %a.0, <4 x float> %a.1, <4 x float> %a.2, <4 x float> %a.3, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, %struct.HFA6* inreg %c, %struct.HFA6* inreg %d)
|
||||
// Win64: define x86_regcallcc %struct.HFA6 @__regcall3__ret_reg_reused(<4 x float> %a.0, <4 x float> %a.1, <4 x float> %a.2, <4 x float> %a.3, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, <4 x float> %c.0, <4 x float> %c.1, <4 x float> %c.2, <4 x float> %c.3, <4 x float> %d.0, <4 x float> %d.1, <4 x float> %d.2, <4 x float> %d.3)
|
||||
// Win32: define dso_local x86_regcallcc %struct.HFA6 @__regcall3__ret_reg_reused(<4 x float> %a.0, <4 x float> %a.1, <4 x float> %a.2, <4 x float> %a.3, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, %struct.HFA6* inreg %c, %struct.HFA6* inreg %d)
|
||||
// Win64: define dso_local x86_regcallcc %struct.HFA6 @__regcall3__ret_reg_reused(<4 x float> %a.0, <4 x float> %a.1, <4 x float> %a.2, <4 x float> %a.3, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, <4 x float> %c.0, <4 x float> %c.1, <4 x float> %c.2, <4 x float> %c.3, <4 x float> %d.0, <4 x float> %d.1, <4 x float> %d.2, <4 x float> %d.3)
|
||||
// Lin32: define x86_regcallcc %struct.HFA6 @__regcall3__ret_reg_reused(<4 x float> %a.0, <4 x float> %a.1, <4 x float> %a.2, <4 x float> %a.3, <4 x float> %b.0, <4 x float> %b.1, <4 x float> %b.2, <4 x float> %b.3, %struct.HFA6* inreg %c, %struct.HFA6* inreg %d)
|
||||
// Lin64: define x86_regcallcc %struct.HFA6 @__regcall3__ret_reg_reused([4 x <4 x float>] %a.coerce, [4 x <4 x float>] %b.coerce, [4 x <4 x float>] %c.coerce, [4 x <4 x float>] %d.coerce)
|
||||
|
|
|
@ -15,7 +15,7 @@ void f(const char *f) {
|
|||
v(f, 1, 2, 3, NULL);
|
||||
kr(f, 1, 2, 3, 0);
|
||||
}
|
||||
// WINDOWS: define void @f(i8* %f)
|
||||
// WINDOWS: define dso_local void @f(i8* %f)
|
||||
// WINDOWS: call void (i8*, ...) @v(i8* {{.*}}, i32 1, i32 2, i32 3, i64 0)
|
||||
// WINDOWS: call void bitcast (void (...)* @kr to void (i8*, i32, i32, i32, i32)*)(i8* {{.*}}, i32 1, i32 2, i32 3, i32 0)
|
||||
// LINUX: define void @f(i8* %f)
|
||||
|
|
|
@ -2,56 +2,56 @@
|
|||
// RUN: %clang_cc1 -emit-llvm %s -o - -ffreestanding -triple=x86_64-pc-win32 | FileCheck %s --check-prefix=X64
|
||||
|
||||
void __vectorcall v1(int a, int b) {}
|
||||
// X32: define x86_vectorcallcc void @"\01v1@@8"(i32 inreg %a, i32 inreg %b)
|
||||
// X64: define x86_vectorcallcc void @"\01v1@@16"(i32 %a, i32 %b)
|
||||
// X32: define dso_local x86_vectorcallcc void @"\01v1@@8"(i32 inreg %a, i32 inreg %b)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01v1@@16"(i32 %a, i32 %b)
|
||||
|
||||
void __vectorcall v2(char a, char b) {}
|
||||
// X32: define x86_vectorcallcc void @"\01v2@@8"(i8 inreg signext %a, i8 inreg signext %b)
|
||||
// X64: define x86_vectorcallcc void @"\01v2@@16"(i8 %a, i8 %b)
|
||||
// X32: define dso_local x86_vectorcallcc void @"\01v2@@8"(i8 inreg signext %a, i8 inreg signext %b)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01v2@@16"(i8 %a, i8 %b)
|
||||
|
||||
struct Small { int x; };
|
||||
void __vectorcall v3(int a, struct Small b, int c) {}
|
||||
// X32: define x86_vectorcallcc void @"\01v3@@12"(i32 inreg %a, i32 %b.0, i32 inreg %c)
|
||||
// X64: define x86_vectorcallcc void @"\01v3@@24"(i32 %a, i32 %b.coerce, i32 %c)
|
||||
// X32: define dso_local x86_vectorcallcc void @"\01v3@@12"(i32 inreg %a, i32 %b.0, i32 inreg %c)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01v3@@24"(i32 %a, i32 %b.coerce, i32 %c)
|
||||
|
||||
struct Large { int a[5]; };
|
||||
void __vectorcall v4(int a, struct Large b, int c) {}
|
||||
// X32: define x86_vectorcallcc void @"\01v4@@28"(i32 inreg %a, %struct.Large* byval align 4 %b, i32 inreg %c)
|
||||
// X64: define x86_vectorcallcc void @"\01v4@@40"(i32 %a, %struct.Large* %b, i32 %c)
|
||||
// X32: define dso_local x86_vectorcallcc void @"\01v4@@28"(i32 inreg %a, %struct.Large* byval align 4 %b, i32 inreg %c)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01v4@@40"(i32 %a, %struct.Large* %b, i32 %c)
|
||||
|
||||
struct HFA2 { double x, y; };
|
||||
struct HFA4 { double w, x, y, z; };
|
||||
struct HFA5 { double v, w, x, y, z; };
|
||||
|
||||
void __vectorcall hfa1(int a, struct HFA4 b, int c) {}
|
||||
// X32: define x86_vectorcallcc void @"\01hfa1@@40"(i32 inreg %a, %struct.HFA4 inreg %b.coerce, i32 inreg %c)
|
||||
// X64: define x86_vectorcallcc void @"\01hfa1@@48"(i32 %a, %struct.HFA4 inreg %b.coerce, i32 %c)
|
||||
// X32: define dso_local x86_vectorcallcc void @"\01hfa1@@40"(i32 inreg %a, %struct.HFA4 inreg %b.coerce, i32 inreg %c)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01hfa1@@48"(i32 %a, %struct.HFA4 inreg %b.coerce, i32 %c)
|
||||
|
||||
// HFAs that would require more than six total SSE registers are passed
|
||||
// indirectly. Additional vector arguments can consume the rest of the SSE
|
||||
// registers.
|
||||
void __vectorcall hfa2(struct HFA4 a, struct HFA4 b, double c) {}
|
||||
// X32: define x86_vectorcallcc void @"\01hfa2@@72"(%struct.HFA4 inreg %a.coerce, %struct.HFA4* inreg %b, double %c)
|
||||
// X64: define x86_vectorcallcc void @"\01hfa2@@72"(%struct.HFA4 inreg %a.coerce, %struct.HFA4* %b, double %c)
|
||||
// X32: define dso_local x86_vectorcallcc void @"\01hfa2@@72"(%struct.HFA4 inreg %a.coerce, %struct.HFA4* inreg %b, double %c)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01hfa2@@72"(%struct.HFA4 inreg %a.coerce, %struct.HFA4* %b, double %c)
|
||||
|
||||
// Ensure that we pass builtin types directly while counting them against the
|
||||
// SSE register usage.
|
||||
void __vectorcall hfa3(double a, double b, double c, double d, double e, struct HFA2 f) {}
|
||||
// X32: define x86_vectorcallcc void @"\01hfa3@@56"(double %a, double %b, double %c, double %d, double %e, %struct.HFA2* inreg %f)
|
||||
// X64: define x86_vectorcallcc void @"\01hfa3@@56"(double %a, double %b, double %c, double %d, double %e, %struct.HFA2* %f)
|
||||
// X32: define dso_local x86_vectorcallcc void @"\01hfa3@@56"(double %a, double %b, double %c, double %d, double %e, %struct.HFA2* inreg %f)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01hfa3@@56"(double %a, double %b, double %c, double %d, double %e, %struct.HFA2* %f)
|
||||
|
||||
// Aggregates with more than four elements are not HFAs and are passed byval.
|
||||
// Because they are not classified as homogeneous, they don't get special
|
||||
// handling to ensure alignment.
|
||||
void __vectorcall hfa4(struct HFA5 a) {}
|
||||
// X32: define x86_vectorcallcc void @"\01hfa4@@40"(%struct.HFA5* byval align 4)
|
||||
// X64: define x86_vectorcallcc void @"\01hfa4@@40"(%struct.HFA5* %a)
|
||||
// X32: define dso_local x86_vectorcallcc void @"\01hfa4@@40"(%struct.HFA5* byval align 4)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01hfa4@@40"(%struct.HFA5* %a)
|
||||
|
||||
// Return HFAs of 4 or fewer elements in registers.
|
||||
static struct HFA2 g_hfa2;
|
||||
struct HFA2 __vectorcall hfa5(void) { return g_hfa2; }
|
||||
// X32: define x86_vectorcallcc %struct.HFA2 @"\01hfa5@@0"()
|
||||
// X64: define x86_vectorcallcc %struct.HFA2 @"\01hfa5@@0"()
|
||||
// X32: define dso_local x86_vectorcallcc %struct.HFA2 @"\01hfa5@@0"()
|
||||
// X64: define dso_local x86_vectorcallcc %struct.HFA2 @"\01hfa5@@0"()
|
||||
|
||||
typedef float __attribute__((vector_size(16))) v4f32;
|
||||
struct HVA2 { v4f32 x, y; };
|
||||
|
@ -60,52 +60,52 @@ struct HVA4 { v4f32 w, x, y, z; };
|
|||
struct HVA5 { v4f32 w, x, y, z, p; };
|
||||
|
||||
v4f32 __vectorcall hva1(int a, struct HVA4 b, int c) {return b.w;}
|
||||
// X32: define x86_vectorcallcc <4 x float> @"\01hva1@@72"(i32 inreg %a, %struct.HVA4 inreg %b.coerce, i32 inreg %c)
|
||||
// X64: define x86_vectorcallcc <4 x float> @"\01hva1@@80"(i32 %a, %struct.HVA4 inreg %b.coerce, i32 %c)
|
||||
// X32: define dso_local x86_vectorcallcc <4 x float> @"\01hva1@@72"(i32 inreg %a, %struct.HVA4 inreg %b.coerce, i32 inreg %c)
|
||||
// X64: define dso_local x86_vectorcallcc <4 x float> @"\01hva1@@80"(i32 %a, %struct.HVA4 inreg %b.coerce, i32 %c)
|
||||
|
||||
v4f32 __vectorcall hva2(struct HVA4 a, struct HVA4 b, v4f32 c) {return c;}
|
||||
// X32: define x86_vectorcallcc <4 x float> @"\01hva2@@144"(%struct.HVA4 inreg %a.coerce, %struct.HVA4* inreg %b, <4 x float> %c)
|
||||
// X64: define x86_vectorcallcc <4 x float> @"\01hva2@@144"(%struct.HVA4 inreg %a.coerce, %struct.HVA4* %b, <4 x float> %c)
|
||||
// X32: define dso_local x86_vectorcallcc <4 x float> @"\01hva2@@144"(%struct.HVA4 inreg %a.coerce, %struct.HVA4* inreg %b, <4 x float> %c)
|
||||
// X64: define dso_local x86_vectorcallcc <4 x float> @"\01hva2@@144"(%struct.HVA4 inreg %a.coerce, %struct.HVA4* %b, <4 x float> %c)
|
||||
|
||||
v4f32 __vectorcall hva3(v4f32 a, v4f32 b, v4f32 c, v4f32 d, v4f32 e, struct HVA2 f) {return f.x;}
|
||||
// X32: define x86_vectorcallcc <4 x float> @"\01hva3@@112"(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e, %struct.HVA2* inreg %f)
|
||||
// X64: define x86_vectorcallcc <4 x float> @"\01hva3@@112"(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e, %struct.HVA2* %f)
|
||||
// X32: define dso_local x86_vectorcallcc <4 x float> @"\01hva3@@112"(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e, %struct.HVA2* inreg %f)
|
||||
// X64: define dso_local x86_vectorcallcc <4 x float> @"\01hva3@@112"(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, <4 x float> %e, %struct.HVA2* %f)
|
||||
|
||||
// vector types have higher priority then HVA structures, So vector types are allocated first
|
||||
// and HVAs are allocated if enough registers are available
|
||||
v4f32 __vectorcall hva4(struct HVA4 a, struct HVA2 b, v4f32 c) {return b.y;}
|
||||
// X32: define x86_vectorcallcc <4 x float> @"\01hva4@@112"(%struct.HVA4 inreg %a.coerce, %struct.HVA2* inreg %b, <4 x float> %c)
|
||||
// X64: define x86_vectorcallcc <4 x float> @"\01hva4@@112"(%struct.HVA4 inreg %a.coerce, %struct.HVA2* %b, <4 x float> %c)
|
||||
// X32: define dso_local x86_vectorcallcc <4 x float> @"\01hva4@@112"(%struct.HVA4 inreg %a.coerce, %struct.HVA2* inreg %b, <4 x float> %c)
|
||||
// X64: define dso_local x86_vectorcallcc <4 x float> @"\01hva4@@112"(%struct.HVA4 inreg %a.coerce, %struct.HVA2* %b, <4 x float> %c)
|
||||
|
||||
v4f32 __vectorcall hva5(struct HVA3 a, struct HVA3 b, v4f32 c, struct HVA2 d) {return d.y;}
|
||||
// X32: define x86_vectorcallcc <4 x float> @"\01hva5@@144"(%struct.HVA3 inreg %a.coerce, %struct.HVA3* inreg %b, <4 x float> %c, %struct.HVA2 inreg %d.coerce)
|
||||
// X64: define x86_vectorcallcc <4 x float> @"\01hva5@@144"(%struct.HVA3 inreg %a.coerce, %struct.HVA3* %b, <4 x float> %c, %struct.HVA2 inreg %d.coerce)
|
||||
// X32: define dso_local x86_vectorcallcc <4 x float> @"\01hva5@@144"(%struct.HVA3 inreg %a.coerce, %struct.HVA3* inreg %b, <4 x float> %c, %struct.HVA2 inreg %d.coerce)
|
||||
// X64: define dso_local x86_vectorcallcc <4 x float> @"\01hva5@@144"(%struct.HVA3 inreg %a.coerce, %struct.HVA3* %b, <4 x float> %c, %struct.HVA2 inreg %d.coerce)
|
||||
|
||||
struct HVA4 __vectorcall hva6(struct HVA4 a, struct HVA4 b) { return b;}
|
||||
// X32: define x86_vectorcallcc %struct.HVA4 @"\01hva6@@128"(%struct.HVA4 inreg %a.coerce, %struct.HVA4* inreg %b)
|
||||
// X64: define x86_vectorcallcc %struct.HVA4 @"\01hva6@@128"(%struct.HVA4 inreg %a.coerce, %struct.HVA4* %b)
|
||||
// X32: define dso_local x86_vectorcallcc %struct.HVA4 @"\01hva6@@128"(%struct.HVA4 inreg %a.coerce, %struct.HVA4* inreg %b)
|
||||
// X64: define dso_local x86_vectorcallcc %struct.HVA4 @"\01hva6@@128"(%struct.HVA4 inreg %a.coerce, %struct.HVA4* %b)
|
||||
|
||||
struct HVA5 __vectorcall hva7() {struct HVA5 a = {}; return a;}
|
||||
// X32: define x86_vectorcallcc void @"\01hva7@@0"(%struct.HVA5* inreg noalias sret %agg.result)
|
||||
// X64: define x86_vectorcallcc void @"\01hva7@@0"(%struct.HVA5* noalias sret %agg.result)
|
||||
// X32: define dso_local x86_vectorcallcc void @"\01hva7@@0"(%struct.HVA5* inreg noalias sret %agg.result)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01hva7@@0"(%struct.HVA5* noalias sret %agg.result)
|
||||
|
||||
v4f32 __vectorcall hva8(v4f32 a, v4f32 b, v4f32 c, v4f32 d, int e, v4f32 f) {return f;}
|
||||
// X32: define x86_vectorcallcc <4 x float> @"\01hva8@@84"(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, i32 inreg %e, <4 x float> %f)
|
||||
// X64: define x86_vectorcallcc <4 x float> @"\01hva8@@88"(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, i32 %e, <4 x float> %f)
|
||||
// X32: define dso_local x86_vectorcallcc <4 x float> @"\01hva8@@84"(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, i32 inreg %e, <4 x float> %f)
|
||||
// X64: define dso_local x86_vectorcallcc <4 x float> @"\01hva8@@88"(<4 x float> %a, <4 x float> %b, <4 x float> %c, <4 x float> %d, i32 %e, <4 x float> %f)
|
||||
|
||||
typedef float __attribute__((ext_vector_type(3))) v3f32;
|
||||
struct OddSizeHVA { v3f32 x, y; };
|
||||
|
||||
void __vectorcall odd_size_hva(struct OddSizeHVA a) {}
|
||||
// X32: define x86_vectorcallcc void @"\01odd_size_hva@@32"(%struct.OddSizeHVA inreg %a.coerce)
|
||||
// X64: define x86_vectorcallcc void @"\01odd_size_hva@@32"(%struct.OddSizeHVA inreg %a.coerce)
|
||||
// X32: define dso_local x86_vectorcallcc void @"\01odd_size_hva@@32"(%struct.OddSizeHVA inreg %a.coerce)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01odd_size_hva@@32"(%struct.OddSizeHVA inreg %a.coerce)
|
||||
|
||||
// The Vectorcall ABI only allows passing the first 6 items in registers in x64, so this shouldn't
|
||||
// consider 'p7' as a register. Instead p5 gets put into the register on the second pass.
|
||||
// x86 should pass p2, p6 and p7 in registers, then p1 in the second pass.
|
||||
struct HFA2 __vectorcall AddParticles(struct HFA2 p1, float p2, struct HFA4 p3, int p4, struct HFA2 p5, float p6, float p7, int p8){ return p1;}
|
||||
// X32: define x86_vectorcallcc %struct.HFA2 @"\01AddParticles@@84"(%struct.HFA2 inreg %p1.coerce, float %p2, %struct.HFA4* inreg %p3, i32 inreg %p4, %struct.HFA2* %p5, float %p6, float %p7, i32 %p8)
|
||||
// X64: define x86_vectorcallcc %struct.HFA2 @"\01AddParticles@@104"(%struct.HFA2 inreg %p1.coerce, float %p2, %struct.HFA4* %p3, i32 %p4, %struct.HFA2 inreg %p5.coerce, float %p6, float %p7, i32 %p8)
|
||||
// X32: define dso_local x86_vectorcallcc %struct.HFA2 @"\01AddParticles@@84"(%struct.HFA2 inreg %p1.coerce, float %p2, %struct.HFA4* inreg %p3, i32 inreg %p4, %struct.HFA2* %p5, float %p6, float %p7, i32 %p8)
|
||||
// X64: define dso_local x86_vectorcallcc %struct.HFA2 @"\01AddParticles@@104"(%struct.HFA2 inreg %p1.coerce, float %p2, %struct.HFA4* %p3, i32 %p4, %struct.HFA2 inreg %p5.coerce, float %p6, float %p7, i32 %p8)
|
||||
|
||||
// Vectorcall in both architectures allows passing of an HVA as long as there is room,
|
||||
// even if it is not one of the first 6 arguments. First pass puts p4 into a
|
||||
|
@ -113,6 +113,6 @@ struct HFA2 __vectorcall AddParticles(struct HFA2 p1, float p2, struct HFA4 p3,
|
|||
// in a register, does NOT put p7 in a register (since theres no room), then puts
|
||||
// p8 in a register.
|
||||
void __vectorcall HVAAnywhere(struct HFA2 p1, int p2, int p3, float p4, int p5, int p6, struct HFA4 p7, struct HFA2 p8, float p9){}
|
||||
// X32: define x86_vectorcallcc void @"\01HVAAnywhere@@88"(%struct.HFA2 inreg %p1.coerce, i32 inreg %p2, i32 inreg %p3, float %p4, i32 %p5, i32 %p6, %struct.HFA4* %p7, %struct.HFA2 inreg %p8.coerce, float %p9)
|
||||
// X64: define x86_vectorcallcc void @"\01HVAAnywhere@@112"(%struct.HFA2 inreg %p1.coerce, i32 %p2, i32 %p3, float %p4, i32 %p5, i32 %p6, %struct.HFA4* %p7, %struct.HFA2 inreg %p8.coerce, float %p9)
|
||||
// X32: define dso_local x86_vectorcallcc void @"\01HVAAnywhere@@88"(%struct.HFA2 inreg %p1.coerce, i32 inreg %p2, i32 inreg %p3, float %p4, i32 %p5, i32 %p6, %struct.HFA4* %p7, %struct.HFA2 inreg %p8.coerce, float %p9)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01HVAAnywhere@@112"(%struct.HFA2 inreg %p1.coerce, i32 %p2, i32 %p3, float %p4, i32 %p5, i32 %p6, %struct.HFA4* %p7, %struct.HFA2 inreg %p8.coerce, float %p9)
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@ int function() {
|
|||
return 32;
|
||||
}
|
||||
|
||||
// CHECK-C: define i32 @function() {{.*}} {
|
||||
// CHECK-CXX: define i32 @_Z8functionv() {{.*}} {
|
||||
// CHECK-C: define dso_local i32 @function() {{.*}} {
|
||||
// CHECK-CXX: define dso_local i32 @_Z8functionv() {{.*}} {
|
||||
// CHECK: ret i32 32
|
||||
// CHECK: }
|
||||
|
||||
|
|
|
@ -17,9 +17,9 @@ void call_imported_function() {
|
|||
}
|
||||
|
||||
// CHECK: @import_int = external dllimport global i32
|
||||
// CHECK: @export_int = common dllexport global i32 0, align 4
|
||||
// CHECK: @export_int = common dso_local dllexport global i32 0, align 4
|
||||
|
||||
// CHECK: define dllexport arm_aapcs_vfpcc void @export_implemented_function()
|
||||
// CHECK: define dso_local dllexport arm_aapcs_vfpcc void @export_implemented_function()
|
||||
|
||||
// CHECK: declare dllimport arm_aapcs_vfpcc void @import_function(i32)
|
||||
|
||||
|
|
|
@ -6,11 +6,11 @@ struct f1 {
|
|||
|
||||
struct f1 return_f1(void) { while (1); }
|
||||
|
||||
// CHECK: define i32 @return_f1()
|
||||
// CHECK: define dso_local i32 @return_f1()
|
||||
|
||||
void receive_f1(struct f1 a0) { }
|
||||
|
||||
// CHECK: define void @receive_f1(float %a0.0)
|
||||
// CHECK: define dso_local void @receive_f1(float %a0.0)
|
||||
|
||||
struct f2 {
|
||||
float f;
|
||||
|
@ -19,11 +19,11 @@ struct f2 {
|
|||
|
||||
struct f2 return_f2(void) { while (1); }
|
||||
|
||||
// CHECK: define i64 @return_f2()
|
||||
// CHECK: define dso_local i64 @return_f2()
|
||||
|
||||
void receive_f2(struct f2 a0) { }
|
||||
|
||||
// CHECK: define void @receive_f2(float %a0.0, float %a0.1)
|
||||
// CHECK: define dso_local void @receive_f2(float %a0.0, float %a0.1)
|
||||
|
||||
struct f4 {
|
||||
float f;
|
||||
|
@ -34,9 +34,9 @@ struct f4 {
|
|||
|
||||
struct f4 return_f4(void) { while (1); }
|
||||
|
||||
// CHECK: define void @return_f4(%struct.f4* noalias sret %agg.result)
|
||||
// CHECK: define dso_local void @return_f4(%struct.f4* noalias sret %agg.result)
|
||||
|
||||
void receive_f4(struct f4 a0) { }
|
||||
|
||||
// CHECK: define void @receive_f4(float %a0.0, float %a0.1, float %a0.2, float %a0.3)
|
||||
// CHECK: define dso_local void @receive_f4(float %a0.0, float %a0.1, float %a0.2, float %a0.3)
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ void test_context_error_1() {
|
|||
float *error;
|
||||
context_error_1(&x, &error);
|
||||
}
|
||||
// CHECK-LABEL: define void @test_context_error_1()
|
||||
// CHECK-LABEL: define dso_local void @test_context_error_1()
|
||||
// CHECK: [[X:%.*]] = alloca i32, align 4
|
||||
// CHECK: [[ERROR:%.*]] = alloca float*, align 8
|
||||
// CHECK: [[TEMP:%.*]] = alloca swifterror float*, align 8
|
||||
|
@ -97,7 +97,7 @@ typedef struct {
|
|||
float f1;
|
||||
} struct_1;
|
||||
TEST(struct_1);
|
||||
// CHECK-LABEL: define swiftcc { i64, i64 } @return_struct_1() {{.*}}{
|
||||
// CHECK-LABEL: define dso_local swiftcc { i64, i64 } @return_struct_1() {{.*}}{
|
||||
// CHECK: [[RET:%.*]] = alloca [[STRUCT1:%.*]], align 4
|
||||
// CHECK: [[VAR:%.*]] = alloca [[STRUCT1]], align 4
|
||||
// CHECK: call void @llvm.memset
|
||||
|
@ -111,7 +111,7 @@ TEST(struct_1);
|
|||
// CHECK: [[R1:%.*]] = insertvalue { i64, i64 } [[R0]], i64 [[T1]], 1
|
||||
// CHECK: ret { i64, i64 } [[R1]]
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define swiftcc void @take_struct_1(i64, i64) {{.*}}{
|
||||
// CHECK-LABEL: define dso_local swiftcc void @take_struct_1(i64, i64) {{.*}}{
|
||||
// CHECK: [[V:%.*]] = alloca [[STRUCT1:%.*]], align 4
|
||||
// CHECK: [[CAST:%.*]] = bitcast [[STRUCT1]]* [[V]] to { i64, i64 }*
|
||||
// CHECK: [[GEP0:%.*]] = getelementptr inbounds { i64, i64 }, { i64, i64 }* [[CAST]], i32 0, i32 0
|
||||
|
@ -120,7 +120,7 @@ TEST(struct_1);
|
|||
// CHECK: store i64 %1, i64* [[GEP1]], align 4
|
||||
// CHECK: ret void
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define void @test_struct_1() {{.*}}{
|
||||
// CHECK-LABEL: define dso_local void @test_struct_1() {{.*}}{
|
||||
// CHECK: [[AGG:%.*]] = alloca [[STRUCT1:%.*]], align 4
|
||||
// CHECK: [[RET:%.*]] = call swiftcc { i64, i64 } @return_struct_1()
|
||||
// CHECK: [[CAST:%.*]] = bitcast [[STRUCT1]]* [[AGG]] to { i64, i64 }*
|
||||
|
@ -147,7 +147,7 @@ typedef struct {
|
|||
float f1;
|
||||
} struct_2;
|
||||
TEST(struct_2);
|
||||
// CHECK-LABEL: define swiftcc { i64, i64 } @return_struct_2() {{.*}}{
|
||||
// CHECK-LABEL: define dso_local swiftcc { i64, i64 } @return_struct_2() {{.*}}{
|
||||
// CHECK: [[RET:%.*]] = alloca [[STRUCT2_TYPE]], align 4
|
||||
// CHECK: [[VAR:%.*]] = alloca [[STRUCT2_TYPE]], align 4
|
||||
// CHECK: [[CASTVAR:%.*]] = bitcast {{.*}} [[VAR]]
|
||||
|
@ -164,7 +164,7 @@ TEST(struct_2);
|
|||
// CHECK: [[R1:%.*]] = insertvalue { i64, i64 } [[R0]], i64 [[T1]], 1
|
||||
// CHECK: ret { i64, i64 } [[R1]]
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define swiftcc void @take_struct_2(i64, i64) {{.*}}{
|
||||
// CHECK-LABEL: define dso_local swiftcc void @take_struct_2(i64, i64) {{.*}}{
|
||||
// CHECK: [[V:%.*]] = alloca [[STRUCT:%.*]], align 4
|
||||
// CHECK: [[CAST:%.*]] = bitcast [[STRUCT]]* [[V]] to { i64, i64 }*
|
||||
// CHECK: [[GEP0:%.*]] = getelementptr inbounds { i64, i64 }, { i64, i64 }* [[CAST]], i32 0, i32 0
|
||||
|
@ -173,7 +173,7 @@ TEST(struct_2);
|
|||
// CHECK: store i64 %1, i64* [[GEP1]], align 4
|
||||
// CHECK: ret void
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define void @test_struct_2() {{.*}} {
|
||||
// CHECK-LABEL: define dso_local void @test_struct_2() {{.*}} {
|
||||
// CHECK: [[TMP:%.*]] = alloca [[STRUCT2_TYPE]], align 4
|
||||
// CHECK: [[CALL:%.*]] = call swiftcc { i64, i64 } @return_struct_2()
|
||||
// CHECK: [[CAST_TMP:%.*]] = bitcast [[STRUCT2_TYPE]]* [[TMP]] to { i64, i64 }*
|
||||
|
@ -203,7 +203,7 @@ typedef struct {
|
|||
__attribute__((packed)) float f;
|
||||
} struct_misaligned_1;
|
||||
TEST(struct_misaligned_1)
|
||||
// CHECK-LABEL: define swiftcc i64 @return_struct_misaligned_1()
|
||||
// CHECK-LABEL: define dso_local swiftcc i64 @return_struct_misaligned_1()
|
||||
// CHECK: [[RET:%.*]] = alloca [[STRUCT:%.*]], align 1
|
||||
// CHECK: [[RES:%.*]] = alloca [[STRUCT]], align 1
|
||||
// CHECK: [[CAST:%.*]] = bitcast [[STRUCT]]* [[RES]] to i8*
|
||||
|
@ -216,14 +216,14 @@ TEST(struct_misaligned_1)
|
|||
// CHECK: [[R0:%.*]] = load i64, i64* [[GEP]], align 1
|
||||
// CHECK: ret i64 [[R0]]
|
||||
// CHECK:}
|
||||
// CHECK-LABEL: define swiftcc void @take_struct_misaligned_1(i64) {{.*}}{
|
||||
// CHECK-LABEL: define dso_local swiftcc void @take_struct_misaligned_1(i64) {{.*}}{
|
||||
// CHECK: [[V:%.*]] = alloca [[STRUCT:%.*]], align 1
|
||||
// CHECK: [[CAST:%.*]] = bitcast [[STRUCT]]* [[V]] to { i64 }*
|
||||
// CHECK: [[GEP:%.*]] = getelementptr inbounds { i64 }, { i64 }* [[CAST]], i32 0, i32 0
|
||||
// CHECK: store i64 %0, i64* [[GEP]], align 1
|
||||
// CHECK: ret void
|
||||
// CHECK: }
|
||||
// CHECK: define void @test_struct_misaligned_1() {{.*}}{
|
||||
// CHECK: define dso_local void @test_struct_misaligned_1() {{.*}}{
|
||||
// CHECK: [[AGG:%.*]] = alloca [[STRUCT:%.*]], align 1
|
||||
// CHECK: [[CALL:%.*]] = call swiftcc i64 @return_struct_misaligned_1()
|
||||
// CHECK: [[T0:%.*]] = bitcast [[STRUCT]]* [[AGG]] to { i64 }*
|
||||
|
@ -256,7 +256,7 @@ typedef union {
|
|||
double d;
|
||||
} union_het_fp;
|
||||
TEST(union_het_fp)
|
||||
// CHECK-LABEL: define swiftcc i64 @return_union_het_fp()
|
||||
// CHECK-LABEL: define dso_local swiftcc i64 @return_union_het_fp()
|
||||
// CHECK: [[RET:%.*]] = alloca [[UNION:%.*]], align 8
|
||||
// CHECK: [[RES:%.*]] = alloca [[UNION]], align 8
|
||||
// CHECK: [[CAST:%.*]] = bitcast [[UNION]]* [[RES]] to i8*
|
||||
|
@ -268,14 +268,14 @@ TEST(union_het_fp)
|
|||
// CHECK: [[GEP:%.*]] = getelementptr inbounds { i64 }, { i64 }* [[CAST]], i32 0, i32 0
|
||||
// CHECK: [[R0:%.*]] = load i64, i64* [[GEP]], align 8
|
||||
// CHECK: ret i64 [[R0]]
|
||||
// CHECK-LABEL: define swiftcc void @take_union_het_fp(i64) {{.*}}{
|
||||
// CHECK-LABEL: define dso_local swiftcc void @take_union_het_fp(i64) {{.*}}{
|
||||
// CHECK: [[V:%.*]] = alloca [[UNION:%.*]], align 8
|
||||
// CHECK: [[CAST:%.*]] = bitcast [[UNION]]* [[V]] to { i64 }*
|
||||
// CHECK: [[GEP:%.*]] = getelementptr inbounds { i64 }, { i64 }* [[CAST]], i32 0, i32 0
|
||||
// CHECK: store i64 %0, i64* [[GEP]], align 8
|
||||
// CHECK: ret void
|
||||
// CHECK: }
|
||||
// CHECK-LABEL: define void @test_union_het_fp() {{.*}}{
|
||||
// CHECK-LABEL: define dso_local void @test_union_het_fp() {{.*}}{
|
||||
// CHECK: [[AGG:%.*]] = alloca [[UNION:%.*]], align 8
|
||||
// CHECK: [[CALL:%.*]] = call swiftcc i64 @return_union_het_fp()
|
||||
// CHECK: [[T0:%.*]] = bitcast [[UNION]]* [[AGG]] to { i64 }*
|
||||
|
@ -294,7 +294,7 @@ typedef union {
|
|||
float f2;
|
||||
} union_hom_fp;
|
||||
TEST(union_hom_fp)
|
||||
// CHECK-LABEL: define void @test_union_hom_fp()
|
||||
// CHECK-LABEL: define dso_local void @test_union_hom_fp()
|
||||
// CHECK: [[TMP:%.*]] = alloca [[REC:%.*]], align 4
|
||||
// CHECK: [[CALL:%.*]] = call [[SWIFTCC]] float @return_union_hom_fp()
|
||||
// CHECK: [[CAST_TMP:%.*]] = bitcast [[REC]]* [[TMP]] to [[AGG:{ float }]]*
|
||||
|
@ -311,7 +311,7 @@ typedef union {
|
|||
float4 fv2;
|
||||
} union_hom_fp_partial;
|
||||
TEST(union_hom_fp_partial)
|
||||
// CHECK: define void @test_union_hom_fp_partial()
|
||||
// CHECK: define dso_local void @test_union_hom_fp_partial()
|
||||
// CHECK: [[AGG:%.*]] = alloca [[UNION:%.*]], align 16
|
||||
// CHECK: [[CALL:%.*]] = call swiftcc { i64, i64 } @return_union_hom_fp_partial()
|
||||
// CHECK: [[CAST:%.*]] = bitcast [[UNION]]* [[AGG]] to { i64, i64 }*
|
||||
|
@ -335,7 +335,7 @@ typedef union {
|
|||
float4 fv2;
|
||||
} union_het_fpv_partial;
|
||||
TEST(union_het_fpv_partial)
|
||||
// CHECK-LABEL: define void @test_union_het_fpv_partial()
|
||||
// CHECK-LABEL: define dso_local void @test_union_het_fpv_partial()
|
||||
// CHECK: [[AGG:%.*]] = alloca [[UNION:%.*]], align 16
|
||||
// CHECK: [[CALL:%.*]] = call swiftcc { i64, i64 } @return_union_het_fpv_partial()
|
||||
// CHECK: [[CAST:%.*]] = bitcast [[UNION]]* [[AGG]] to { i64, i64 }*
|
||||
|
@ -385,7 +385,7 @@ TEST(int8)
|
|||
// CHECK: [[T0:%.*]] = getelementptr inbounds [[AGG]], [[AGG]]* [[CAST_TMP]], i32 0, i32 1
|
||||
// CHECK: store <4 x i32> %1, <4 x i32>* [[T0]], align
|
||||
// CHECK: ret void
|
||||
// CHECK-LABEL: define void @test_int8()
|
||||
// CHECK-LABEL: define dso_local void @test_int8()
|
||||
// CHECK: [[TMP1:%.*]] = alloca [[REC]], align
|
||||
// CHECK: [[TMP2:%.*]] = alloca [[REC]], align
|
||||
// CHECK: [[CALL:%.*]] = call [[SWIFTCC]] [[UAGG]] @return_int8()
|
||||
|
@ -429,7 +429,7 @@ TEST(int5)
|
|||
// CHECK: [[T0:%.*]] = getelementptr inbounds [[AGG]], [[AGG]]* [[CAST_TMP]], i32 0, i32 1
|
||||
// CHECK: store i32 %1, i32* [[T0]], align
|
||||
// CHECK: ret void
|
||||
// CHECK-LABEL: define void @test_int5()
|
||||
// CHECK-LABEL: define dso_local void @test_int5()
|
||||
// CHECK: [[TMP1:%.*]] = alloca [[REC]], align
|
||||
// CHECK: [[TMP2:%.*]] = alloca [[REC]], align
|
||||
// CHECK: [[CALL:%.*]] = call [[SWIFTCC]] [[UAGG]] @return_int5()
|
||||
|
@ -455,4 +455,4 @@ typedef struct {
|
|||
int3 v __attribute__((packed));
|
||||
} misaligned_int3;
|
||||
TEST(misaligned_int3)
|
||||
// CHECK-LABEL: define swiftcc void @take_misaligned_int3(i64, i64)
|
||||
// CHECK-LABEL: define dso_local swiftcc void @take_misaligned_int3(i64, i64)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// RUN: %clang_cc1 -w -triple i386-pc-win32 -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
// CHECK-LABEL: define i64 @f1_1()
|
||||
// CHECK-LABEL: define void @f1_2(i32 %a0.0, i32 %a0.1)
|
||||
// CHECK-LABEL: define dso_local i64 @f1_1()
|
||||
// CHECK-LABEL: define dso_local void @f1_2(i32 %a0.0, i32 %a0.1)
|
||||
struct s1 {
|
||||
int a;
|
||||
int b;
|
||||
|
@ -9,37 +9,37 @@ struct s1 {
|
|||
struct s1 f1_1(void) { while (1) {} }
|
||||
void f1_2(struct s1 a0) {}
|
||||
|
||||
// CHECK-LABEL: define i32 @f2_1()
|
||||
// CHECK-LABEL: define dso_local i32 @f2_1()
|
||||
struct s2 {
|
||||
short a;
|
||||
short b;
|
||||
};
|
||||
struct s2 f2_1(void) { while (1) {} }
|
||||
|
||||
// CHECK-LABEL: define i16 @f3_1()
|
||||
// CHECK-LABEL: define dso_local i16 @f3_1()
|
||||
struct s3 {
|
||||
char a;
|
||||
char b;
|
||||
};
|
||||
struct s3 f3_1(void) { while (1) {} }
|
||||
|
||||
// CHECK-LABEL: define i8 @f4_1()
|
||||
// CHECK-LABEL: define dso_local i8 @f4_1()
|
||||
struct s4 {
|
||||
char a:4;
|
||||
char b:4;
|
||||
};
|
||||
struct s4 f4_1(void) { while (1) {} }
|
||||
|
||||
// CHECK-LABEL: define i64 @f5_1()
|
||||
// CHECK-LABEL: define void @f5_2(double %a0.0)
|
||||
// CHECK-LABEL: define dso_local i64 @f5_1()
|
||||
// CHECK-LABEL: define dso_local void @f5_2(double %a0.0)
|
||||
struct s5 {
|
||||
double a;
|
||||
};
|
||||
struct s5 f5_1(void) { while (1) {} }
|
||||
void f5_2(struct s5 a0) {}
|
||||
|
||||
// CHECK-LABEL: define i32 @f6_1()
|
||||
// CHECK-LABEL: define void @f6_2(float %a0.0)
|
||||
// CHECK-LABEL: define dso_local i32 @f6_1()
|
||||
// CHECK-LABEL: define dso_local void @f6_2(float %a0.0)
|
||||
struct s6 {
|
||||
float a;
|
||||
};
|
||||
|
|
|
@ -17,15 +17,15 @@ typedef struct { } ZeroSized;
|
|||
// CHECK: ret void
|
||||
Big returnBig(Big x) { return x; }
|
||||
|
||||
// CHECK-PCC-LABEL: define void @returnSmall
|
||||
// CHECK-PCC-LABEL: define {{(dso_local )?}}void @returnSmall
|
||||
// CHECK-PCC: ret void
|
||||
// CHECK-REG-LABEL: define i32 @returnSmall
|
||||
// CHECK-REG-LABEL: define {{(dso_local )?}}i32 @returnSmall
|
||||
// CHECK-REG: ret i32
|
||||
Small returnSmall(Small x) { return x; }
|
||||
|
||||
// CHECK-PCC-LABEL: define void @returnShort
|
||||
// CHECK-PCC-LABEL: define {{(dso_local )?}}void @returnShort
|
||||
// CHECK-PCC: ret void
|
||||
// CHECK-REG-LABEL: define i16 @returnShort
|
||||
// CHECK-REG-LABEL: define {{(dso_local )?}}i16 @returnShort
|
||||
// CHECK-REG: ret i16
|
||||
Short returnShort(Short x) { return x; }
|
||||
|
||||
|
|
|
@ -3,29 +3,29 @@
|
|||
// To be ABI compatible with code generated by MSVC, there shouldn't be any
|
||||
// sign/zero extensions on types smaller than 64bit.
|
||||
|
||||
// CHECK-LABEL: define void @f1(i8 %a)
|
||||
// CHECK-LABEL: define dso_local void @f1(i8 %a)
|
||||
void f1(char a) {}
|
||||
|
||||
// CHECK-LABEL: define void @f2(i8 %a)
|
||||
// CHECK-LABEL: define dso_local void @f2(i8 %a)
|
||||
void f2(unsigned char a) {}
|
||||
|
||||
// CHECK-LABEL: define void @f3(i16 %a)
|
||||
// CHECK-LABEL: define dso_local void @f3(i16 %a)
|
||||
void f3(short a) {}
|
||||
|
||||
// CHECK-LABEL: define void @f4(i16 %a)
|
||||
// CHECK-LABEL: define dso_local void @f4(i16 %a)
|
||||
void f4(unsigned short a) {}
|
||||
|
||||
// For ABI compatibility with ICC, _Complex should be passed/returned
|
||||
// as if it were a struct with two elements.
|
||||
|
||||
// CHECK-LABEL: define void @f5(i64 %a.coerce)
|
||||
// CHECK-LABEL: define dso_local void @f5(i64 %a.coerce)
|
||||
void f5(_Complex float a) {}
|
||||
|
||||
// CHECK-LABEL: define void @f6({ double, double }* %a)
|
||||
// CHECK-LABEL: define dso_local void @f6({ double, double }* %a)
|
||||
void f6(_Complex double a) {}
|
||||
|
||||
// CHECK-LABEL: define i64 @f7()
|
||||
// CHECK-LABEL: define dso_local i64 @f7()
|
||||
_Complex float f7() { return 1.0; }
|
||||
|
||||
// CHECK-LABEL: define void @f8({ double, double }* noalias sret %agg.result)
|
||||
// CHECK-LABEL: define dso_local void @f8({ double, double }* noalias sret %agg.result)
|
||||
_Complex double f8() { return 1.0; }
|
||||
|
|
|
@ -6,13 +6,13 @@ extern void __declspec(dllimport) fun();
|
|||
|
||||
extern int *varp;
|
||||
int *varp = &var;
|
||||
// CHECK-DAG: @"\01?varp@@3PAHA" = global i32* null
|
||||
// X64-DAG: @"\01?varp@@3PEAHEA" = global i32* null
|
||||
// CHECK-DAG: @"\01?varp@@3PAHA" = dso_local global i32* null
|
||||
// X64-DAG: @"\01?varp@@3PEAHEA" = dso_local global i32* null
|
||||
|
||||
extern void (*funp)();
|
||||
void (*funp)() = &fun;
|
||||
// CHECK-DAG: @"\01?funp@@3P6AXXZA" = global void ()* null
|
||||
// X64-DAG: @"\01?funp@@3P6AXXZEA" = global void ()* null
|
||||
// CHECK-DAG: @"\01?funp@@3P6AXXZA" = dso_local global void ()* null
|
||||
// X64-DAG: @"\01?funp@@3P6AXXZEA" = dso_local global void ()* null
|
||||
|
||||
// CHECK-LABEL: @"\01??__Evarp@@YAXXZ"
|
||||
// CHECK-DAG: store i32* @"\01?var@@3HA", i32** @"\01?varp@@3PAHA"
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
struct __declspec(dllexport) SomeStruct {
|
||||
// Copy assignment operator should be produced, and exported:
|
||||
// M32: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.SomeStruct* @"\01??4SomeStruct@@QAEAAU0@ABU0@@Z"
|
||||
// M64: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.SomeStruct* @"\01??4SomeStruct@@QEAAAEAU0@AEBU0@@Z"
|
||||
// M32: define weak_odr dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.SomeStruct* @"\01??4SomeStruct@@QAEAAU0@ABU0@@Z"
|
||||
// M64: define weak_odr dso_local dllexport dereferenceable({{[0-9]+}}) %struct.SomeStruct* @"\01??4SomeStruct@@QEAAAEAU0@AEBU0@@Z"
|
||||
_Atomic(int) mData;
|
||||
};
|
||||
|
|
|
@ -26,10 +26,10 @@ static void foo9(int *a) __attribute__((interrupt)) {}
|
|||
// X86_LINUX: define x86_intrcc void @{{.*}}foo8{{.*}}(i32* %{{.+}})
|
||||
// X86_LINUX: define linkonce_odr x86_intrcc void @{{.*}}foo9{{.*}}(i32* %{{.+}})
|
||||
// X86_64_WIN: @llvm.used = appending global [3 x i8*] [i8* bitcast (void (i32*, i64)* @{{.*}}foo7{{.*}} to i8*), i8* bitcast (void (i32*)* @{{.*}}foo8{{.*}} to i8*), i8* bitcast (void (i32*)* @{{.*}}foo9{{.*}} to i8*)], section "llvm.metadata"
|
||||
// X86_64_WIN: define x86_intrcc void @{{.*}}foo7{{.*}}(i32* %{{.+}}, i64 %{{.+}})
|
||||
// X86_64_WIN: define x86_intrcc void @{{.*}}foo8{{.*}}(i32* %{{.+}})
|
||||
// X86_64_WIN: define linkonce_odr x86_intrcc void @{{.*}}foo9{{.*}}(i32* %{{.+}})
|
||||
// X86_64_WIN: define dso_local x86_intrcc void @{{.*}}foo7{{.*}}(i32* %{{.+}}, i64 %{{.+}})
|
||||
// X86_64_WIN: define dso_local x86_intrcc void @{{.*}}foo8{{.*}}(i32* %{{.+}})
|
||||
// X86_64_WIN: define linkonce_odr dso_local x86_intrcc void @{{.*}}foo9{{.*}}(i32* %{{.+}})
|
||||
// X86_WIN: @llvm.used = appending global [3 x i8*] [i8* bitcast (void (i32*, i32)* @{{.*}}foo7{{.*}} to i8*), i8* bitcast (void (i32*)* @{{.*}}foo8{{.*}} to i8*), i8* bitcast (void (i32*)* @{{.*}}foo9{{.*}} to i8*)], section "llvm.metadata"
|
||||
// X86_WIN: define x86_intrcc void @{{.*}}foo7{{.*}}(i32* %{{.+}}, i32 %{{.+}})
|
||||
// X86_WIN: define x86_intrcc void @{{.*}}foo8{{.*}}(i32* %{{.+}})
|
||||
// X86_WIN: define linkonce_odr x86_intrcc void @{{.*}}foo9{{.*}}(i32* %{{.+}})
|
||||
// X86_WIN: define dso_local x86_intrcc void @{{.*}}foo7{{.*}}(i32* %{{.+}}, i32 %{{.+}})
|
||||
// X86_WIN: define dso_local x86_intrcc void @{{.*}}foo8{{.*}}(i32* %{{.+}})
|
||||
// X86_WIN: define linkonce_odr dso_local x86_intrcc void @{{.*}}foo9{{.*}}(i32* %{{.+}})
|
||||
|
|
|
@ -45,8 +45,8 @@ B::~B() { }
|
|||
// CHECKIOS5-LABEL: define %class.B* @_ZN1BD2Ev(%class.B* %this)
|
||||
// CHECKIOS5-LABEL: define %class.B* @_ZN1BD1Ev(%class.B* %this)
|
||||
|
||||
// CHECKMS-LABEL: define x86_thiscallcc %class.B* @"\01??0B@@QAE@PAH@Z"(%class.B* returned %this, i32* %i)
|
||||
// CHECKMS-LABEL: define x86_thiscallcc void @"\01??1B@@UAE@XZ"(%class.B* %this)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc %class.B* @"\01??0B@@QAE@PAH@Z"(%class.B* returned %this, i32* %i)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc void @"\01??1B@@UAE@XZ"(%class.B* %this)
|
||||
|
||||
class C : public A, public B {
|
||||
public:
|
||||
|
@ -83,8 +83,8 @@ C::~C() { }
|
|||
// CHECKIOS5-LABEL: define void @_ZN1CD0Ev(%class.C* %this)
|
||||
// CHECKIOS5-LABEL: define void @_ZThn8_N1CD0Ev(%class.C* %this)
|
||||
|
||||
// CHECKMS-LABEL: define x86_thiscallcc %class.C* @"\01??0C@@QAE@PAHPAD@Z"(%class.C* returned %this, i32* %i, i8* %c)
|
||||
// CHECKMS-LABEL: define x86_thiscallcc void @"\01??1C@@UAE@XZ"(%class.C* %this)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc %class.C* @"\01??0C@@QAE@PAHPAD@Z"(%class.C* returned %this, i32* %i, i8* %c)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc void @"\01??1C@@UAE@XZ"(%class.C* %this)
|
||||
|
||||
class D : public virtual A {
|
||||
public:
|
||||
|
@ -110,8 +110,8 @@ D::~D() { }
|
|||
// CHECKIOS5-LABEL: define %class.D* @_ZN1DD2Ev(%class.D* %this, i8** %vtt)
|
||||
// CHECKIOS5-LABEL: define %class.D* @_ZN1DD1Ev(%class.D* %this)
|
||||
|
||||
// CHECKMS-LABEL: define x86_thiscallcc %class.D* @"\01??0D@@QAE@XZ"(%class.D* returned %this, i32 %is_most_derived)
|
||||
// CHECKMS-LABEL: define x86_thiscallcc void @"\01??1D@@UAE@XZ"(%class.D* %this)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc %class.D* @"\01??0D@@QAE@XZ"(%class.D* returned %this, i32 %is_most_derived)
|
||||
// CHECKMS-LABEL: define dso_local x86_thiscallcc void @"\01??1D@@UAE@XZ"(%class.D* %this)
|
||||
|
||||
class E {
|
||||
public:
|
||||
|
|
|
@ -14,5 +14,5 @@ A::A() {}
|
|||
|
||||
A::~A() {}
|
||||
|
||||
// CHECK: @_ZN1AC1Ev = dllexport alias void (%class.A*), void (%class.A*)* @_ZN1AC2Ev
|
||||
// CHECK: @_ZN1AD1Ev = dllexport alias void (%class.A*), void (%class.A*)* @_ZN1AD2Ev
|
||||
// CHECK: @_ZN1AC1Ev = dso_local dllexport alias void (%class.A*), void (%class.A*)* @_ZN1AC2Ev
|
||||
// CHECK: @_ZN1AD1Ev = dso_local dllexport alias void (%class.A*), void (%class.A*)* @_ZN1AD2Ev
|
||||
|
|
|
@ -77,6 +77,6 @@ struct __declspec(dllexport) CtorClosureOutOfLine {
|
|||
CtorClosureOutOfLine::CtorClosureOutOfLine(const HasImplicitDtor2 &v) {}
|
||||
|
||||
// CHECK-LABEL: define weak_odr dllexport x86_thiscallcc void @"\01??_FCtorClosureInline@@QAEXXZ"
|
||||
// CHECK-LABEL: define linkonce_odr x86_thiscallcc void @"\01??1HasImplicitDtor1@@QAE@XZ"
|
||||
// CHECK-LABEL: define linkonce_odr dso_local x86_thiscallcc void @"\01??1HasImplicitDtor1@@QAE@XZ"
|
||||
// CHECK-LABEL: define weak_odr dllexport x86_thiscallcc void @"\01??_FCtorClosureOutOfLine@@QAEXXZ"
|
||||
// CHECK-LABEL: define linkonce_odr x86_thiscallcc void @"\01??1HasImplicitDtor2@@QAE@XZ"
|
||||
// CHECK-LABEL: define linkonce_odr dso_local x86_thiscallcc void @"\01??1HasImplicitDtor2@@QAE@XZ"
|
||||
|
|
|
@ -6,5 +6,5 @@ struct __declspec(dllexport) C : A, B { virtual ~C(); };
|
|||
C::~C() {}
|
||||
|
||||
// This thunk should *not* be dllexport.
|
||||
// CHECK: define linkonce_odr i8* @"\01??_EC@@W7EAAPEAXI@Z"
|
||||
// CHECK: define dllexport void @"\01??1C@@UEAA@XZ"
|
||||
// CHECK: define linkonce_odr dso_local i8* @"\01??_EC@@W7EAAPEAXI@Z"
|
||||
// CHECK: define dso_local dllexport void @"\01??1C@@UEAA@XZ"
|
||||
|
|
|
@ -26,101 +26,101 @@ extern "C" void free(void* p);
|
|||
struct ExportMembers {
|
||||
struct Nested;
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?normalDef@ExportMembers@@QAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define dllexport void @"\01?normalDef@ExportMembers@@QEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?normalInclass@ExportMembers@@QAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?normalInclass@ExportMembers@@QEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?normalInlineDef@ExportMembers@@QAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?normalInlineDef@ExportMembers@@QEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?normalInlineDecl@ExportMembers@@QAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?normalInlineDecl@ExportMembers@@QEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN13ExportMembers9normalDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define dllexport void @_ZN13ExportMembers9normalDefEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers13normalInclassEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers13normalInclassEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers15normalInlineDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers15normalInlineDefEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers16normalInlineDeclEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers16normalInlineDeclEv(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define linkonce_odr x86_thiscallcc void @"\01?referencedNonExportedInClass@ExportMembers@@QAEXXZ"
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?normalDef@ExportMembers@@QAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?normalDef@ExportMembers@@QEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?normalInclass@ExportMembers@@QAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?normalInclass@ExportMembers@@QEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?normalInlineDef@ExportMembers@@QAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?normalInlineDef@ExportMembers@@QEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?normalInlineDecl@ExportMembers@@QAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?normalInlineDecl@ExportMembers@@QEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers9normalDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers9normalDefEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers13normalInclassEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers13normalInclassEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers15normalInlineDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers15normalInlineDefEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers16normalInlineDeclEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers16normalInlineDeclEv(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define linkonce_odr dso_local x86_thiscallcc void @"\01?referencedNonExportedInClass@ExportMembers@@QAEXXZ"
|
||||
__declspec(dllexport) void normalDef();
|
||||
__declspec(dllexport) void normalInclass() { referencedNonExportedInClass(); }
|
||||
__declspec(dllexport) void normalInlineDef();
|
||||
__declspec(dllexport) inline void normalInlineDecl();
|
||||
void referencedNonExportedInClass() {}
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?virtualDef@ExportMembers@@UAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define dllexport void @"\01?virtualDef@ExportMembers@@UEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?virtualInclass@ExportMembers@@UAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?virtualInclass@ExportMembers@@UEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?virtualInlineDef@ExportMembers@@UAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?virtualInlineDef@ExportMembers@@UEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?virtualInlineDecl@ExportMembers@@UAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?virtualInlineDecl@ExportMembers@@UEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN13ExportMembers10virtualDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define dllexport void @_ZN13ExportMembers10virtualDefEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers14virtualInclassEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers14virtualInclassEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers16virtualInlineDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers16virtualInlineDefEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers17virtualInlineDeclEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers17virtualInlineDeclEv(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?virtualDef@ExportMembers@@UAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?virtualDef@ExportMembers@@UEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?virtualInclass@ExportMembers@@UAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?virtualInclass@ExportMembers@@UEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?virtualInlineDef@ExportMembers@@UAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?virtualInlineDef@ExportMembers@@UEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?virtualInlineDecl@ExportMembers@@UAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?virtualInlineDecl@ExportMembers@@UEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers10virtualDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers10virtualDefEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers14virtualInclassEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers14virtualInclassEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers16virtualInlineDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers16virtualInlineDefEv(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers17virtualInlineDeclEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers17virtualInlineDeclEv(%struct.ExportMembers* %this)
|
||||
__declspec(dllexport) virtual void virtualDef();
|
||||
__declspec(dllexport) virtual void virtualInclass() {}
|
||||
__declspec(dllexport) virtual void virtualInlineDef();
|
||||
__declspec(dllexport) virtual inline void virtualInlineDecl();
|
||||
|
||||
// MSC-DAG: define dllexport void @"\01?staticDef@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01?staticInclass@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01?staticInlineDef@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01?staticInlineDecl@ExportMembers@@SAXXZ"()
|
||||
// GNU-DAG: define dllexport void @_ZN13ExportMembers9staticDefEv()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN13ExportMembers13staticInclassEv()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN13ExportMembers15staticInlineDefEv()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN13ExportMembers16staticInlineDeclEv()
|
||||
// MSC-DAG: define dso_local dllexport void @"\01?staticDef@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01?staticInclass@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01?staticInlineDef@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01?staticInlineDecl@ExportMembers@@SAXXZ"()
|
||||
// GNU-DAG: define dso_local dllexport void @_ZN13ExportMembers9staticDefEv()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers13staticInclassEv()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers15staticInlineDefEv()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers16staticInlineDeclEv()
|
||||
__declspec(dllexport) static void staticDef();
|
||||
__declspec(dllexport) static void staticInclass() {}
|
||||
__declspec(dllexport) static void staticInlineDef();
|
||||
__declspec(dllexport) static inline void staticInlineDecl();
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?protectedDef@ExportMembers@@IAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define dllexport void @"\01?protectedDef@ExportMembers@@IEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN13ExportMembers12protectedDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define dllexport void @_ZN13ExportMembers12protectedDefEv(%struct.ExportMembers* %this)
|
||||
// MSC-DAG: define dllexport void @"\01?protectedStaticDef@ExportMembers@@KAXXZ"()
|
||||
// GNU-DAG: define dllexport void @_ZN13ExportMembers18protectedStaticDefEv()
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?protectedDef@ExportMembers@@IAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?protectedDef@ExportMembers@@IEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers12protectedDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers12protectedDefEv(%struct.ExportMembers* %this)
|
||||
// MSC-DAG: define dso_local dllexport void @"\01?protectedStaticDef@ExportMembers@@KAXXZ"()
|
||||
// GNU-DAG: define dso_local dllexport void @_ZN13ExportMembers18protectedStaticDefEv()
|
||||
protected:
|
||||
__declspec(dllexport) void protectedDef();
|
||||
__declspec(dllexport) static void protectedStaticDef();
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?privateDef@ExportMembers@@AAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define dllexport void @"\01?privateDef@ExportMembers@@AEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN13ExportMembers10privateDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define dllexport void @_ZN13ExportMembers10privateDefEv(%struct.ExportMembers* %this)
|
||||
// MSC-DAG: define dllexport void @"\01?privateStaticDef@ExportMembers@@CAXXZ"()
|
||||
// GNU-DAG: define dllexport void @_ZN13ExportMembers16privateStaticDefEv()
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?privateDef@ExportMembers@@AAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?privateDef@ExportMembers@@AEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers10privateDefEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers10privateDefEv(%struct.ExportMembers* %this)
|
||||
// MSC-DAG: define dso_local dllexport void @"\01?privateStaticDef@ExportMembers@@CAXXZ"()
|
||||
// GNU-DAG: define dso_local dllexport void @_ZN13ExportMembers16privateStaticDefEv()
|
||||
private:
|
||||
__declspec(dllexport) void privateDef();
|
||||
__declspec(dllexport) static void privateStaticDef();
|
||||
|
||||
// M32-DAG: define x86_thiscallcc void @"\01?ignored@ExportMembers@@QAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define void @"\01?ignored@ExportMembers@@QEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define x86_thiscallcc void @_ZN13ExportMembers7ignoredEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define void @_ZN13ExportMembers7ignoredEv(%struct.ExportMembers* %this)
|
||||
// M32-DAG: define dso_local x86_thiscallcc void @"\01?ignored@ExportMembers@@QAEXXZ"(%struct.ExportMembers* %this)
|
||||
// M64-DAG: define dso_local void @"\01?ignored@ExportMembers@@QEAAXXZ"(%struct.ExportMembers* %this)
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ExportMembers7ignoredEv(%struct.ExportMembers* %this)
|
||||
// G64-DAG: define dso_local void @_ZN13ExportMembers7ignoredEv(%struct.ExportMembers* %this)
|
||||
public:
|
||||
void ignored();
|
||||
|
||||
// MSC-DAG: @"\01?StaticField@ExportMembers@@2HA" = dllexport global i32 1, align 4
|
||||
// MSC-DAG: @"\01?StaticConstField@ExportMembers@@2HB" = dllexport constant i32 1, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldEqualInit@ExportMembers@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldBraceInit@ExportMembers@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldRefNotDef@ExportMembers@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?ConstexprField@ExportMembers@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers11StaticFieldE = dllexport global i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers16StaticConstFieldE = dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers25StaticConstFieldEqualInitE = dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers25StaticConstFieldBraceInitE = dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers14ConstexprFieldE = dllexport constant i32 1, align 4
|
||||
// MSC-DAG: @"\01?StaticField@ExportMembers@@2HA" = dso_local dllexport global i32 1, align 4
|
||||
// MSC-DAG: @"\01?StaticConstField@ExportMembers@@2HB" = dso_local dllexport constant i32 1, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldEqualInit@ExportMembers@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldBraceInit@ExportMembers@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldRefNotDef@ExportMembers@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?ConstexprField@ExportMembers@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers11StaticFieldE = dso_local dllexport global i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers16StaticConstFieldE = dso_local dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers25StaticConstFieldEqualInitE = dso_local dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers25StaticConstFieldBraceInitE = dso_local dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers14ConstexprFieldE = dso_local dllexport constant i32 1, align 4
|
||||
__declspec(dllexport) static int StaticField;
|
||||
__declspec(dllexport) static const int StaticConstField;
|
||||
__declspec(dllexport) static const int StaticConstFieldEqualInit = 1;
|
||||
|
@ -154,99 +154,99 @@ constexpr int ExportMembers::ConstexprField;
|
|||
|
||||
// Export individual members of a nested class.
|
||||
struct ExportMembers::Nested {
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?normalDef@Nested@ExportMembers@@QAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define dllexport void @"\01?normalDef@Nested@ExportMembers@@QEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?normalInclass@Nested@ExportMembers@@QAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?normalInclass@Nested@ExportMembers@@QEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?normalInlineDef@Nested@ExportMembers@@QAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?normalInlineDef@Nested@ExportMembers@@QEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?normalInlineDecl@Nested@ExportMembers@@QAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?normalInlineDecl@Nested@ExportMembers@@QEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested9normalDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define dllexport void @_ZN13ExportMembers6Nested9normalDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested13normalInclassEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers6Nested13normalInclassEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested15normalInlineDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers6Nested15normalInlineDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested16normalInlineDeclEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers6Nested16normalInlineDeclEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?normalDef@Nested@ExportMembers@@QAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?normalDef@Nested@ExportMembers@@QEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?normalInclass@Nested@ExportMembers@@QAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?normalInclass@Nested@ExportMembers@@QEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?normalInlineDef@Nested@ExportMembers@@QAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?normalInlineDef@Nested@ExportMembers@@QEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?normalInlineDecl@Nested@ExportMembers@@QAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?normalInlineDecl@Nested@ExportMembers@@QEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested9normalDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested9normalDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested13normalInclassEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested13normalInclassEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested15normalInlineDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested15normalInlineDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested16normalInlineDeclEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested16normalInlineDeclEv(%"struct.ExportMembers::Nested"* %this)
|
||||
__declspec(dllexport) void normalDef();
|
||||
__declspec(dllexport) void normalInclass() {}
|
||||
__declspec(dllexport) void normalInlineDef();
|
||||
__declspec(dllexport) inline void normalInlineDecl();
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?virtualDef@Nested@ExportMembers@@UAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define dllexport void @"\01?virtualDef@Nested@ExportMembers@@UEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?virtualInclass@Nested@ExportMembers@@UAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?virtualInclass@Nested@ExportMembers@@UEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?virtualInlineDef@Nested@ExportMembers@@UAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?virtualInlineDef@Nested@ExportMembers@@UEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?virtualInlineDecl@Nested@ExportMembers@@UAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01?virtualInlineDecl@Nested@ExportMembers@@UEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested10virtualDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define dllexport void @_ZN13ExportMembers6Nested10virtualDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested14virtualInclassEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers6Nested14virtualInclassEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested16virtualInlineDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers6Nested16virtualInlineDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested17virtualInlineDeclEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN13ExportMembers6Nested17virtualInlineDeclEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?virtualDef@Nested@ExportMembers@@UAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?virtualDef@Nested@ExportMembers@@UEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?virtualInclass@Nested@ExportMembers@@UAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?virtualInclass@Nested@ExportMembers@@UEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?virtualInlineDef@Nested@ExportMembers@@UAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?virtualInlineDef@Nested@ExportMembers@@UEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?virtualInlineDecl@Nested@ExportMembers@@UAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01?virtualInlineDecl@Nested@ExportMembers@@UEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested10virtualDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested10virtualDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested14virtualInclassEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested14virtualInclassEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested16virtualInlineDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested16virtualInlineDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested17virtualInlineDeclEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested17virtualInlineDeclEv(%"struct.ExportMembers::Nested"* %this)
|
||||
__declspec(dllexport) virtual void virtualDef();
|
||||
__declspec(dllexport) virtual void virtualInclass() {}
|
||||
__declspec(dllexport) virtual void virtualInlineDef();
|
||||
__declspec(dllexport) virtual inline void virtualInlineDecl();
|
||||
|
||||
// MSC-DAG: define dllexport void @"\01?staticDef@Nested@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01?staticInclass@Nested@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01?staticInlineDef@Nested@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01?staticInlineDecl@Nested@ExportMembers@@SAXXZ"()
|
||||
// GNU-DAG: define dllexport void @_ZN13ExportMembers6Nested9staticDefEv()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN13ExportMembers6Nested13staticInclassEv()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN13ExportMembers6Nested15staticInlineDefEv()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN13ExportMembers6Nested16staticInlineDeclEv()
|
||||
// MSC-DAG: define dso_local dllexport void @"\01?staticDef@Nested@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01?staticInclass@Nested@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01?staticInlineDef@Nested@ExportMembers@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01?staticInlineDecl@Nested@ExportMembers@@SAXXZ"()
|
||||
// GNU-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested9staticDefEv()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested13staticInclassEv()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested15staticInlineDefEv()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN13ExportMembers6Nested16staticInlineDeclEv()
|
||||
__declspec(dllexport) static void staticDef();
|
||||
__declspec(dllexport) static void staticInclass() {}
|
||||
__declspec(dllexport) static void staticInlineDef();
|
||||
__declspec(dllexport) static inline void staticInlineDecl();
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?protectedDef@Nested@ExportMembers@@IAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define dllexport void @"\01?protectedDef@Nested@ExportMembers@@IEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested12protectedDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define dllexport void @_ZN13ExportMembers6Nested12protectedDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// MSC-DAG: define dllexport void @"\01?protectedStaticDef@Nested@ExportMembers@@KAXXZ"()
|
||||
// GNU-DAG: define dllexport void @_ZN13ExportMembers6Nested18protectedStaticDefEv()
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?protectedDef@Nested@ExportMembers@@IAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?protectedDef@Nested@ExportMembers@@IEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested12protectedDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested12protectedDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// MSC-DAG: define dso_local dllexport void @"\01?protectedStaticDef@Nested@ExportMembers@@KAXXZ"()
|
||||
// GNU-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested18protectedStaticDefEv()
|
||||
protected:
|
||||
__declspec(dllexport) void protectedDef();
|
||||
__declspec(dllexport) static void protectedStaticDef();
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?privateDef@Nested@ExportMembers@@AAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define dllexport void @"\01?privateDef@Nested@ExportMembers@@AEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested10privateDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define dllexport void @_ZN13ExportMembers6Nested10privateDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// MSC-DAG: define dllexport void @"\01?privateStaticDef@Nested@ExportMembers@@CAXXZ"()
|
||||
// GNU-DAG: define dllexport void @_ZN13ExportMembers6Nested16privateStaticDefEv()
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?privateDef@Nested@ExportMembers@@AAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?privateDef@Nested@ExportMembers@@AEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN13ExportMembers6Nested10privateDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested10privateDefEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// MSC-DAG: define dso_local dllexport void @"\01?privateStaticDef@Nested@ExportMembers@@CAXXZ"()
|
||||
// GNU-DAG: define dso_local dllexport void @_ZN13ExportMembers6Nested16privateStaticDefEv()
|
||||
private:
|
||||
__declspec(dllexport) void privateDef();
|
||||
__declspec(dllexport) static void privateStaticDef();
|
||||
|
||||
// M32-DAG: define x86_thiscallcc void @"\01?ignored@Nested@ExportMembers@@QAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define void @"\01?ignored@Nested@ExportMembers@@QEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define x86_thiscallcc void @_ZN13ExportMembers6Nested7ignoredEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define void @_ZN13ExportMembers6Nested7ignoredEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// M32-DAG: define dso_local x86_thiscallcc void @"\01?ignored@Nested@ExportMembers@@QAEXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// M64-DAG: define dso_local void @"\01?ignored@Nested@ExportMembers@@QEAAXXZ"(%"struct.ExportMembers::Nested"* %this)
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ExportMembers6Nested7ignoredEv(%"struct.ExportMembers::Nested"* %this)
|
||||
// G64-DAG: define dso_local void @_ZN13ExportMembers6Nested7ignoredEv(%"struct.ExportMembers::Nested"* %this)
|
||||
public:
|
||||
void ignored();
|
||||
|
||||
// MSC-DAG: @"\01?StaticField@Nested@ExportMembers@@2HA" = dllexport global i32 1, align 4
|
||||
// MSC-DAG: @"\01?StaticConstField@Nested@ExportMembers@@2HB" = dllexport constant i32 1, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldEqualInit@Nested@ExportMembers@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldBraceInit@Nested@ExportMembers@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldRefNotDef@Nested@ExportMembers@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?ConstexprField@Nested@ExportMembers@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers6Nested11StaticFieldE = dllexport global i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers6Nested16StaticConstFieldE = dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers6Nested25StaticConstFieldEqualInitE = dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers6Nested25StaticConstFieldBraceInitE = dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers6Nested14ConstexprFieldE = dllexport constant i32 1, align 4
|
||||
// MSC-DAG: @"\01?StaticField@Nested@ExportMembers@@2HA" = dso_local dllexport global i32 1, align 4
|
||||
// MSC-DAG: @"\01?StaticConstField@Nested@ExportMembers@@2HB" = dso_local dllexport constant i32 1, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldEqualInit@Nested@ExportMembers@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldBraceInit@Nested@ExportMembers@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?StaticConstFieldRefNotDef@Nested@ExportMembers@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01?ConstexprField@Nested@ExportMembers@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers6Nested11StaticFieldE = dso_local dllexport global i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers6Nested16StaticConstFieldE = dso_local dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers6Nested25StaticConstFieldEqualInitE = dso_local dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers6Nested25StaticConstFieldBraceInitE = dso_local dllexport constant i32 1, align 4
|
||||
// GNU-DAG: @_ZN13ExportMembers6Nested14ConstexprFieldE = dso_local dllexport constant i32 1, align 4
|
||||
__declspec(dllexport) static int StaticField;
|
||||
__declspec(dllexport) static const int StaticConstField;
|
||||
__declspec(dllexport) static const int StaticConstFieldEqualInit = 1;
|
||||
|
@ -280,48 +280,48 @@ constexpr int ExportMembers::Nested::ConstexprField;
|
|||
|
||||
// Export special member functions.
|
||||
struct ExportSpecials {
|
||||
// M32-DAG: define dllexport x86_thiscallcc %struct.ExportSpecials* @"\01??0ExportSpecials@@QAE@XZ"(%struct.ExportSpecials* returned %this)
|
||||
// M64-DAG: define dllexport %struct.ExportSpecials* @"\01??0ExportSpecials@@QEAA@XZ"(%struct.ExportSpecials* returned %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1Ev(%struct.ExportSpecials* %this)
|
||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC1Ev(%struct.ExportSpecials* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2Ev(%struct.ExportSpecials* %this)
|
||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC2Ev(%struct.ExportSpecials* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportSpecials* @"\01??0ExportSpecials@@QAE@XZ"(%struct.ExportSpecials* returned %this)
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportSpecials* @"\01??0ExportSpecials@@QEAA@XZ"(%struct.ExportSpecials* returned %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1Ev(%struct.ExportSpecials* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1Ev(%struct.ExportSpecials* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2Ev(%struct.ExportSpecials* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC2Ev(%struct.ExportSpecials* %this)
|
||||
__declspec(dllexport) ExportSpecials();
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01??1ExportSpecials@@QAE@XZ"(%struct.ExportSpecials* %this)
|
||||
// M64-DAG: define dllexport void @"\01??1ExportSpecials@@QEAA@XZ"(%struct.ExportSpecials* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsD1Ev(%struct.ExportSpecials* %this)
|
||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsD1Ev(%struct.ExportSpecials* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsD2Ev(%struct.ExportSpecials* %this)
|
||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsD2Ev(%struct.ExportSpecials* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01??1ExportSpecials@@QAE@XZ"(%struct.ExportSpecials* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01??1ExportSpecials@@QEAA@XZ"(%struct.ExportSpecials* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsD1Ev(%struct.ExportSpecials* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsD1Ev(%struct.ExportSpecials* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsD2Ev(%struct.ExportSpecials* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsD2Ev(%struct.ExportSpecials* %this)
|
||||
__declspec(dllexport) ~ExportSpecials();
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc %struct.ExportSpecials* @"\01??0ExportSpecials@@QAE@ABU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dllexport %struct.ExportSpecials* @"\01??0ExportSpecials@@QEAA@AEBU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportSpecials* @"\01??0ExportSpecials@@QAE@ABU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportSpecials* @"\01??0ExportSpecials@@QEAA@AEBU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllexport) ExportSpecials(const ExportSpecials&);
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QAEAAU0@ABU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QEAAAEAU0@AEBU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QAEAAU0@ABU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QEAAAEAU0@AEBU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllexport) ExportSpecials& operator=(const ExportSpecials&);
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc %struct.ExportSpecials* @"\01??0ExportSpecials@@QAE@$$QAU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dllexport %struct.ExportSpecials* @"\01??0ExportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportSpecials* @"\01??0ExportSpecials@@QAE@$$QAU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportSpecials* @"\01??0ExportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllexport) ExportSpecials(ExportSpecials&&);
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllexport) ExportSpecials& operator=(ExportSpecials&&);
|
||||
};
|
||||
ExportSpecials::ExportSpecials() {}
|
||||
|
@ -334,40 +334,40 @@ ExportSpecials& ExportSpecials::operator=(ExportSpecials&&) { return *this; }
|
|||
|
||||
// Export class with inline special member functions.
|
||||
struct ExportInlineSpecials {
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QAE@XZ"(%struct.ExportInlineSpecials* returned %this)
|
||||
// M64-DAG: define weak_odr dllexport %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QEAA@XZ"(
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN20ExportInlineSpecialsC1Ev(
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN20ExportInlineSpecialsC1Ev(
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QAE@XZ"(%struct.ExportInlineSpecials* returned %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QEAA@XZ"(
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN20ExportInlineSpecialsC1Ev(
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN20ExportInlineSpecialsC1Ev(
|
||||
__declspec(dllexport) ExportInlineSpecials() {}
|
||||
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??1ExportInlineSpecials@@QAE@XZ"(
|
||||
// M64-DAG: define weak_odr dllexport void @"\01??1ExportInlineSpecials@@QEAA@XZ"(
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN20ExportInlineSpecialsD1Ev(
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN20ExportInlineSpecialsD1Ev(
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01??1ExportInlineSpecials@@QAE@XZ"(
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01??1ExportInlineSpecials@@QEAA@XZ"(
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN20ExportInlineSpecialsD1Ev(
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN20ExportInlineSpecialsD1Ev(
|
||||
__declspec(dllexport) ~ExportInlineSpecials() {}
|
||||
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QAE@ABU0@@Z"(
|
||||
// M64-DAG: define weak_odr dllexport %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QEAA@AEBU0@@Z"(
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN20ExportInlineSpecialsC1ERKS_(
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN20ExportInlineSpecialsC1ERKS_(
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QAE@ABU0@@Z"(
|
||||
// M64-DAG: define weak_odr dso_local dllexport %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QEAA@AEBU0@@Z"(
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN20ExportInlineSpecialsC1ERKS_(
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN20ExportInlineSpecialsC1ERKS_(
|
||||
__declspec(dllexport) inline ExportInlineSpecials(const ExportInlineSpecials&);
|
||||
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QAEAAU0@ABU0@@Z"(
|
||||
// M64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QEAAAEAU0@AEBU0@@Z"(
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSERKS_(
|
||||
// G64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSERKS_(
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QAEAAU0@ABU0@@Z"(
|
||||
// M64-DAG: define weak_odr dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QEAAAEAU0@AEBU0@@Z"(
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSERKS_(
|
||||
// G64-DAG: define weak_odr dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSERKS_(
|
||||
__declspec(dllexport) ExportInlineSpecials& operator=(const ExportInlineSpecials&);
|
||||
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QAE@$$QAU0@@Z"(
|
||||
// M64-DAG: define weak_odr dllexport %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QEAA@$$QEAU0@@Z"(
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN20ExportInlineSpecialsC1EOS_(
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN20ExportInlineSpecialsC1EOS_(
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QAE@$$QAU0@@Z"(
|
||||
// M64-DAG: define weak_odr dso_local dllexport %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QEAA@$$QEAU0@@Z"(
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN20ExportInlineSpecialsC1EOS_(
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN20ExportInlineSpecialsC1EOS_(
|
||||
__declspec(dllexport) ExportInlineSpecials(ExportInlineSpecials&&) {}
|
||||
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
|
||||
// M64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSEOS_(
|
||||
// G64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSEOS_(
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
|
||||
// M64-DAG: define weak_odr dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSEOS_(
|
||||
// G64-DAG: define weak_odr dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSEOS_(
|
||||
__declspec(dllexport) ExportInlineSpecials& operator=(ExportInlineSpecials&&) { return *this; }
|
||||
};
|
||||
ExportInlineSpecials::ExportInlineSpecials(const ExportInlineSpecials&) {}
|
||||
|
@ -384,74 +384,74 @@ struct ExportDefaultedDefs {
|
|||
__declspec(dllexport) ExportDefaultedDefs& operator=(ExportDefaultedDefs&&);
|
||||
};
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QAE@XZ"(%struct.ExportDefaultedDefs* returned %this)
|
||||
// M64-DAG: define dllexport %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QEAA@XZ"(%struct.ExportDefaultedDefs* returned %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsC1Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsC2Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QAE@XZ"(%struct.ExportDefaultedDefs* returned %this)
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QEAA@XZ"(%struct.ExportDefaultedDefs* returned %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC1Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC2Ev(%struct.ExportDefaultedDefs* %this)
|
||||
__declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs() = default;
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01??1ExportDefaultedDefs@@QAE@XZ"(%struct.ExportDefaultedDefs* %this)
|
||||
// M64-DAG: define dllexport void @"\01??1ExportDefaultedDefs@@QEAA@XZ"(%struct.ExportDefaultedDefs* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsD1Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsD1Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsD2Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsD2Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01??1ExportDefaultedDefs@@QAE@XZ"(%struct.ExportDefaultedDefs* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01??1ExportDefaultedDefs@@QEAA@XZ"(%struct.ExportDefaultedDefs* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsD1Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsD1Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsD2Ev(%struct.ExportDefaultedDefs* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsD2Ev(%struct.ExportDefaultedDefs* %this)
|
||||
ExportDefaultedDefs::~ExportDefaultedDefs() = default;
|
||||
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define weak_odr dllexport %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define weak_odr dso_local dllexport %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs(const ExportDefaultedDefs&) = default;
|
||||
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QAEAAU0@ABU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QEAAAEAU0@AEBU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QAEAAU0@ABU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define weak_odr dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QEAAAEAU0@AEBU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define weak_odr dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
inline ExportDefaultedDefs& ExportDefaultedDefs::operator=(const ExportDefaultedDefs&) = default;
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dllexport %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs(ExportDefaultedDefs&&) = default;
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
ExportDefaultedDefs& ExportDefaultedDefs::operator=(ExportDefaultedDefs&&) = default;
|
||||
|
||||
|
||||
// Export defaulted member function definitions declared inside class.
|
||||
struct ExportDefaultedInclassDefs {
|
||||
__declspec(dllexport) ExportDefaultedInclassDefs() = default;
|
||||
// M32VS2013-DAG: define weak_odr dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QAE@XZ"(%struct.ExportDefaultedInclassDefs* returned %this)
|
||||
// M64VS2013-DAG: define weak_odr dllexport %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QEAA@XZ"(%struct.ExportDefaultedInclassDefs* returned %this)
|
||||
// M32VS2015-NOT: define weak_odr dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QAE@XZ"(%struct.ExportDefaultedInclassDefs* returned %this)
|
||||
// M64VS2015-NOT: define weak_odr dllexport %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QEAA@XZ"(%struct.ExportDefaultedInclassDefs* returned %this)
|
||||
// M32VS2013-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QAE@XZ"(%struct.ExportDefaultedInclassDefs* returned %this)
|
||||
// M64VS2013-DAG: define weak_odr dso_local dllexport %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QEAA@XZ"(%struct.ExportDefaultedInclassDefs* returned %this)
|
||||
// M32VS2015-NOT: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QAE@XZ"(%struct.ExportDefaultedInclassDefs* returned %this)
|
||||
// M64VS2015-NOT: define weak_odr dso_local dllexport %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QEAA@XZ"(%struct.ExportDefaultedInclassDefs* returned %this)
|
||||
|
||||
__declspec(dllexport) ~ExportDefaultedInclassDefs() = default;
|
||||
// M32VS2013-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??1ExportDefaultedInclassDefs@@QAE@XZ"(%struct.ExportDefaultedInclassDefs* %this)
|
||||
// M64VS2013-DAG: define weak_odr dllexport void @"\01??1ExportDefaultedInclassDefs@@QEAA@XZ"(%struct.ExportDefaultedInclassDefs* %this)
|
||||
// M32VS2015-NOT: define weak_odr dllexport x86_thiscallcc void @"\01??1ExportDefaultedInclassDefs@@QAE@XZ"(%struct.ExportDefaultedInclassDefs* %this)
|
||||
// M64VS2015-NOT: define weak_odr dllexport void @"\01??1ExportDefaultedInclassDefs@@QEAA@XZ"(%struct.ExportDefaultedInclassDefs* %this)
|
||||
// M32VS2013-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01??1ExportDefaultedInclassDefs@@QAE@XZ"(%struct.ExportDefaultedInclassDefs* %this)
|
||||
// M64VS2013-DAG: define weak_odr dso_local dllexport void @"\01??1ExportDefaultedInclassDefs@@QEAA@XZ"(%struct.ExportDefaultedInclassDefs* %this)
|
||||
// M32VS2015-NOT: define weak_odr dso_local dllexport x86_thiscallcc void @"\01??1ExportDefaultedInclassDefs@@QAE@XZ"(%struct.ExportDefaultedInclassDefs* %this)
|
||||
// M64VS2015-NOT: define weak_odr dso_local dllexport void @"\01??1ExportDefaultedInclassDefs@@QEAA@XZ"(%struct.ExportDefaultedInclassDefs* %this)
|
||||
|
||||
__declspec(dllexport) ExportDefaultedInclassDefs(const ExportDefaultedInclassDefs&) = default;
|
||||
// M32VS2013-DAG: define weak_odr dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64VS2013-DAG: define weak_odr dllexport %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32VS2015-NOT: define weak_odr dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64VS2015-NOT: define weak_odr dllexport %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32VS2013-DAG: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64VS2013-DAG: define weak_odr dso_local dllexport %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32VS2015-NOT: define weak_odr dso_local dllexport x86_thiscallcc %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64VS2015-NOT: define weak_odr dso_local dllexport %struct.ExportDefaultedInclassDefs* @"\01??0ExportDefaultedInclassDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedInclassDefs* returned %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
|
||||
__declspec(dllexport) ExportDefaultedInclassDefs& operator=(const ExportDefaultedInclassDefs&) = default;
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedInclassDefs* @"\01??4ExportDefaultedInclassDefs@@QAEAAU0@ABU0@@Z"(%struct.ExportDefaultedInclassDefs* %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedInclassDefs* @"\01??4ExportDefaultedInclassDefs@@QEAAAEAU0@AEBU0@@Z"(%struct.ExportDefaultedInclassDefs* %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedInclassDefs* @"\01??4ExportDefaultedInclassDefs@@QAEAAU0@ABU0@@Z"(%struct.ExportDefaultedInclassDefs* %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define weak_odr dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedInclassDefs* @"\01??4ExportDefaultedInclassDefs@@QEAAAEAU0@AEBU0@@Z"(%struct.ExportDefaultedInclassDefs* %this, %struct.ExportDefaultedInclassDefs* dereferenceable({{[0-9]+}}))
|
||||
};
|
||||
|
||||
|
||||
|
@ -463,28 +463,28 @@ struct ExportAlloc {
|
|||
__declspec(dllexport) void operator delete[](void*);
|
||||
};
|
||||
|
||||
// M32-DAG: define dllexport i8* @"\01??2ExportAlloc@@SAPAXI@Z"(i32 %n)
|
||||
// M64-DAG: define dllexport i8* @"\01??2ExportAlloc@@SAPEAX_K@Z"(i64 %n)
|
||||
// G32-DAG: define dllexport i8* @_ZN11ExportAllocnwEj(i32 %n)
|
||||
// G64-DAG: define dllexport i8* @_ZN11ExportAllocnwEy(i64 %n)
|
||||
// M32-DAG: define dso_local dllexport i8* @"\01??2ExportAlloc@@SAPAXI@Z"(i32 %n)
|
||||
// M64-DAG: define dso_local dllexport i8* @"\01??2ExportAlloc@@SAPEAX_K@Z"(i64 %n)
|
||||
// G32-DAG: define dso_local dllexport i8* @_ZN11ExportAllocnwEj(i32 %n)
|
||||
// G64-DAG: define dso_local dllexport i8* @_ZN11ExportAllocnwEy(i64 %n)
|
||||
void* ExportAlloc::operator new(__SIZE_TYPE__ n) { return malloc(n); }
|
||||
|
||||
// M32-DAG: define dllexport i8* @"\01??_UExportAlloc@@SAPAXI@Z"(i32 %n)
|
||||
// M64-DAG: define dllexport i8* @"\01??_UExportAlloc@@SAPEAX_K@Z"(i64 %n)
|
||||
// G32-DAG: define dllexport i8* @_ZN11ExportAllocnaEj(i32 %n)
|
||||
// G64-DAG: define dllexport i8* @_ZN11ExportAllocnaEy(i64 %n)
|
||||
// M32-DAG: define dso_local dllexport i8* @"\01??_UExportAlloc@@SAPAXI@Z"(i32 %n)
|
||||
// M64-DAG: define dso_local dllexport i8* @"\01??_UExportAlloc@@SAPEAX_K@Z"(i64 %n)
|
||||
// G32-DAG: define dso_local dllexport i8* @_ZN11ExportAllocnaEj(i32 %n)
|
||||
// G64-DAG: define dso_local dllexport i8* @_ZN11ExportAllocnaEy(i64 %n)
|
||||
void* ExportAlloc::operator new[](__SIZE_TYPE__ n) { return malloc(n); }
|
||||
|
||||
// M32-DAG: define dllexport void @"\01??3ExportAlloc@@SAXPAX@Z"(i8* %p)
|
||||
// M64-DAG: define dllexport void @"\01??3ExportAlloc@@SAXPEAX@Z"(i8* %p)
|
||||
// G32-DAG: define dllexport void @_ZN11ExportAllocdlEPv(i8* %p)
|
||||
// G64-DAG: define dllexport void @_ZN11ExportAllocdlEPv(i8* %p)
|
||||
// M32-DAG: define dso_local dllexport void @"\01??3ExportAlloc@@SAXPAX@Z"(i8* %p)
|
||||
// M64-DAG: define dso_local dllexport void @"\01??3ExportAlloc@@SAXPEAX@Z"(i8* %p)
|
||||
// G32-DAG: define dso_local dllexport void @_ZN11ExportAllocdlEPv(i8* %p)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN11ExportAllocdlEPv(i8* %p)
|
||||
void ExportAlloc::operator delete(void* p) { free(p); }
|
||||
|
||||
// M32-DAG: define dllexport void @"\01??_VExportAlloc@@SAXPAX@Z"(i8* %p)
|
||||
// M64-DAG: define dllexport void @"\01??_VExportAlloc@@SAXPEAX@Z"(i8* %p)
|
||||
// G32-DAG: define dllexport void @_ZN11ExportAllocdaEPv(i8* %p)
|
||||
// G64-DAG: define dllexport void @_ZN11ExportAllocdaEPv(i8* %p)
|
||||
// M32-DAG: define dso_local dllexport void @"\01??_VExportAlloc@@SAXPAX@Z"(i8* %p)
|
||||
// M64-DAG: define dso_local dllexport void @"\01??_VExportAlloc@@SAXPEAX@Z"(i8* %p)
|
||||
// G32-DAG: define dso_local dllexport void @_ZN11ExportAllocdaEPv(i8* %p)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN11ExportAllocdaEPv(i8* %p)
|
||||
void ExportAlloc::operator delete[](void* p) { free(p); }
|
||||
|
||||
|
||||
|
@ -501,125 +501,125 @@ struct MemFunTmpl {
|
|||
|
||||
// Export implicit instantiation of an exported member function template.
|
||||
void useMemFunTmpl() {
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??$exportedNormal@UImplicitInst_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01??$exportedNormal@UImplicitInst_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI21ImplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl14exportedNormalI21ImplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01??$exportedNormal@UImplicitInst_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01??$exportedNormal@UImplicitInst_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI21ImplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl14exportedNormalI21ImplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
MemFunTmpl().exportedNormal<ImplicitInst_Exported>();
|
||||
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01??$exportedStatic@UImplicitInst_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl14exportedStaticI21ImplicitInst_ExportedEEvv()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01??$exportedStatic@UImplicitInst_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl14exportedStaticI21ImplicitInst_ExportedEEvv()
|
||||
MemFunTmpl().exportedStatic<ImplicitInst_Exported>();
|
||||
}
|
||||
|
||||
|
||||
// Export explicit instantiation declaration of an exported member function
|
||||
// template.
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??$exportedNormal@UExplicitDecl_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01??$exportedNormal@UExplicitDecl_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI21ExplicitDecl_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl14exportedNormalI21ExplicitDecl_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01??$exportedNormal@UExplicitDecl_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01??$exportedNormal@UExplicitDecl_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI21ExplicitDecl_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl14exportedNormalI21ExplicitDecl_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
extern template void MemFunTmpl::exportedNormal<ExplicitDecl_Exported>();
|
||||
template void MemFunTmpl::exportedNormal<ExplicitDecl_Exported>();
|
||||
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01??$exportedStatic@UExplicitDecl_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl14exportedStaticI21ExplicitDecl_ExportedEEvv()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01??$exportedStatic@UExplicitDecl_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl14exportedStaticI21ExplicitDecl_ExportedEEvv()
|
||||
extern template void MemFunTmpl::exportedStatic<ExplicitDecl_Exported>();
|
||||
template void MemFunTmpl::exportedStatic<ExplicitDecl_Exported>();
|
||||
|
||||
|
||||
// Export explicit instantiation definition of an exported member function
|
||||
// template.
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??$exportedNormal@UExplicitInst_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01??$exportedNormal@UExplicitInst_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI21ExplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl14exportedNormalI21ExplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01??$exportedNormal@UExplicitInst_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01??$exportedNormal@UExplicitInst_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI21ExplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl14exportedNormalI21ExplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
template void MemFunTmpl::exportedNormal<ExplicitInst_Exported>();
|
||||
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01??$exportedStatic@UExplicitInst_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl14exportedStaticI21ExplicitInst_ExportedEEvv()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01??$exportedStatic@UExplicitInst_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl14exportedStaticI21ExplicitInst_ExportedEEvv()
|
||||
template void MemFunTmpl::exportedStatic<ExplicitInst_Exported>();
|
||||
|
||||
|
||||
// Export specialization of an exported member function template.
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01??$exportedNormal@UExplicitSpec_Def_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define dllexport void @"\01??$exportedNormal@UExplicitSpec_Def_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI25ExplicitSpec_Def_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define dllexport void @_ZN10MemFunTmpl14exportedNormalI25ExplicitSpec_Def_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01??$exportedNormal@UExplicitSpec_Def_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01??$exportedNormal@UExplicitSpec_Def_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI25ExplicitSpec_Def_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN10MemFunTmpl14exportedNormalI25ExplicitSpec_Def_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
template<> __declspec(dllexport) void MemFunTmpl::exportedNormal<ExplicitSpec_Def_Exported>() {}
|
||||
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??$exportedNormal@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01??$exportedNormal@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI31ExplicitSpec_InlineDef_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl14exportedNormalI31ExplicitSpec_InlineDef_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01??$exportedNormal@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01??$exportedNormal@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI31ExplicitSpec_InlineDef_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl14exportedNormalI31ExplicitSpec_InlineDef_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
template<> __declspec(dllexport) inline void MemFunTmpl::exportedNormal<ExplicitSpec_InlineDef_Exported>() {}
|
||||
|
||||
// MSC-DAG: define dllexport void @"\01??$exportedStatic@UExplicitSpec_Def_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define dllexport void @_ZN10MemFunTmpl14exportedStaticI25ExplicitSpec_Def_ExportedEEvv()
|
||||
// MSC-DAG: define dso_local dllexport void @"\01??$exportedStatic@UExplicitSpec_Def_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define dso_local dllexport void @_ZN10MemFunTmpl14exportedStaticI25ExplicitSpec_Def_ExportedEEvv()
|
||||
template<> __declspec(dllexport) void MemFunTmpl::exportedStatic<ExplicitSpec_Def_Exported>() {}
|
||||
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01??$exportedStatic@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl14exportedStaticI31ExplicitSpec_InlineDef_ExportedEEvv()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01??$exportedStatic@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl14exportedStaticI31ExplicitSpec_InlineDef_ExportedEEvv()
|
||||
template<> __declspec(dllexport) inline void MemFunTmpl::exportedStatic<ExplicitSpec_InlineDef_Exported>() {}
|
||||
|
||||
|
||||
// Not exporting specialization of an exported member function template without
|
||||
// explicit dllexport.
|
||||
// M32-DAG: define x86_thiscallcc void @"\01??$exportedNormal@UExplicitSpec_NotExported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define void @"\01??$exportedNormal@UExplicitSpec_NotExported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI24ExplicitSpec_NotExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define void @_ZN10MemFunTmpl14exportedNormalI24ExplicitSpec_NotExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// explicit dso_local dllexport.
|
||||
// M32-DAG: define dso_local x86_thiscallcc void @"\01??$exportedNormal@UExplicitSpec_NotExported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define dso_local void @"\01??$exportedNormal@UExplicitSpec_NotExported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN10MemFunTmpl14exportedNormalI24ExplicitSpec_NotExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define dso_local void @_ZN10MemFunTmpl14exportedNormalI24ExplicitSpec_NotExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
template<> void MemFunTmpl::exportedNormal<ExplicitSpec_NotExported>() {}
|
||||
|
||||
// M32-DAG: define void @"\01??$exportedStatic@UExplicitSpec_NotExported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define void @_ZN10MemFunTmpl14exportedStaticI24ExplicitSpec_NotExportedEEvv()
|
||||
// M32-DAG: define dso_local void @"\01??$exportedStatic@UExplicitSpec_NotExported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define dso_local void @_ZN10MemFunTmpl14exportedStaticI24ExplicitSpec_NotExportedEEvv()
|
||||
template<> void MemFunTmpl::exportedStatic<ExplicitSpec_NotExported>() {}
|
||||
|
||||
|
||||
// Export explicit instantiation declaration of a non-exported member function
|
||||
// template.
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??$normalDef@UExplicitDecl_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01??$normalDef@UExplicitDecl_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01??$normalDef@UExplicitDecl_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01??$normalDef@UExplicitDecl_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
extern template __declspec(dllexport) void MemFunTmpl::normalDef<ExplicitDecl_Exported>();
|
||||
template __declspec(dllexport) void MemFunTmpl::normalDef<ExplicitDecl_Exported>();
|
||||
|
||||
// M32-DAG: define weak_odr dllexport void @"\01??$staticDef@UExplicitDecl_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl9staticDefI21ExplicitDecl_ExportedEEvv()
|
||||
// M32-DAG: define weak_odr dso_local dllexport void @"\01??$staticDef@UExplicitDecl_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl9staticDefI21ExplicitDecl_ExportedEEvv()
|
||||
extern template __declspec(dllexport) void MemFunTmpl::staticDef<ExplicitDecl_Exported>();
|
||||
template __declspec(dllexport) void MemFunTmpl::staticDef<ExplicitDecl_Exported>();
|
||||
|
||||
|
||||
// Export explicit instantiation definition of a non-exported member function
|
||||
// template.
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??$normalDef@UExplicitInst_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01??$normalDef@UExplicitInst_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01??$normalDef@UExplicitInst_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01??$normalDef@UExplicitInst_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
template __declspec(dllexport) void MemFunTmpl::normalDef<ExplicitInst_Exported>();
|
||||
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01??$staticDef@UExplicitInst_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl9staticDefI21ExplicitInst_ExportedEEvv()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01??$staticDef@UExplicitInst_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl9staticDefI21ExplicitInst_ExportedEEvv()
|
||||
template __declspec(dllexport) void MemFunTmpl::staticDef<ExplicitInst_Exported>();
|
||||
|
||||
|
||||
// Export specialization of a non-exported member function template.
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01??$normalDef@UExplicitSpec_Def_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define dllexport void @"\01??$normalDef@UExplicitSpec_Def_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??$normalDef@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dllexport void @"\01??$normalDef@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI25ExplicitSpec_Def_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define dllexport void @_ZN10MemFunTmpl9normalDefI25ExplicitSpec_Def_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01??$normalDef@UExplicitSpec_Def_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01??$normalDef@UExplicitSpec_Def_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01??$normalDef@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define weak_odr dso_local dllexport void @"\01??$normalDef@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI25ExplicitSpec_Def_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define dso_local dllexport void @_ZN10MemFunTmpl9normalDefI25ExplicitSpec_Def_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ExportedEEvv(%struct.MemFunTmpl* %this)
|
||||
template<> __declspec(dllexport) void MemFunTmpl::normalDef<ExplicitSpec_Def_Exported>() {}
|
||||
template<> __declspec(dllexport) inline void MemFunTmpl::normalDef<ExplicitSpec_InlineDef_Exported>() {}
|
||||
|
||||
// MSC-DAG: define dllexport void @"\01??$staticDef@UExplicitSpec_Def_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dllexport void @"\01??$staticDef@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define dllexport void @_ZN10MemFunTmpl9staticDefI25ExplicitSpec_Def_ExportedEEvv()
|
||||
// GNU-DAG: define weak_odr dllexport void @_ZN10MemFunTmpl9staticDefI31ExplicitSpec_InlineDef_ExportedEEvv()
|
||||
// MSC-DAG: define dso_local dllexport void @"\01??$staticDef@UExplicitSpec_Def_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// MSC-DAG: define weak_odr dso_local dllexport void @"\01??$staticDef@UExplicitSpec_InlineDef_Exported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define dso_local dllexport void @_ZN10MemFunTmpl9staticDefI25ExplicitSpec_Def_ExportedEEvv()
|
||||
// GNU-DAG: define weak_odr dso_local dllexport void @_ZN10MemFunTmpl9staticDefI31ExplicitSpec_InlineDef_ExportedEEvv()
|
||||
template<> __declspec(dllexport) void MemFunTmpl::staticDef<ExplicitSpec_Def_Exported>() {}
|
||||
template<> __declspec(dllexport) inline void MemFunTmpl::staticDef<ExplicitSpec_InlineDef_Exported>() {}
|
||||
|
||||
|
@ -633,49 +633,49 @@ template<typename T> const int MemVarTmpl::StaticVar;
|
|||
template<typename T> const int MemVarTmpl::ExportedStaticVar;
|
||||
|
||||
// Export implicit instantiation of an exported member variable template.
|
||||
// MSC-DAG: @"\01??$ExportedStaticVar@UImplicitInst_Exported@@@MemVarTmpl@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ExportedStaticVarI21ImplicitInst_ExportedEE = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01??$ExportedStaticVar@UImplicitInst_Exported@@@MemVarTmpl@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ExportedStaticVarI21ImplicitInst_ExportedEE = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
int useMemVarTmpl() { return MemVarTmpl::ExportedStaticVar<ImplicitInst_Exported>; }
|
||||
|
||||
// Export explicit instantiation declaration of an exported member variable
|
||||
// template.
|
||||
// MSC-DAG: @"\01??$ExportedStaticVar@UExplicitDecl_Exported@@@MemVarTmpl@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ExportedStaticVarI21ExplicitDecl_ExportedEE = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01??$ExportedStaticVar@UExplicitDecl_Exported@@@MemVarTmpl@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ExportedStaticVarI21ExplicitDecl_ExportedEE = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
extern template const int MemVarTmpl::ExportedStaticVar<ExplicitDecl_Exported>;
|
||||
template const int MemVarTmpl::ExportedStaticVar<ExplicitDecl_Exported>;
|
||||
|
||||
// Export explicit instantiation definition of an exported member variable
|
||||
// template.
|
||||
// MSC-DAG: @"\01??$ExportedStaticVar@UExplicitInst_Exported@@@MemVarTmpl@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ExportedStaticVarI21ExplicitInst_ExportedEE = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01??$ExportedStaticVar@UExplicitInst_Exported@@@MemVarTmpl@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ExportedStaticVarI21ExplicitInst_ExportedEE = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
template const int MemVarTmpl::ExportedStaticVar<ExplicitInst_Exported>;
|
||||
|
||||
// Export specialization of an exported member variable template.
|
||||
// MSC-DAG: @"\01??$ExportedStaticVar@UExplicitSpec_Def_Exported@@@MemVarTmpl@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ExportedStaticVarI25ExplicitSpec_Def_ExportedEE = dllexport constant i32 1, align 4
|
||||
// MSC-DAG: @"\01??$ExportedStaticVar@UExplicitSpec_Def_Exported@@@MemVarTmpl@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ExportedStaticVarI25ExplicitSpec_Def_ExportedEE = dso_local dllexport constant i32 1, align 4
|
||||
template<> __declspec(dllexport) const int MemVarTmpl::ExportedStaticVar<ExplicitSpec_Def_Exported> = 1;
|
||||
|
||||
// Not exporting specialization of an exported member variable template without
|
||||
// explicit dllexport.
|
||||
// MSC-DAG: @"\01??$ExportedStaticVar@UExplicitSpec_NotExported@@@MemVarTmpl@@2HB" = weak_odr constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ExportedStaticVarI24ExplicitSpec_NotExportedEE = constant i32 1, align 4
|
||||
// MSC-DAG: @"\01??$ExportedStaticVar@UExplicitSpec_NotExported@@@MemVarTmpl@@2HB" = weak_odr dso_local constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ExportedStaticVarI24ExplicitSpec_NotExportedEE = dso_local constant i32 1, align 4
|
||||
template<> const int MemVarTmpl::ExportedStaticVar<ExplicitSpec_NotExported> = 1;
|
||||
|
||||
|
||||
// Export explicit instantiation declaration of a non-exported member variable
|
||||
// template.
|
||||
// MSC-DAG: @"\01??$StaticVar@UExplicitDecl_Exported@@@MemVarTmpl@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl9StaticVarI21ExplicitDecl_ExportedEE = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01??$StaticVar@UExplicitDecl_Exported@@@MemVarTmpl@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl9StaticVarI21ExplicitDecl_ExportedEE = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
extern template __declspec(dllexport) const int MemVarTmpl::StaticVar<ExplicitDecl_Exported>;
|
||||
template __declspec(dllexport) const int MemVarTmpl::StaticVar<ExplicitDecl_Exported>;
|
||||
|
||||
// Export explicit instantiation definition of a non-exported member variable
|
||||
// template.
|
||||
// MSC-DAG: @"\01??$StaticVar@UExplicitInst_Exported@@@MemVarTmpl@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl9StaticVarI21ExplicitInst_ExportedEE = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// MSC-DAG: @"\01??$StaticVar@UExplicitInst_Exported@@@MemVarTmpl@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl9StaticVarI21ExplicitInst_ExportedEE = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
template __declspec(dllexport) const int MemVarTmpl::StaticVar<ExplicitInst_Exported>;
|
||||
|
||||
// Export specialization of a non-exported member variable template.
|
||||
// MSC-DAG: @"\01??$StaticVar@UExplicitSpec_Def_Exported@@@MemVarTmpl@@2HB" = weak_odr dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl9StaticVarI25ExplicitSpec_Def_ExportedEE = dllexport constant i32 1, align 4
|
||||
// MSC-DAG: @"\01??$StaticVar@UExplicitSpec_Def_Exported@@@MemVarTmpl@@2HB" = weak_odr dso_local dllexport constant i32 1, comdat, align 4
|
||||
// GNU-DAG: @_ZN10MemVarTmpl9StaticVarI25ExplicitSpec_Def_ExportedEE = dso_local dllexport constant i32 1, align 4
|
||||
template<> __declspec(dllexport) const int MemVarTmpl::StaticVar<ExplicitSpec_Def_Exported> = 1;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// RUN: %clang_cc1 -triple %ms_abi_triple -fms-extensions -emit-llvm -O0 -o - %s | FileCheck %s
|
||||
|
||||
// Friend functions defined in classes are emitted.
|
||||
// CHECK: define weak_odr dllexport void @"\01?friend1@@YAXXZ"()
|
||||
// CHECK: define weak_odr dso_local dllexport void @"\01?friend1@@YAXXZ"()
|
||||
struct FuncFriend1 {
|
||||
friend __declspec(dllexport) void friend1() {}
|
||||
};
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
template <typename> struct MessageT { };
|
||||
extern template struct MessageT<int>;
|
||||
|
||||
// CHECK: define weak_odr dllexport {{.*}} %struct.MessageT* @"\01??4?$MessageT@H@@QEAAAEAU0@AEBU0@@Z"(
|
||||
// CHECK: define weak_odr dso_local dllexport {{.*}} %struct.MessageT* @"\01??4?$MessageT@H@@QEAAAEAU0@AEBU0@@Z"(
|
||||
template struct __declspec(dllexport) MessageT<int>;
|
||||
// Previously we crashed when this dllexport was the last thing in the file.
|
||||
// DO NOT ADD MORE TESTS AFTER THIS LINE!
|
||||
|
|
|
@ -11,7 +11,7 @@ struct __declspec(dllexport) C : A, B {
|
|||
virtual void m();
|
||||
};
|
||||
void C::m() {}
|
||||
// CHECK: define dllexport void @_ZThn8_N1C1mEv
|
||||
// CHECK: define dso_local dllexport void @_ZThn8_N1C1mEv
|
||||
|
||||
struct Base {
|
||||
virtual void m();
|
||||
|
@ -20,4 +20,4 @@ struct __declspec(dllexport) Derived : virtual Base {
|
|||
virtual void m();
|
||||
};
|
||||
void Derived::m() {}
|
||||
// CHECK: define dllexport void @_ZTv0_n24_N7Derived1mEv
|
||||
// CHECK: define dso_local dllexport void @_ZTv0_n24_N7Derived1mEv
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -39,11 +39,11 @@ extern "C" void testit() {
|
|||
|
||||
// The destructors are called in reverse order of construction. Only the third
|
||||
// needs the complete destructor (_D).
|
||||
// CHECK-LABEL: define void @testit()
|
||||
// CHECK-LABEL: define dso_local void @testit()
|
||||
// CHECK: call void @"\01??_DImportVBaseOverrideVDtor@@QEAAXXZ"(%struct.ImportVBaseOverrideVDtor* %{{.*}})
|
||||
// CHECK: call void @"\01??1ImportOverrideVDtor@@UEAA@XZ"(%struct.ImportOverrideVDtor* %{{.*}})
|
||||
// CHECK: call void @"\01??1ImportIntroVDtor@@UEAA@XZ"(%struct.ImportIntroVDtor* %{{.*}})
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @"\01??_DImportVBaseOverrideVDtor@@QEAAXXZ"
|
||||
// CHECK-LABEL: define linkonce_odr dso_local void @"\01??_DImportVBaseOverrideVDtor@@QEAAXXZ"
|
||||
// CHECK-LABEL: declare dllimport void @"\01??1ImportOverrideVDtor@@UEAA@XZ"
|
||||
// CHECK-LABEL: declare dllimport void @"\01??1ImportIntroVDtor@@UEAA@XZ"
|
||||
|
|
|
@ -63,86 +63,86 @@ struct __declspec(dllimport) ForceNonTrivial {
|
|||
struct ImportMembers {
|
||||
struct Nested;
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?normalDef@ImportMembers@@QAEXXZ"(%struct.ImportMembers* %this)
|
||||
// M64-DAG: define dllexport void @"\01?normalDef@ImportMembers@@QEAAXXZ"(%struct.ImportMembers* %this)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalDecl@ImportMembers@@QAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalDecl@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInclass@ImportMembers@@QAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInclass@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDef@ImportMembers@@QAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInlineDef@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDecl@ImportMembers@@QAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInlineDecl@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*)
|
||||
// G32-DAG: define x86_thiscallcc void @_ZN13ImportMembers9normalDefEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define void @_ZN13ImportMembers9normalDefEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers10normalDeclEv(%struct.ImportMembers*)
|
||||
// G64-DAG: declare dllimport void @_ZN13ImportMembers10normalDeclEv(%struct.ImportMembers*)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers13normalInclassEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers13normalInclassEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers15normalInlineDefEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers15normalInlineDefEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers16normalInlineDeclEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers16normalInlineDeclEv(%struct.ImportMembers* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?normalDef@ImportMembers@@QAEXXZ"(%struct.ImportMembers* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?normalDef@ImportMembers@@QEAAXXZ"(%struct.ImportMembers* %this)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalDecl@ImportMembers@@QAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalDecl@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInclass@ImportMembers@@QAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInclass@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDef@ImportMembers@@QAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInlineDef@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDecl@ImportMembers@@QAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInlineDecl@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*)
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ImportMembers9normalDefEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define dso_local void @_ZN13ImportMembers9normalDefEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers10normalDeclEv(%struct.ImportMembers*)
|
||||
// G64-DAG: declare dllimport void @_ZN13ImportMembers10normalDeclEv(%struct.ImportMembers*)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers13normalInclassEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers13normalInclassEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers15normalInlineDefEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers15normalInlineDefEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers16normalInlineDeclEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers16normalInlineDeclEv(%struct.ImportMembers* %this)
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInclass@ImportMembers@@QAEXXZ"(
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInlineDef@ImportMembers@@QAEXXZ"(
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInlineDecl@ImportMembers@@QAEXXZ"(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers13normalInclassEv(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers15normalInlineDefEv(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers16normalInlineDeclEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers13normalInclassEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers15normalInlineDefEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers16normalInlineDeclEv(
|
||||
__declspec(dllimport) void normalDef(); // dllimport ignored
|
||||
__declspec(dllimport) void normalDecl();
|
||||
__declspec(dllimport) void normalInclass() {}
|
||||
__declspec(dllimport) void normalInlineDef();
|
||||
__declspec(dllimport) inline void normalInlineDecl();
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?virtualDef@ImportMembers@@UAEXXZ"(%struct.ImportMembers* %this)
|
||||
// M64-DAG: define dllexport void @"\01?virtualDef@ImportMembers@@UEAAXXZ"(%struct.ImportMembers* %this)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualDecl@ImportMembers@@UAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualDecl@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInclass@ImportMembers@@UAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInclass@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDef@ImportMembers@@UAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInlineDef@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDecl@ImportMembers@@UAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInlineDecl@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*)
|
||||
// G32-DAG: define x86_thiscallcc void @_ZN13ImportMembers10virtualDefEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define void @_ZN13ImportMembers10virtualDefEv(%struct.ImportMembers* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?virtualDef@ImportMembers@@UAEXXZ"(%struct.ImportMembers* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?virtualDef@ImportMembers@@UEAAXXZ"(%struct.ImportMembers* %this)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualDecl@ImportMembers@@UAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualDecl@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInclass@ImportMembers@@UAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInclass@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDef@ImportMembers@@UAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInlineDef@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDecl@ImportMembers@@UAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInlineDecl@ImportMembers@@UEAAXXZ"(%struct.ImportMembers*)
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ImportMembers10virtualDefEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define dso_local void @_ZN13ImportMembers10virtualDefEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers11virtualDeclEv(%struct.ImportMembers*)
|
||||
// G64-DAG: declare dllimport void @_ZN13ImportMembers11virtualDeclEv(%struct.ImportMembers*)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers14virtualInclassEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers14virtualInclassEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers16virtualInlineDefEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers16virtualInlineDefEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers17virtualInlineDeclEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers17virtualInlineDeclEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers14virtualInclassEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers14virtualInclassEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers16virtualInlineDefEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers16virtualInlineDefEv(%struct.ImportMembers* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers17virtualInlineDeclEv(%struct.ImportMembers* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers17virtualInlineDeclEv(%struct.ImportMembers* %this)
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInclass@ImportMembers@@UAEXXZ"(
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInlineDef@ImportMembers@@UAEXXZ"(
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInlineDecl@ImportMembers@@UAEXXZ"(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers14virtualInclassEv(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers16virtualInlineDefEv(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers17virtualInlineDeclEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers14virtualInclassEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers16virtualInlineDefEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers17virtualInlineDeclEv(
|
||||
__declspec(dllimport) virtual void virtualDef(); // dllimport ignored
|
||||
__declspec(dllimport) virtual void virtualDecl();
|
||||
__declspec(dllimport) virtual void virtualInclass() {}
|
||||
__declspec(dllimport) virtual void virtualInlineDef();
|
||||
__declspec(dllimport) virtual inline void virtualInlineDecl();
|
||||
|
||||
// MSC-DAG: define dllexport void @"\01?staticDef@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticDecl@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInclass@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInlineDef@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInlineDecl@ImportMembers@@SAXXZ"()
|
||||
// GNU-DAG: define void @_ZN13ImportMembers9staticDefEv()
|
||||
// GNU-DAG: declare dllimport void @_ZN13ImportMembers10staticDeclEv()
|
||||
// GNU-DAG: define linkonce_odr void @_ZN13ImportMembers13staticInclassEv()
|
||||
// GNU-DAG: define linkonce_odr void @_ZN13ImportMembers15staticInlineDefEv()
|
||||
// GNU-DAG: define linkonce_odr void @_ZN13ImportMembers16staticInlineDeclEv()
|
||||
// MSC-DAG: define dso_local dllexport void @"\01?staticDef@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticDecl@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInclass@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInlineDef@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInlineDecl@ImportMembers@@SAXXZ"()
|
||||
// GNU-DAG: define dso_local void @_ZN13ImportMembers9staticDefEv()
|
||||
// GNU-DAG: declare dllimport void @_ZN13ImportMembers10staticDeclEv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers13staticInclassEv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers15staticInlineDefEv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers16staticInlineDeclEv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01?staticInclass@ImportMembers@@SAXXZ"()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01?staticInlineDef@ImportMembers@@SAXXZ"()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01?staticInlineDecl@ImportMembers@@SAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_ZN13ImportMembers13staticInclassEv()
|
||||
// GO1-DAG: define linkonce_odr void @_ZN13ImportMembers15staticInlineDefEv()
|
||||
// GO1-DAG: define linkonce_odr void @_ZN13ImportMembers16staticInlineDeclEv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers13staticInclassEv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers15staticInlineDefEv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers16staticInlineDeclEv()
|
||||
__declspec(dllimport) static void staticDef(); // dllimport ignored
|
||||
__declspec(dllimport) static void staticDecl();
|
||||
__declspec(dllimport) static void staticInclass() {}
|
||||
|
@ -169,10 +169,10 @@ private:
|
|||
__declspec(dllimport) void privateNormalDecl();
|
||||
__declspec(dllimport) static void privateStaticDecl();
|
||||
|
||||
// M32-DAG: declare x86_thiscallcc void @"\01?ignored@ImportMembers@@QAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare void @"\01?ignored@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*)
|
||||
// G32-DAG: declare x86_thiscallcc void @_ZN13ImportMembers7ignoredEv(%struct.ImportMembers*)
|
||||
// G64-DAG: declare void @_ZN13ImportMembers7ignoredEv(%struct.ImportMembers*)
|
||||
// M32-DAG: declare dso_local x86_thiscallcc void @"\01?ignored@ImportMembers@@QAEXXZ"(%struct.ImportMembers*)
|
||||
// M64-DAG: declare dso_local void @"\01?ignored@ImportMembers@@QEAAXXZ"(%struct.ImportMembers*)
|
||||
// G32-DAG: declare dso_local x86_thiscallcc void @_ZN13ImportMembers7ignoredEv(%struct.ImportMembers*)
|
||||
// G64-DAG: declare dso_local void @_ZN13ImportMembers7ignoredEv(%struct.ImportMembers*)
|
||||
public:
|
||||
void ignored();
|
||||
|
||||
|
@ -235,87 +235,87 @@ USEMV(ImportMembers, ConstexprField)
|
|||
|
||||
// Import individual members of a nested class.
|
||||
struct ImportMembers::Nested {
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?normalDef@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"* %this)
|
||||
// M64-DAG: define dllexport void @"\01?normalDef@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"* %this)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalDecl@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalDecl@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInclass@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInclass@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDef@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInlineDef@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDecl@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInlineDecl@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// G32-DAG: define x86_thiscallcc void @_ZN13ImportMembers6Nested9normalDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define void @_ZN13ImportMembers6Nested9normalDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?normalDef@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?normalDef@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"* %this)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalDecl@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalDecl@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInclass@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInclass@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDef@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInlineDef@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?normalInlineDecl@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?normalInlineDecl@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested9normalDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define dso_local void @_ZN13ImportMembers6Nested9normalDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers6Nested10normalDeclEv(%"struct.ImportMembers::Nested"*)
|
||||
// G64-DAG: declare dllimport void @_ZN13ImportMembers6Nested10normalDeclEv(%"struct.ImportMembers::Nested"*)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested13normalInclassEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested13normalInclassEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested15normalInlineDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested15normalInlineDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested16normalInlineDeclEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested16normalInlineDeclEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested13normalInclassEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested13normalInclassEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested15normalInlineDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested15normalInlineDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested16normalInlineDeclEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested16normalInlineDeclEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInclass@Nested@ImportMembers@@QAEXXZ"(
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInlineDef@Nested@ImportMembers@@QAEXXZ"(
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?normalInlineDecl@Nested@ImportMembers@@QAEXXZ"(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested13normalInclassEv(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested15normalInlineDefEv(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested16normalInlineDeclEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested13normalInclassEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested15normalInlineDefEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested16normalInlineDeclEv(
|
||||
__declspec(dllimport) void normalDef(); // dllimport ignored
|
||||
__declspec(dllimport) void normalDecl();
|
||||
__declspec(dllimport) void normalInclass() {}
|
||||
__declspec(dllimport) void normalInlineDef();
|
||||
__declspec(dllimport) inline void normalInlineDecl();
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?virtualDef@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"* %this)
|
||||
// M64-DAG: define dllexport void @"\01?virtualDef@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"* %this)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualDecl@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualDecl@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInclass@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInclass@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDef@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInlineDef@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDecl@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInlineDecl@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// G32-DAG: define x86_thiscallcc void @_ZN13ImportMembers6Nested10virtualDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define void @_ZN13ImportMembers6Nested10virtualDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?virtualDef@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"* %this)
|
||||
// M64-DAG: define dso_local dllexport void @"\01?virtualDef@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"* %this)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualDecl@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualDecl@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInclass@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInclass@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDef@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInlineDef@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?virtualInlineDecl@Nested@ImportMembers@@UAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dllimport void @"\01?virtualInlineDecl@Nested@ImportMembers@@UEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested10virtualDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define dso_local void @_ZN13ImportMembers6Nested10virtualDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN13ImportMembers6Nested11virtualDeclEv(%"struct.ImportMembers::Nested"*)
|
||||
// G64-DAG: declare dllimport void @_ZN13ImportMembers6Nested11virtualDeclEv(%"struct.ImportMembers::Nested"*)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested14virtualInclassEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested14virtualInclassEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested16virtualInlineDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested16virtualInlineDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested17virtualInlineDeclEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested17virtualInlineDeclEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested14virtualInclassEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested14virtualInclassEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested16virtualInlineDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested16virtualInlineDefEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested17virtualInlineDeclEv(%"struct.ImportMembers::Nested"* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested17virtualInlineDeclEv(%"struct.ImportMembers::Nested"* %this)
|
||||
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInclass@Nested@ImportMembers@@UAEXXZ"(
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInlineDef@Nested@ImportMembers@@UAEXXZ"(
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01?virtualInlineDecl@Nested@ImportMembers@@UAEXXZ"(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested14virtualInclassEv(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested16virtualInlineDefEv(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ImportMembers6Nested17virtualInlineDeclEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested14virtualInclassEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested16virtualInlineDefEv(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested17virtualInlineDeclEv(
|
||||
__declspec(dllimport) virtual void virtualDef(); // dllimport ignored
|
||||
__declspec(dllimport) virtual void virtualDecl();
|
||||
__declspec(dllimport) virtual void virtualInclass() {}
|
||||
__declspec(dllimport) virtual void virtualInlineDef();
|
||||
__declspec(dllimport) virtual inline void virtualInlineDecl();
|
||||
|
||||
// MSC-DAG: define dllexport void @"\01?staticDef@Nested@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticDecl@Nested@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInclass@Nested@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInlineDef@Nested@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInlineDecl@Nested@ImportMembers@@SAXXZ"()
|
||||
// GNU-DAG: define void @_ZN13ImportMembers6Nested9staticDefEv()
|
||||
// GNU-DAG: declare dllimport void @_ZN13ImportMembers6Nested10staticDeclEv()
|
||||
// GNU-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested13staticInclassEv()
|
||||
// GNU-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested15staticInlineDefEv()
|
||||
// GNU-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested16staticInlineDeclEv()
|
||||
// MSC-DAG: define dso_local dllexport void @"\01?staticDef@Nested@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticDecl@Nested@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInclass@Nested@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInlineDef@Nested@ImportMembers@@SAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01?staticInlineDecl@Nested@ImportMembers@@SAXXZ"()
|
||||
// GNU-DAG: define dso_local void @_ZN13ImportMembers6Nested9staticDefEv()
|
||||
// GNU-DAG: declare dllimport void @_ZN13ImportMembers6Nested10staticDeclEv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested13staticInclassEv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested15staticInlineDefEv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested16staticInlineDeclEv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01?staticInclass@Nested@ImportMembers@@SAXXZ"()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01?staticInlineDef@Nested@ImportMembers@@SAXXZ"()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01?staticInlineDecl@Nested@ImportMembers@@SAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested13staticInclassEv()
|
||||
// GO1-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested15staticInlineDefEv()
|
||||
// GO1-DAG: define linkonce_odr void @_ZN13ImportMembers6Nested16staticInlineDeclEv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested13staticInclassEv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested15staticInlineDefEv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_ZN13ImportMembers6Nested16staticInlineDeclEv()
|
||||
__declspec(dllimport) static void staticDef(); // dllimport ignored
|
||||
__declspec(dllimport) static void staticDecl();
|
||||
__declspec(dllimport) static void staticInclass() {}
|
||||
|
@ -342,10 +342,10 @@ private:
|
|||
__declspec(dllimport) void privateNormalDecl();
|
||||
__declspec(dllimport) static void privateStaticDecl();
|
||||
|
||||
// M32-DAG: declare x86_thiscallcc void @"\01?ignored@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare void @"\01?ignored@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// G32-DAG: declare x86_thiscallcc void @_ZN13ImportMembers6Nested7ignoredEv(%"struct.ImportMembers::Nested"*)
|
||||
// G64-DAG: declare void @_ZN13ImportMembers6Nested7ignoredEv(%"struct.ImportMembers::Nested"*)
|
||||
// M32-DAG: declare dso_local x86_thiscallcc void @"\01?ignored@Nested@ImportMembers@@QAEXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// M64-DAG: declare dso_local void @"\01?ignored@Nested@ImportMembers@@QEAAXXZ"(%"struct.ImportMembers::Nested"*)
|
||||
// G32-DAG: declare dso_local x86_thiscallcc void @_ZN13ImportMembers6Nested7ignoredEv(%"struct.ImportMembers::Nested"*)
|
||||
// G64-DAG: declare dso_local void @_ZN13ImportMembers6Nested7ignoredEv(%"struct.ImportMembers::Nested"*)
|
||||
public:
|
||||
void ignored();
|
||||
|
||||
|
@ -451,50 +451,50 @@ USESPECIALS(ImportSpecials)
|
|||
struct ImportInlineSpecials {
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@XZ"(%struct.ImportInlineSpecials* returned)
|
||||
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QEAA@XZ"(%struct.ImportInlineSpecials* returned)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1Ev(%struct.ImportInlineSpecials* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN20ImportInlineSpecialsC1Ev(%struct.ImportInlineSpecials* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1Ev(%struct.ImportInlineSpecials* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1Ev(%struct.ImportInlineSpecials* %this)
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@XZ"(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1Ev(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1Ev(
|
||||
__declspec(dllimport) ImportInlineSpecials() {}
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01??1ImportInlineSpecials@@QAE@XZ"(%struct.ImportInlineSpecials*)
|
||||
// M64-DAG: declare dllimport void @"\01??1ImportInlineSpecials@@QEAA@XZ"(%struct.ImportInlineSpecials*)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsD1Ev(%struct.ImportInlineSpecials* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN20ImportInlineSpecialsD1Ev(%struct.ImportInlineSpecials* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsD1Ev(%struct.ImportInlineSpecials* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsD1Ev(%struct.ImportInlineSpecials* %this)
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01??1ImportInlineSpecials@@QAE@XZ"(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsD1Ev(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsD1Ev(
|
||||
__declspec(dllimport) ~ImportInlineSpecials() {}
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@ABU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QEAA@AEBU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@ABU0@@Z"(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(
|
||||
__declspec(dllimport) inline ImportInlineSpecials(const ImportInlineSpecials&);
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@ABU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@ABU0@@Z"(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(
|
||||
__declspec(dllimport) ImportInlineSpecials& operator=(const ImportInlineSpecials&);
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(
|
||||
__declspec(dllimport) ImportInlineSpecials(ImportInlineSpecials&&) {}
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials* %this, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(
|
||||
__declspec(dllimport) ImportInlineSpecials& operator=(ImportInlineSpecials&&) { return *this; }
|
||||
};
|
||||
ImportInlineSpecials::ImportInlineSpecials(const ImportInlineSpecials&) {}
|
||||
|
@ -506,50 +506,50 @@ USESPECIALS(ImportInlineSpecials)
|
|||
struct ImportDefaulted {
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted* returned)
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QEAA@XZ"(%struct.ImportDefaulted* returned)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this)
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted* returned %this)
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this)
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1Ev(%struct.ImportDefaulted* %this)
|
||||
__declspec(dllimport) ImportDefaulted() = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01??1ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted*)
|
||||
// M64-DAG: declare dllimport void @"\01??1ImportDefaulted@@QEAA@XZ"(%struct.ImportDefaulted*)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this)
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc void @"\01??1ImportDefaulted@@QAE@XZ"(%struct.ImportDefaulted* %this)
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this)
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this)
|
||||
__declspec(dllimport) ~ImportDefaulted() = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QEAA@AEBU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* returned %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllimport) ImportDefaulted(const ImportDefaulted&) = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllimport) ImportDefaulted& operator=(const ImportDefaulted&) = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* returned %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllimport) ImportDefaulted(ImportDefaulted&&) = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
// GO1-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||
__declspec(dllimport) ImportDefaulted& operator=(ImportDefaulted&&) = default;
|
||||
|
||||
ForceNonTrivial v; // ensure special members are non-trivial
|
||||
|
@ -585,28 +585,28 @@ __declspec(dllimport) ImportDefaultedDefs::~ImportDefaultedDefs() = default;
|
|||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ImportDefaultedDefs* returned, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ImportDefaultedDefs* returned, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
inline ImportDefaultedDefs::ImportDefaultedDefs(const ImportDefaultedDefs&) = default;
|
||||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define linkonce_odr dso_local dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
inline ImportDefaultedDefs& ImportDefaultedDefs::operator=(const ImportDefaultedDefs&) = default;
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dllexport %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define x86_thiscallcc void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define x86_thiscallcc void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
ImportDefaultedDefs::ImportDefaultedDefs(ImportDefaultedDefs&&) = default; // dllimport ignored
|
||||
|
||||
// M32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// M64-DAG: define dso_local dllexport dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G32-DAG: define dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
// G64-DAG: define dso_local dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||
ImportDefaultedDefs& ImportDefaultedDefs::operator=(ImportDefaultedDefs&&) = default; // dllimport ignored
|
||||
|
||||
USESPECIALS(ImportDefaultedDefs)
|
||||
|
@ -659,12 +659,12 @@ struct MemFunTmpl {
|
|||
// Import implicit instantiation of an imported member function template.
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01??$importedNormal@UImplicitInst_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*)
|
||||
// M64-DAG: declare dllimport void @"\01??$importedNormal@UImplicitInst_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ImplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN10MemFunTmpl14importedNormalI21ImplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ImplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl14importedNormalI21ImplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
USEMF(MemFunTmpl, importedNormal<ImplicitInst_Imported>)
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$importedStatic@UImplicitInst_Imported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_ZN10MemFunTmpl14importedStaticI21ImplicitInst_ImportedEEvv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl14importedStaticI21ImplicitInst_ImportedEEvv()
|
||||
USE(MemFunTmpl::importedStatic<ImplicitInst_Imported>)
|
||||
|
||||
|
||||
|
@ -672,13 +672,13 @@ USE(MemFunTmpl::importedStatic<ImplicitInst_Imported>)
|
|||
// template.
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01??$importedNormal@UExplicitDecl_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*)
|
||||
// M64-DAG: declare dllimport void @"\01??$importedNormal@UExplicitDecl_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*)
|
||||
// G32-DAG: declare x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*)
|
||||
// G64-DAG: declare void @_ZN10MemFunTmpl14importedNormalI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*)
|
||||
// G32-DAG: declare dso_local x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*)
|
||||
// G64-DAG: declare dso_local void @_ZN10MemFunTmpl14importedNormalI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*)
|
||||
extern template void MemFunTmpl::importedNormal<ExplicitDecl_Imported>();
|
||||
USEMF(MemFunTmpl, importedNormal<ExplicitDecl_Imported>)
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$importedStatic@UExplicitDecl_Imported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: declare void @_ZN10MemFunTmpl14importedStaticI21ExplicitDecl_ImportedEEvv()
|
||||
// GNU-DAG: declare dso_local void @_ZN10MemFunTmpl14importedStaticI21ExplicitDecl_ImportedEEvv()
|
||||
extern template void MemFunTmpl::importedStatic<ExplicitDecl_Imported>();
|
||||
USE(MemFunTmpl::importedStatic<ExplicitDecl_Imported>)
|
||||
|
||||
|
@ -687,13 +687,13 @@ USE(MemFunTmpl::importedStatic<ExplicitDecl_Imported>)
|
|||
// template.
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01??$importedNormal@UExplicitInst_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*)
|
||||
// M64-DAG: declare dllimport void @"\01??$importedNormal@UExplicitInst_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*)
|
||||
// G32-DAG: define weak_odr x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr void @_ZN10MemFunTmpl14importedNormalI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dso_local x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dso_local void @_ZN10MemFunTmpl14importedNormalI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
template void MemFunTmpl::importedNormal<ExplicitInst_Imported>();
|
||||
USEMF(MemFunTmpl, importedNormal<ExplicitInst_Imported>)
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$importedStatic@UExplicitInst_Imported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr void @_ZN10MemFunTmpl14importedStaticI21ExplicitInst_ImportedEEvv()
|
||||
// GNU-DAG: define weak_odr dso_local void @_ZN10MemFunTmpl14importedStaticI21ExplicitInst_ImportedEEvv()
|
||||
template void MemFunTmpl::importedStatic<ExplicitInst_Imported>();
|
||||
USE(MemFunTmpl::importedStatic<ExplicitInst_Imported>)
|
||||
|
||||
|
@ -715,8 +715,8 @@ USEMF(MemFunTmpl, importedNormal<ExplicitSpec_Imported>)
|
|||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01??$importedNormal@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*)
|
||||
// M64-DAG: declare dllimport void @"\01??$importedNormal@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN10MemFunTmpl14importedNormalI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl14importedNormalI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
template<> __declspec(dllimport) inline void MemFunTmpl::importedNormal<ExplicitSpec_InlineDef_Imported>() {}
|
||||
USEMF(MemFunTmpl, importedNormal<ExplicitSpec_InlineDef_Imported>)
|
||||
|
||||
|
@ -733,22 +733,22 @@ USE(MemFunTmpl::importedStatic<ExplicitSpec_Imported>)
|
|||
#endif
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$importedStatic@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_ZN10MemFunTmpl14importedStaticI31ExplicitSpec_InlineDef_ImportedEEvv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl14importedStaticI31ExplicitSpec_InlineDef_ImportedEEvv()
|
||||
template<> __declspec(dllimport) inline void MemFunTmpl::importedStatic<ExplicitSpec_InlineDef_Imported>() {}
|
||||
USE(MemFunTmpl::importedStatic<ExplicitSpec_InlineDef_Imported>)
|
||||
|
||||
|
||||
// Not importing specialization of an imported member function template without
|
||||
// explicit dllimport.
|
||||
// M32-DAG: define x86_thiscallcc void @"\01??$importedNormal@UExplicitSpec_NotImported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define void @"\01??$importedNormal@UExplicitSpec_NotImported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI24ExplicitSpec_NotImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define void @_ZN10MemFunTmpl14importedNormalI24ExplicitSpec_NotImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// M32-DAG: define dso_local x86_thiscallcc void @"\01??$importedNormal@UExplicitSpec_NotImported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl* %this)
|
||||
// M64-DAG: define dso_local void @"\01??$importedNormal@UExplicitSpec_NotImported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define dso_local x86_thiscallcc void @_ZN10MemFunTmpl14importedNormalI24ExplicitSpec_NotImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define dso_local void @_ZN10MemFunTmpl14importedNormalI24ExplicitSpec_NotImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
template<> void MemFunTmpl::importedNormal<ExplicitSpec_NotImported>() {}
|
||||
USEMF(MemFunTmpl, importedNormal<ExplicitSpec_NotImported>)
|
||||
|
||||
// MSC-DAG: define void @"\01??$importedStatic@UExplicitSpec_NotImported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define void @_ZN10MemFunTmpl14importedStaticI24ExplicitSpec_NotImportedEEvv()
|
||||
// MSC-DAG: define dso_local void @"\01??$importedStatic@UExplicitSpec_NotImported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define dso_local void @_ZN10MemFunTmpl14importedStaticI24ExplicitSpec_NotImportedEEvv()
|
||||
template<> void MemFunTmpl::importedStatic<ExplicitSpec_NotImported>() {}
|
||||
USE(MemFunTmpl::importedStatic<ExplicitSpec_NotImported>)
|
||||
|
||||
|
@ -757,13 +757,13 @@ USE(MemFunTmpl::importedStatic<ExplicitSpec_NotImported>)
|
|||
// template.
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01??$normalDef@UExplicitDecl_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*)
|
||||
// M64-DAG: declare dllimport void @"\01??$normalDef@UExplicitDecl_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*)
|
||||
// G32-DAG: declare x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*)
|
||||
// G64-DAG: declare void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*)
|
||||
// G32-DAG: declare dso_local x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*)
|
||||
// G64-DAG: declare dso_local void @_ZN10MemFunTmpl9normalDefI21ExplicitDecl_ImportedEEvv(%struct.MemFunTmpl*)
|
||||
extern template __declspec(dllimport) void MemFunTmpl::normalDef<ExplicitDecl_Imported>();
|
||||
USEMF(MemFunTmpl, normalDef<ExplicitDecl_Imported>)
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$staticDef@UExplicitDecl_Imported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: declare void @_ZN10MemFunTmpl9staticDefI21ExplicitDecl_ImportedEEvv()
|
||||
// GNU-DAG: declare dso_local void @_ZN10MemFunTmpl9staticDefI21ExplicitDecl_ImportedEEvv()
|
||||
extern template __declspec(dllimport) void MemFunTmpl::staticDef<ExplicitDecl_Imported>();
|
||||
USE(MemFunTmpl::staticDef<ExplicitDecl_Imported>)
|
||||
|
||||
|
@ -772,13 +772,13 @@ USE(MemFunTmpl::staticDef<ExplicitDecl_Imported>)
|
|||
// template.
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01??$normalDef@UExplicitInst_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*)
|
||||
// M64-DAG: declare dllimport void @"\01??$normalDef@UExplicitInst_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*)
|
||||
// G32-DAG: define weak_odr x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define weak_odr dso_local x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define weak_odr dso_local void @_ZN10MemFunTmpl9normalDefI21ExplicitInst_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
template __declspec(dllimport) void MemFunTmpl::normalDef<ExplicitInst_Imported>();
|
||||
USEMF(MemFunTmpl, normalDef<ExplicitInst_Imported>)
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$staticDef@UExplicitInst_Imported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define weak_odr void @_ZN10MemFunTmpl9staticDefI21ExplicitInst_ImportedEEvv()
|
||||
// GNU-DAG: define weak_odr dso_local void @_ZN10MemFunTmpl9staticDefI21ExplicitInst_ImportedEEvv()
|
||||
template __declspec(dllimport) void MemFunTmpl::staticDef<ExplicitInst_Imported>();
|
||||
USE(MemFunTmpl::staticDef<ExplicitInst_Imported>)
|
||||
|
||||
|
@ -800,8 +800,8 @@ USEMF(MemFunTmpl, normalDef<ExplicitSpec_Imported>)
|
|||
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01??$normalDef@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QAEXXZ"(%struct.MemFunTmpl*)
|
||||
// M64-DAG: declare dllimport void @"\01??$normalDef@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@QEAAXXZ"(%struct.MemFunTmpl*)
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define linkonce_odr void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
// G64-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl9normalDefI31ExplicitSpec_InlineDef_ImportedEEvv(%struct.MemFunTmpl* %this)
|
||||
template<> __declspec(dllimport) inline void MemFunTmpl::normalDef<ExplicitSpec_InlineDef_Imported>() {}
|
||||
USEMF(MemFunTmpl, normalDef<ExplicitSpec_InlineDef_Imported>)
|
||||
|
||||
|
@ -818,7 +818,7 @@ USE(MemFunTmpl::staticDef<ExplicitSpec_Imported>)
|
|||
#endif
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$staticDef@UExplicitSpec_InlineDef_Imported@@@MemFunTmpl@@SAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_ZN10MemFunTmpl9staticDefI31ExplicitSpec_InlineDef_ImportedEEvv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_ZN10MemFunTmpl9staticDefI31ExplicitSpec_InlineDef_ImportedEEvv()
|
||||
template<> __declspec(dllimport) inline void MemFunTmpl::staticDef<ExplicitSpec_InlineDef_Imported>() {}
|
||||
USE(MemFunTmpl::staticDef<ExplicitSpec_InlineDef_Imported>)
|
||||
|
||||
|
@ -853,8 +853,8 @@ USEMV(MemVarTmpl, ImportedStaticVar<ExplicitSpec_Imported>)
|
|||
|
||||
// Not importing specialization of a member variable template without explicit
|
||||
// dllimport.
|
||||
// MSC-DAG: @"\01??$ImportedStaticVar@UExplicitSpec_NotImported@@@MemVarTmpl@@2HB" = external constant i32
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ImportedStaticVarI24ExplicitSpec_NotImportedEE = external constant i32
|
||||
// MSC-DAG: @"\01??$ImportedStaticVar@UExplicitSpec_NotImported@@@MemVarTmpl@@2HB" = external dso_local constant i32
|
||||
// GNU-DAG: @_ZN10MemVarTmpl17ImportedStaticVarI24ExplicitSpec_NotImportedEE = external dso_local constant i32
|
||||
template<> const int MemVarTmpl::ImportedStaticVar<ExplicitSpec_NotImported>;
|
||||
USEMV(MemVarTmpl, ImportedStaticVar<ExplicitSpec_NotImported>)
|
||||
|
||||
|
|
|
@ -40,15 +40,15 @@ auto mp_general_v = &General::virt;
|
|||
|
||||
// All of the non-virtual globals need dynamic initializers.
|
||||
|
||||
// CHECK: @"\01?mp_single_nv@@3P8Single@@AEXXZQ1@" = global i8* null, align 4
|
||||
// CHECK: @"\01?mp_multi_nv@@3P8Multi@@AEXXZQ1@" = global { i8*, i32 } zeroinitializer, align 4
|
||||
// CHECK: @"\01?mp_virtual_nv@@3P8Virtual@@AEXXZQ1@" = global { i8*, i32, i32 } zeroinitializer, align 4
|
||||
// CHECK: @"\01?mp_general_nv@@3P8General@@AEXXZQ1@" = global { i8*, i32, i32, i32 } zeroinitializer, align 4
|
||||
// CHECK: @"\01?mp_single_nv@@3P8Single@@AEXXZQ1@" = dso_local global i8* null, align 4
|
||||
// CHECK: @"\01?mp_multi_nv@@3P8Multi@@AEXXZQ1@" = dso_local global { i8*, i32 } zeroinitializer, align 4
|
||||
// CHECK: @"\01?mp_virtual_nv@@3P8Virtual@@AEXXZQ1@" = dso_local global { i8*, i32, i32 } zeroinitializer, align 4
|
||||
// CHECK: @"\01?mp_general_nv@@3P8General@@AEXXZQ1@" = dso_local global { i8*, i32, i32, i32 } zeroinitializer, align 4
|
||||
|
||||
// CHECK: @"\01?mp_single_v@@3P8Single@@AEXXZQ1@" = global i8* bitcast (void (%struct.Single*, ...)* @"\01??_9Single@@$BA@AE" to i8*), align 4
|
||||
// CHECK: @"\01?mp_multi_v@@3P8Multi@@AEXXZQ1@" = global { i8*, i32 } { i8* bitcast (void (%struct.Multi*, ...)* @"\01??_9Multi@@$BA@AE" to i8*), i32 0 }, align 4
|
||||
// CHECK: @"\01?mp_virtual_v@@3P8Virtual@@AEXXZQ1@" = global { i8*, i32, i32 } { i8* bitcast (void (%struct.Virtual*, ...)* @"\01??_9Virtual@@$BA@AE" to i8*), i32 0, i32 0 }, align 4
|
||||
// CHECK: @"\01?mp_general_v@@3P8General@@AEXXZQ1@" = global { i8*, i32, i32, i32 } { i8* bitcast (void (%struct.General*, ...)* @"\01??_9General@@$BA@AE" to i8*), i32 0, i32 0, i32 0 }, align 4
|
||||
// CHECK: @"\01?mp_single_v@@3P8Single@@AEXXZQ1@" = dso_local global i8* bitcast (void (%struct.Single*, ...)* @"\01??_9Single@@$BA@AE" to i8*), align 4
|
||||
// CHECK: @"\01?mp_multi_v@@3P8Multi@@AEXXZQ1@" = dso_local global { i8*, i32 } { i8* bitcast (void (%struct.Multi*, ...)* @"\01??_9Multi@@$BA@AE" to i8*), i32 0 }, align 4
|
||||
// CHECK: @"\01?mp_virtual_v@@3P8Virtual@@AEXXZQ1@" = dso_local global { i8*, i32, i32 } { i8* bitcast (void (%struct.Virtual*, ...)* @"\01??_9Virtual@@$BA@AE" to i8*), i32 0, i32 0 }, align 4
|
||||
// CHECK: @"\01?mp_general_v@@3P8General@@AEXXZQ1@" = dso_local global { i8*, i32, i32, i32 } { i8* bitcast (void (%struct.General*, ...)* @"\01??_9General@@$BA@AE" to i8*), i32 0, i32 0, i32 0 }, align 4
|
||||
|
||||
// CHECK: define internal void @_GLOBAL__sub_I{{.*}}() {{.*}} {
|
||||
// CHECK: call void @"\01??__Emp_single_nv@@YAXXZ"()
|
||||
|
|
|
@ -12,7 +12,7 @@ struct __declspec(dllimport) S {
|
|||
// MSVC-DAG: @"\01??_R3S@@8" = linkonce_odr
|
||||
|
||||
// GNU-DAG: @_ZTV1S = available_externally dllimport
|
||||
// GNU-DAG: @_ZTI1S = linkonce_odr
|
||||
// GNU-DAG: @_ZTI1S = linkonce_odr dso_local
|
||||
|
||||
struct U : S {
|
||||
} u;
|
||||
|
@ -21,13 +21,13 @@ struct __declspec(dllimport) V {
|
|||
virtual void f();
|
||||
} v;
|
||||
// GNU-DAG: @_ZTV1V = available_externally dllimport
|
||||
// GNU-DAG: @_ZTS1V = linkonce_odr
|
||||
// GNU-DAG: @_ZTI1V = linkonce_odr
|
||||
// GNU-DAG: @_ZTS1V = linkonce_odr dso_local
|
||||
// GNU-DAG: @_ZTI1V = linkonce_odr dso_local
|
||||
|
||||
struct W {
|
||||
__declspec(dllimport) virtual void f();
|
||||
virtual void g();
|
||||
} w;
|
||||
// GNU-DAG: @_ZTV1W = linkonce_odr
|
||||
// GNU-DAG: @_ZTS1W = linkonce_odr
|
||||
// GNU-DAG: @_ZTI1W = linkonce_odr
|
||||
// GNU-DAG: @_ZTV1W = linkonce_odr dso_local
|
||||
// GNU-DAG: @_ZTS1W = linkonce_odr dso_local
|
||||
// GNU-DAG: @_ZTI1W = linkonce_odr dso_local
|
||||
|
|
|
@ -77,8 +77,8 @@ USEVAR(GlobalRedecl2c)
|
|||
|
||||
// NB: MSC issues a warning and makes GlobalRedecl3 dllexport. We follow GCC
|
||||
// and drop the dllimport with a warning.
|
||||
// MSC-DAG: @"\01?GlobalRedecl3@@3HA" = external global i32
|
||||
// GNU-DAG: @GlobalRedecl3 = external global i32
|
||||
// MSC-DAG: @"\01?GlobalRedecl3@@3HA" = external dso_local global i32
|
||||
// GNU-DAG: @GlobalRedecl3 = external dso_local global i32
|
||||
__declspec(dllimport) extern int GlobalRedecl3;
|
||||
extern int GlobalRedecl3; // dllimport ignored
|
||||
USEVAR(GlobalRedecl3)
|
||||
|
@ -136,8 +136,8 @@ template<typename T> __declspec(dllimport) int VarTmplRedecl2;
|
|||
template<typename T> __declspec(dllimport) int VarTmplRedecl2;
|
||||
USEVAR(VarTmplRedecl2<ImplicitInst_Imported>)
|
||||
|
||||
// MSC-DAG: @"\01??$VarTmplRedecl3@UImplicitInst_Imported@@@@3HA" = external global i32
|
||||
// GNU-DAG: @_Z14VarTmplRedecl3I21ImplicitInst_ImportedE = external global i32
|
||||
// MSC-DAG: @"\01??$VarTmplRedecl3@UImplicitInst_Imported@@@@3HA" = external dso_local global i32
|
||||
// GNU-DAG: @_Z14VarTmplRedecl3I21ImplicitInst_ImportedE = external dso_local global i32
|
||||
template<typename T> __declspec(dllimport) extern int VarTmplRedecl3;
|
||||
template<typename T> extern int VarTmplRedecl3; // dllimport ignored
|
||||
USEVAR(VarTmplRedecl3<ImplicitInst_Imported>)
|
||||
|
@ -174,8 +174,8 @@ USEVAR(ImportedVarTmpl<ExplicitSpec_Imported>)
|
|||
|
||||
// Not importing specialization of an imported variable template without
|
||||
// explicit dllimport.
|
||||
// MSC-DAG: @"\01??$ImportedVarTmpl@UExplicitSpec_NotImported@@@@3HA" = global i32 0, align 4
|
||||
// GNU-DAG: @_Z15ImportedVarTmplI24ExplicitSpec_NotImportedE = global i32 0, align 4
|
||||
// MSC-DAG: @"\01??$ImportedVarTmpl@UExplicitSpec_NotImported@@@@3HA" = dso_local global i32 0, align 4
|
||||
// GNU-DAG: @_Z15ImportedVarTmplI24ExplicitSpec_NotImportedE = dso_local global i32 0, align 4
|
||||
template<> int ImportedVarTmpl<ExplicitSpec_NotImported>;
|
||||
USEVAR(ImportedVarTmpl<ExplicitSpec_NotImported>)
|
||||
|
||||
|
@ -217,31 +217,31 @@ USE(externC)
|
|||
|
||||
// Import inline function.
|
||||
// MSC-DAG: declare dllimport void @"\01?inlineFunc@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z10inlineFuncv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z10inlineFuncv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01?inlineFunc@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_Z10inlineFuncv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_Z10inlineFuncv()
|
||||
__declspec(dllimport) inline void inlineFunc() {}
|
||||
USE(inlineFunc)
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01?inlineDecl@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z10inlineDeclv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z10inlineDeclv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01?inlineDecl@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_Z10inlineDeclv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_Z10inlineDeclv()
|
||||
__declspec(dllimport) inline void inlineDecl();
|
||||
void inlineDecl() {}
|
||||
USE(inlineDecl)
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01?inlineDef@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z9inlineDefv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z9inlineDefv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01?inlineDef@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_Z9inlineDefv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_Z9inlineDefv()
|
||||
__declspec(dllimport) void inlineDef();
|
||||
inline void inlineDef() {}
|
||||
USE(inlineDef)
|
||||
|
||||
// inline attributes
|
||||
// MSC-DAG: declare dllimport void @"\01?noinline@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z8noinlinev()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z8noinlinev()
|
||||
__declspec(dllimport) __attribute__((noinline)) inline void noinline() {}
|
||||
USE(noinline)
|
||||
|
||||
|
@ -259,30 +259,30 @@ USE(redecl1)
|
|||
|
||||
// NB: MSC issues a warning and makes redecl2/redecl3 dllexport. We follow GCC
|
||||
// and drop the dllimport with a warning.
|
||||
// MSC-DAG: declare void @"\01?redecl2@@YAXXZ"()
|
||||
// GNU-DAG: declare void @_Z7redecl2v()
|
||||
// MSC-DAG: declare dso_local void @"\01?redecl2@@YAXXZ"()
|
||||
// GNU-DAG: declare dso_local void @_Z7redecl2v()
|
||||
__declspec(dllimport) void redecl2();
|
||||
void redecl2();
|
||||
USE(redecl2)
|
||||
|
||||
// MSC-DAG: define dllexport void @"\01?redecl3@@YAXXZ"()
|
||||
// GNU-DAG: define void @_Z7redecl3v()
|
||||
// MSC-DAG: define dso_local dllexport void @"\01?redecl3@@YAXXZ"()
|
||||
// GNU-DAG: define dso_local void @_Z7redecl3v()
|
||||
__declspec(dllimport) void redecl3();
|
||||
void redecl3() {} // dllimport ignored
|
||||
USE(redecl3)
|
||||
|
||||
|
||||
// Friend functions
|
||||
// MSC-DAG: declare dllimport void @"\01?friend1@@YAXXZ"()
|
||||
// GNU-DAG: declare dllimport void @_Z7friend1v()
|
||||
// MSC-DAG: declare void @"\01?friend2@@YAXXZ"()
|
||||
// GNU-DAG: declare void @_Z7friend2v()
|
||||
// MSC-DAG: define dllexport void @"\01?friend3@@YAXXZ"()
|
||||
// GNU-DAG: define void @_Z7friend3v()
|
||||
// MSC-DAG: declare void @"\01?friend4@@YAXXZ"()
|
||||
// GNU-DAG: declare void @_Z7friend4v()
|
||||
// MSC-DAG: declare dllimport void @"\01?friend5@@YAXXZ"()
|
||||
// GNU-DAG: declare dllimport void @_Z7friend5v()
|
||||
// MSC-DAG: declare dllimport void @"\01?friend1@@YAXXZ"()
|
||||
// GNU-DAG: declare dllimport void @_Z7friend1v()
|
||||
// MSC-DAG: declare dso_local void @"\01?friend2@@YAXXZ"()
|
||||
// GNU-DAG: declare dso_local void @_Z7friend2v()
|
||||
// MSC-DAG: define dso_local dllexport void @"\01?friend3@@YAXXZ"()
|
||||
// GNU-DAG: define dso_local void @_Z7friend3v()
|
||||
// MSC-DAG: declare dso_local void @"\01?friend4@@YAXXZ"()
|
||||
// GNU-DAG: declare dso_local void @_Z7friend4v()
|
||||
// MSC-DAG: declare dllimport void @"\01?friend5@@YAXXZ"()
|
||||
// GNU-DAG: declare dllimport void @_Z7friend5v()
|
||||
|
||||
struct FuncFriend {
|
||||
friend __declspec(dllimport) void friend1();
|
||||
|
@ -399,31 +399,31 @@ USE(funcTmplDecl<ImplicitInst_Imported>)
|
|||
|
||||
// Import inline function template.
|
||||
// MSC-DAG: declare dllimport void @"\01??$inlineFuncTmpl1@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z15inlineFuncTmpl1I21ImplicitInst_ImportedEvv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z15inlineFuncTmpl1I21ImplicitInst_ImportedEvv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01??$inlineFuncTmpl1@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_Z15inlineFuncTmpl1I21ImplicitInst_ImportedEvv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_Z15inlineFuncTmpl1I21ImplicitInst_ImportedEvv()
|
||||
template<typename T> __declspec(dllimport) inline void inlineFuncTmpl1() {}
|
||||
USE(inlineFuncTmpl1<ImplicitInst_Imported>)
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$inlineFuncTmpl2@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z15inlineFuncTmpl2I21ImplicitInst_ImportedEvv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z15inlineFuncTmpl2I21ImplicitInst_ImportedEvv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01??$inlineFuncTmpl2@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_Z15inlineFuncTmpl2I21ImplicitInst_ImportedEvv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_Z15inlineFuncTmpl2I21ImplicitInst_ImportedEvv()
|
||||
template<typename T> inline void __attribute__((dllimport)) inlineFuncTmpl2() {}
|
||||
USE(inlineFuncTmpl2<ImplicitInst_Imported>)
|
||||
|
||||
// MSC-DAG: define linkonce_odr void @"\01??$inlineFuncTmplDecl@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z18inlineFuncTmplDeclI21ImplicitInst_ImportedEvv()
|
||||
// MO1-DAG: define linkonce_odr void @"\01??$inlineFuncTmplDecl@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_Z18inlineFuncTmplDeclI21ImplicitInst_ImportedEvv()
|
||||
// MSC-DAG: define linkonce_odr dso_local void @"\01??$inlineFuncTmplDecl@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z18inlineFuncTmplDeclI21ImplicitInst_ImportedEvv()
|
||||
// MO1-DAG: define linkonce_odr dso_local void @"\01??$inlineFuncTmplDecl@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_Z18inlineFuncTmplDeclI21ImplicitInst_ImportedEvv()
|
||||
template<typename T> __declspec(dllimport) inline void inlineFuncTmplDecl();
|
||||
template<typename T> void inlineFuncTmplDecl() {}
|
||||
USE(inlineFuncTmplDecl<ImplicitInst_Imported>)
|
||||
|
||||
// MSC-DAG: define linkonce_odr void @"\01??$inlineFuncTmplDef@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z17inlineFuncTmplDefI21ImplicitInst_ImportedEvv()
|
||||
// MO1-DAG: define linkonce_odr void @"\01??$inlineFuncTmplDef@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_Z17inlineFuncTmplDefI21ImplicitInst_ImportedEvv()
|
||||
// MSC-DAG: define linkonce_odr dso_local void @"\01??$inlineFuncTmplDef@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z17inlineFuncTmplDefI21ImplicitInst_ImportedEvv()
|
||||
// MO1-DAG: define linkonce_odr dso_local void @"\01??$inlineFuncTmplDef@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_Z17inlineFuncTmplDefI21ImplicitInst_ImportedEvv()
|
||||
template<typename T> __declspec(dllimport) void inlineFuncTmplDef();
|
||||
template<typename T> inline void inlineFuncTmplDef() {}
|
||||
USE(inlineFuncTmplDef<ImplicitInst_Imported>)
|
||||
|
@ -436,14 +436,14 @@ template<typename T> __declspec(dllimport) void funcTmplRedecl1();
|
|||
template<typename T> __declspec(dllimport) void funcTmplRedecl1();
|
||||
USE(funcTmplRedecl1<ImplicitInst_Imported>)
|
||||
|
||||
// MSC-DAG: declare void @"\01??$funcTmplRedecl2@UImplicitInst_NotImported@@@@YAXXZ"()
|
||||
// GNU-DAG: declare void @_Z15funcTmplRedecl2I24ImplicitInst_NotImportedEvv()
|
||||
// MSC-DAG: declare dso_local void @"\01??$funcTmplRedecl2@UImplicitInst_NotImported@@@@YAXXZ"()
|
||||
// GNU-DAG: declare dso_local void @_Z15funcTmplRedecl2I24ImplicitInst_NotImportedEvv()
|
||||
template<typename T> __declspec(dllimport) void funcTmplRedecl2();
|
||||
template<typename T> void funcTmplRedecl2(); // dllimport ignored
|
||||
USE(funcTmplRedecl2<ImplicitInst_NotImported>)
|
||||
|
||||
// MSC-DAG: define linkonce_odr void @"\01??$funcTmplRedecl3@UImplicitInst_NotImported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z15funcTmplRedecl3I24ImplicitInst_NotImportedEvv()
|
||||
// MSC-DAG: define linkonce_odr dso_local void @"\01??$funcTmplRedecl3@UImplicitInst_NotImported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z15funcTmplRedecl3I24ImplicitInst_NotImportedEvv()
|
||||
template<typename T> __declspec(dllimport) void funcTmplRedecl3();
|
||||
template<typename T> void funcTmplRedecl3() {} // dllimport ignored
|
||||
USE(funcTmplRedecl3<ImplicitInst_NotImported>)
|
||||
|
@ -452,12 +452,12 @@ USE(funcTmplRedecl3<ImplicitInst_NotImported>)
|
|||
// Function template friends
|
||||
// MSC-DAG: declare dllimport void @"\01??$funcTmplFriend1@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: declare dllimport void @_Z15funcTmplFriend1I21ImplicitInst_ImportedEvv()
|
||||
// MSC-DAG: declare void @"\01??$funcTmplFriend2@UImplicitInst_NotImported@@@@YAXXZ"()
|
||||
// GNU-DAG: declare void @_Z15funcTmplFriend2I24ImplicitInst_NotImportedEvv()
|
||||
// MSC-DAG: define linkonce_odr void @"\01??$funcTmplFriend3@UImplicitInst_NotImported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z15funcTmplFriend3I24ImplicitInst_NotImportedEvv()
|
||||
// MSC-DAG: define linkonce_odr void @"\01??$funcTmplFriend4@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z15funcTmplFriend4I21ImplicitInst_ImportedEvv()
|
||||
// MSC-DAG: declare dso_local void @"\01??$funcTmplFriend2@UImplicitInst_NotImported@@@@YAXXZ"()
|
||||
// GNU-DAG: declare dso_local void @_Z15funcTmplFriend2I24ImplicitInst_NotImportedEvv()
|
||||
// MSC-DAG: define linkonce_odr dso_local void @"\01??$funcTmplFriend3@UImplicitInst_NotImported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z15funcTmplFriend3I24ImplicitInst_NotImportedEvv()
|
||||
// MSC-DAG: define linkonce_odr dso_local void @"\01??$funcTmplFriend4@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z15funcTmplFriend4I21ImplicitInst_ImportedEvv()
|
||||
struct FuncTmplFriend {
|
||||
template<typename T> friend __declspec(dllimport) void funcTmplFriend1();
|
||||
template<typename T> friend __declspec(dllimport) void funcTmplFriend2();
|
||||
|
@ -490,24 +490,24 @@ template<typename T> __declspec(dllimport) inline void importedFuncTmpl() {}
|
|||
USE(importedFuncTmplDecl<ImplicitInst_Imported>)
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$importedFuncTmpl@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z16importedFuncTmplI21ImplicitInst_ImportedEvv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z16importedFuncTmplI21ImplicitInst_ImportedEvv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01??$importedFuncTmpl@UImplicitInst_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_Z16importedFuncTmplI21ImplicitInst_ImportedEvv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_Z16importedFuncTmplI21ImplicitInst_ImportedEvv()
|
||||
USE(importedFuncTmpl<ImplicitInst_Imported>)
|
||||
|
||||
// Import explicit instantiation declaration of an imported function template.
|
||||
// MSC-DAG: declare dllimport void @"\01??$importedFuncTmpl@UExplicitDecl_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: declare void @_Z16importedFuncTmplI21ExplicitDecl_ImportedEvv()
|
||||
// GNU-DAG: declare dso_local void @_Z16importedFuncTmplI21ExplicitDecl_ImportedEvv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01??$importedFuncTmpl@UExplicitDecl_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define available_externally void @_Z16importedFuncTmplI21ExplicitDecl_ImportedEvv()
|
||||
// GO1-DAG: define available_externally dso_local void @_Z16importedFuncTmplI21ExplicitDecl_ImportedEvv()
|
||||
extern template void importedFuncTmpl<ExplicitDecl_Imported>();
|
||||
USE(importedFuncTmpl<ExplicitDecl_Imported>)
|
||||
|
||||
// Import explicit instantiation definition of an imported function template.
|
||||
// MSC-DAG: declare dllimport void @"\01??$importedFuncTmpl@UExplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define weak_odr void @_Z16importedFuncTmplI21ExplicitInst_ImportedEvv()
|
||||
// GNU-DAG: define weak_odr dso_local void @_Z16importedFuncTmplI21ExplicitInst_ImportedEvv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01??$importedFuncTmpl@UExplicitInst_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define weak_odr void @_Z16importedFuncTmplI21ExplicitInst_ImportedEvv()
|
||||
// GO1-DAG: define weak_odr dso_local void @_Z16importedFuncTmplI21ExplicitInst_ImportedEvv()
|
||||
template void importedFuncTmpl<ExplicitInst_Imported>();
|
||||
USE(importedFuncTmpl<ExplicitInst_Imported>)
|
||||
|
||||
|
@ -526,9 +526,9 @@ USE(importedFuncTmplDecl<ExplicitSpec_Imported>)
|
|||
#endif
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$importedFuncTmplDecl@UExplicitSpec_InlineDef_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z20importedFuncTmplDeclI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z20importedFuncTmplDeclI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01??$importedFuncTmplDecl@UExplicitSpec_InlineDef_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_Z20importedFuncTmplDeclI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_Z20importedFuncTmplDeclI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
template<> __declspec(dllimport) inline void importedFuncTmplDecl<ExplicitSpec_InlineDef_Imported>() {}
|
||||
USE(importedFuncTmplDecl<ExplicitSpec_InlineDef_Imported>)
|
||||
|
||||
|
@ -546,17 +546,17 @@ USE(importedFuncTmpl<ExplicitSpec_Imported>)
|
|||
#endif
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$importedFuncTmpl@UExplicitSpec_InlineDef_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z16importedFuncTmplI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z16importedFuncTmplI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01??$importedFuncTmpl@UExplicitSpec_InlineDef_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_Z16importedFuncTmplI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_Z16importedFuncTmplI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
template<> __declspec(dllimport) inline void importedFuncTmpl<ExplicitSpec_InlineDef_Imported>() {}
|
||||
USE(importedFuncTmpl<ExplicitSpec_InlineDef_Imported>)
|
||||
|
||||
|
||||
// Not importing specialization of an imported function template without
|
||||
// explicit dllimport.
|
||||
// MSC-DAG: define void @"\01??$importedFuncTmpl@UExplicitSpec_NotImported@@@@YAXXZ"()
|
||||
// GNU-DAG: define void @_Z16importedFuncTmplI24ExplicitSpec_NotImportedEvv()
|
||||
// MSC-DAG: define dso_local void @"\01??$importedFuncTmpl@UExplicitSpec_NotImported@@@@YAXXZ"()
|
||||
// GNU-DAG: define dso_local void @_Z16importedFuncTmplI24ExplicitSpec_NotImportedEvv()
|
||||
template<> void importedFuncTmpl<ExplicitSpec_NotImported>() {}
|
||||
USE(importedFuncTmpl<ExplicitSpec_NotImported>)
|
||||
|
||||
|
@ -565,9 +565,9 @@ USE(importedFuncTmpl<ExplicitSpec_NotImported>)
|
|||
// MSC-DAG: declare dllimport void @"\01??$funcTmpl@UExplicitDecl_Imported@@@@YAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01??$inlineFuncTmpl@UExplicitDecl_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: declare dllimport void @_Z8funcTmplI21ExplicitDecl_ImportedEvv()
|
||||
// GNU-DAG: declare void @_Z14inlineFuncTmplI21ExplicitDecl_ImportedEvv()
|
||||
// GNU-DAG: declare dso_local void @_Z14inlineFuncTmplI21ExplicitDecl_ImportedEvv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01??$inlineFuncTmpl@UExplicitDecl_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define available_externally void @_Z14inlineFuncTmplI21ExplicitDecl_ImportedEvv()
|
||||
// GO1-DAG: define available_externally dso_local void @_Z14inlineFuncTmplI21ExplicitDecl_ImportedEvv()
|
||||
extern template __declspec(dllimport) void funcTmpl<ExplicitDecl_Imported>();
|
||||
extern template __declspec(dllimport) void inlineFuncTmpl<ExplicitDecl_Imported>();
|
||||
USE(funcTmpl<ExplicitDecl_Imported>)
|
||||
|
@ -578,11 +578,11 @@ USE(inlineFuncTmpl<ExplicitDecl_Imported>)
|
|||
// MSC-DAG: declare dllimport void @"\01??$funcTmpl@UExplicitInst_Imported@@@@YAXXZ"()
|
||||
// MSC-DAG: declare dllimport void @"\01??$inlineFuncTmpl@UExplicitInst_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: declare dllimport void @_Z8funcTmplI21ExplicitInst_ImportedEvv()
|
||||
// GNU-DAG: define weak_odr void @_Z14inlineFuncTmplI21ExplicitInst_ImportedEvv()
|
||||
// GNU-DAG: define weak_odr dso_local void @_Z14inlineFuncTmplI21ExplicitInst_ImportedEvv()
|
||||
// MO1-DAG: declare dllimport void @"\01??$funcTmpl@UExplicitInst_Imported@@@@YAXXZ"()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01??$inlineFuncTmpl@UExplicitInst_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define available_externally dllimport void @_Z8funcTmplI21ExplicitInst_ImportedEvv()
|
||||
// GO1-DAG: define weak_odr void @_Z14inlineFuncTmplI21ExplicitInst_ImportedEvv()
|
||||
// GO1-DAG: define weak_odr dso_local void @_Z14inlineFuncTmplI21ExplicitInst_ImportedEvv()
|
||||
template __declspec(dllimport) void funcTmpl<ExplicitInst_Imported>();
|
||||
template __declspec(dllimport) void inlineFuncTmpl<ExplicitInst_Imported>();
|
||||
USE(funcTmpl<ExplicitInst_Imported>)
|
||||
|
@ -603,9 +603,9 @@ USE(funcTmpl<ExplicitSpec_Imported>)
|
|||
#endif
|
||||
|
||||
// MSC-DAG: declare dllimport void @"\01??$funcTmpl@UExplicitSpec_InlineDef_Imported@@@@YAXXZ"()
|
||||
// GNU-DAG: define linkonce_odr void @_Z8funcTmplI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
// GNU-DAG: define linkonce_odr dso_local void @_Z8funcTmplI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
// MO1-DAG: define available_externally dllimport void @"\01??$funcTmpl@UExplicitSpec_InlineDef_Imported@@@@YAXXZ"()
|
||||
// GO1-DAG: define linkonce_odr void @_Z8funcTmplI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
// GO1-DAG: define linkonce_odr dso_local void @_Z8funcTmplI31ExplicitSpec_InlineDef_ImportedEvv()
|
||||
template<> __declspec(dllimport) inline void funcTmpl<ExplicitSpec_InlineDef_Imported>() {}
|
||||
USE(funcTmpl<ExplicitSpec_InlineDef_Imported>)
|
||||
|
||||
|
@ -640,7 +640,7 @@ struct __declspec(dllimport) T {
|
|||
|
||||
T& operator=(T&&) = default;
|
||||
// Note: Don't mark inline move operators dllimport because current MSVC versions don't export them.
|
||||
// M18-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.T* @"\01??4T@@QAEAAU0@$$QAU0@@Z"
|
||||
// M18-DAG: define linkonce_odr dso_local x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.T* @"\01??4T@@QAEAAU0@$$QAU0@@Z"
|
||||
// M19-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.T* @"\01??4T@@QAEAAU0@$$QAU0@@Z"
|
||||
};
|
||||
USEMEMFUNC(T, a)
|
||||
|
@ -693,7 +693,7 @@ namespace DontUseDtorAlias {
|
|||
|
||||
namespace Vtordisp {
|
||||
// Don't dllimport the vtordisp.
|
||||
// MO1-DAG: define linkonce_odr x86_thiscallcc void @"\01?f@?$C@H@Vtordisp@@$4PPPPPPPM@A@AEXXZ"
|
||||
// MO1-DAG: define linkonce_odr dso_local x86_thiscallcc void @"\01?f@?$C@H@Vtordisp@@$4PPPPPPPM@A@AEXXZ"
|
||||
|
||||
class __declspec(dllimport) Base {
|
||||
virtual void f() {}
|
||||
|
@ -800,7 +800,7 @@ namespace PR27319 {
|
|||
template <typename T> struct PartiallySpecializedClassTemplate {};
|
||||
template <typename T> struct __declspec(dllimport) PartiallySpecializedClassTemplate<T*> { void f(); };
|
||||
USEMEMFUNC(PartiallySpecializedClassTemplate<void*>, f);
|
||||
// M32-DAG: declare x86_thiscallcc void @"\01?f@?$PartiallySpecializedClassTemplate@PAX@@QAEXXZ"
|
||||
// M32-DAG: declare dso_local x86_thiscallcc void @"\01?f@?$PartiallySpecializedClassTemplate@PAX@@QAEXXZ"
|
||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN33PartiallySpecializedClassTemplateIPvE1fEv
|
||||
|
||||
// Attributes on explicit specializations are honored.
|
||||
|
@ -815,7 +815,7 @@ template <typename T> struct __declspec(dllimport) PartiallySpecializedImportedC
|
|||
template <typename T> struct PartiallySpecializedImportedClassTemplate<T*> { void f() {} };
|
||||
USEMEMFUNC(PartiallySpecializedImportedClassTemplate<void*>, f);
|
||||
// M32-DAG: {{declare|define available_externally}} dllimport x86_thiscallcc void @"\01?f@?$PartiallySpecializedImportedClassTemplate@PAX@@QAEXXZ"
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN41PartiallySpecializedImportedClassTemplateIPvE1fEv
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN41PartiallySpecializedImportedClassTemplateIPvE1fEv
|
||||
|
||||
// Attributes on the instantiation take precedence over attributes on the template.
|
||||
template <typename T> struct __declspec(dllexport) ExplicitlyInstantiatedWithDifferentAttr { void f() {} };
|
||||
|
@ -830,7 +830,7 @@ USECLASS(ExplicitInstantiationDeclImportedDefTemplate<int>);
|
|||
USEMEMFUNC(ExplicitInstantiationDeclImportedDefTemplate<int>, f);
|
||||
// M32-DAG: {{declare|define available_externally}} dllimport x86_thiscallcc void @"\01?f@?$ExplicitInstantiationDeclImportedDefTemplate@H@@QAEXXZ"
|
||||
// M32-DAG: {{declare|define available_externally}} dllimport x86_thiscallcc %struct.ExplicitInstantiationDeclImportedDefTemplate* @"\01??0?$ExplicitInstantiationDeclImportedDefTemplate@H@@QAE@XZ"
|
||||
// G32-DAG: define weak_odr x86_thiscallcc void @_ZN44ExplicitInstantiationDeclImportedDefTemplateIiE1fEv
|
||||
// G32-DAG: define weak_odr dso_local x86_thiscallcc void @_ZN44ExplicitInstantiationDeclImportedDefTemplateIiE1fEv
|
||||
|
||||
template <typename T> struct __declspec(dllimport) ExplicitInstantiationDeclExportedDefImportedTemplate { void f() {} ExplicitInstantiationDeclExportedDefImportedTemplate() {} };
|
||||
extern template struct __declspec(dllimport) ExplicitInstantiationDeclExportedDefImportedTemplate <int>;
|
||||
|
@ -861,7 +861,7 @@ namespace PR27810 {
|
|||
// functions are emitted unless they are used.
|
||||
|
||||
USEMEMFUNC(basic_ostream<char>::sentry, foo);
|
||||
// M32-DAG: define linkonce_odr x86_thiscallcc void @"\01?foo@sentry@?$basic_ostream@D@PR27810@@QAEXXZ"
|
||||
// M32-DAG: define linkonce_odr dso_local x86_thiscallcc void @"\01?foo@sentry@?$basic_ostream@D@PR27810@@QAEXXZ"
|
||||
// M32-NOT: ??0sentry@?$basic_ostream@D@PR27810@@QAE@XZ
|
||||
}
|
||||
|
||||
|
@ -907,7 +907,7 @@ template struct __declspec(dllimport) ExplicitlyImportInstantiatedTemplate<int>;
|
|||
struct __declspec(dllimport) DerivedFromTemplate : public ClassTemplate<int> {};
|
||||
USEMEMFUNC(ClassTemplate<int>, func)
|
||||
// M32-DAG: {{declare|define available_externally}} dllimport x86_thiscallcc void @"\01?func@?$ClassTemplate@H@@QAEXXZ"
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ClassTemplateIiE4funcEv
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ClassTemplateIiE4funcEv
|
||||
|
||||
// ImportedTemplate is explicitly imported.
|
||||
struct __declspec(dllimport) DerivedFromImportedTemplate : public ImportedClassTemplate<int> {};
|
||||
|
@ -918,34 +918,34 @@ USEMEMFUNC(ImportedClassTemplate<int>, func)
|
|||
// ExportedTemplate is explicitly exported.
|
||||
struct __declspec(dllimport) DerivedFromExportedTemplate : public ExportedClassTemplate<int> {};
|
||||
USEMEMFUNC(ExportedClassTemplate<int>, func)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?func@?$ExportedClassTemplate@H@@QAEXXZ"
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN21ExportedClassTemplateIiE4funcEv
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?func@?$ExportedClassTemplate@H@@QAEXXZ"
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN21ExportedClassTemplateIiE4funcEv
|
||||
|
||||
// Base class already implicitly instantiated without attribute.
|
||||
struct DerivedFromTemplateD : public ClassTemplate<double> {};
|
||||
struct __declspec(dllimport) DerivedFromTemplateD2 : public ClassTemplate<double> {};
|
||||
USEMEMFUNC(ClassTemplate<double>, func)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?func@?$ClassTemplate@N@@QAEXXZ"
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ClassTemplateIdE4funcEv
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ClassTemplateIdE4funcEv
|
||||
|
||||
// MS: Base class already instantiated with dfferent attribute.
|
||||
struct __declspec(dllexport) DerivedFromTemplateB : public ClassTemplate<bool> {};
|
||||
struct __declspec(dllimport) DerivedFromTemplateB2 : public ClassTemplate<bool> {};
|
||||
USEMEMFUNC(ClassTemplate<bool>, func)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?func@?$ClassTemplate@_N@@QAEXXZ"
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN13ClassTemplateIbE4funcEv
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?func@?$ClassTemplate@_N@@QAEXXZ"
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN13ClassTemplateIbE4funcEv
|
||||
|
||||
// Base class already specialized without dll attribute.
|
||||
struct __declspec(dllimport) DerivedFromExplicitlySpecializedTemplate : public ExplicitlySpecializedTemplate<int> {};
|
||||
USEMEMFUNC(ExplicitlySpecializedTemplate<int>, func)
|
||||
// M32-DAG: define linkonce_odr x86_thiscallcc void @"\01?func@?$ExplicitlySpecializedTemplate@H@@QAEXXZ"
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN29ExplicitlySpecializedTemplateIiE4funcEv
|
||||
// M32-DAG: define linkonce_odr dso_local x86_thiscallcc void @"\01?func@?$ExplicitlySpecializedTemplate@H@@QAEXXZ"
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN29ExplicitlySpecializedTemplateIiE4funcEv
|
||||
|
||||
// Base class alredy specialized with export attribute.
|
||||
struct __declspec(dllimport) DerivedFromExplicitlyExportSpecializedTemplate : public ExplicitlyExportSpecializedTemplate<int> {};
|
||||
USEMEMFUNC(ExplicitlyExportSpecializedTemplate<int>, func)
|
||||
// M32-DAG: define dllexport x86_thiscallcc void @"\01?func@?$ExplicitlyExportSpecializedTemplate@H@@QAEXXZ"
|
||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN35ExplicitlyExportSpecializedTemplateIiE4funcEv
|
||||
// M32-DAG: define dso_local dllexport x86_thiscallcc void @"\01?func@?$ExplicitlyExportSpecializedTemplate@H@@QAEXXZ"
|
||||
// G32-DAG: define dso_local dllexport x86_thiscallcc void @_ZN35ExplicitlyExportSpecializedTemplateIiE4funcEv
|
||||
|
||||
// Base class already specialized with import attribute.
|
||||
struct __declspec(dllimport) DerivedFromExplicitlyImportSpecializedTemplate : public ExplicitlyImportSpecializedTemplate<int> {};
|
||||
|
@ -956,14 +956,14 @@ USEMEMFUNC(ExplicitlyImportSpecializedTemplate<int>, func)
|
|||
// Base class already instantiated without dll attribute.
|
||||
struct __declspec(dllimport) DerivedFromExplicitlyInstantiatedTemplate : public ExplicitlyInstantiatedTemplate<int> {};
|
||||
USEMEMFUNC(ExplicitlyInstantiatedTemplate<int>, func)
|
||||
// M32-DAG: define weak_odr x86_thiscallcc void @"\01?func@?$ExplicitlyInstantiatedTemplate@H@@QAEXXZ"
|
||||
// G32-DAG: define weak_odr x86_thiscallcc void @_ZN30ExplicitlyInstantiatedTemplateIiE4funcEv
|
||||
// M32-DAG: define weak_odr dso_local x86_thiscallcc void @"\01?func@?$ExplicitlyInstantiatedTemplate@H@@QAEXXZ"
|
||||
// G32-DAG: define weak_odr dso_local x86_thiscallcc void @_ZN30ExplicitlyInstantiatedTemplateIiE4funcEv
|
||||
|
||||
// Base class already instantiated with export attribute.
|
||||
struct __declspec(dllimport) DerivedFromExplicitlyExportInstantiatedTemplate : public ExplicitlyExportInstantiatedTemplate<int> {};
|
||||
USEMEMFUNC(ExplicitlyExportInstantiatedTemplate<int>, func)
|
||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?func@?$ExplicitlyExportInstantiatedTemplate@H@@QAEXXZ"
|
||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN36ExplicitlyExportInstantiatedTemplateIiE4funcEv
|
||||
// M32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @"\01?func@?$ExplicitlyExportInstantiatedTemplate@H@@QAEXXZ"
|
||||
// G32-DAG: define weak_odr dso_local dllexport x86_thiscallcc void @_ZN36ExplicitlyExportInstantiatedTemplateIiE4funcEv
|
||||
|
||||
// Base class already instantiated with import attribute.
|
||||
struct __declspec(dllimport) DerivedFromExplicitlyImportInstantiatedTemplate : public ExplicitlyImportInstantiatedTemplate<int> {};
|
||||
|
@ -977,7 +977,7 @@ template <typename T> struct MiddleClass : public TopClass<T> { };
|
|||
struct __declspec(dllimport) BottomClass : public MiddleClass<int> { };
|
||||
USEMEMFUNC(TopClass<int>, func)
|
||||
// M32-DAG: {{declare|define available_externally}} dllimport x86_thiscallcc void @"\01?func@?$TopClass@H@@QAEXXZ"
|
||||
// G32-DAG: define linkonce_odr x86_thiscallcc void @_ZN8TopClassIiE4funcEv
|
||||
// G32-DAG: define linkonce_odr dso_local x86_thiscallcc void @_ZN8TopClassIiE4funcEv
|
||||
|
||||
template <typename T> struct ExplicitInstantiationDeclTemplateBase { void func() {} };
|
||||
extern template struct ExplicitInstantiationDeclTemplateBase<int>;
|
||||
|
@ -985,7 +985,7 @@ struct __declspec(dllimport) DerivedFromExplicitInstantiationDeclTemplateBase :
|
|||
template struct ExplicitInstantiationDeclTemplateBase<int>;
|
||||
USEMEMFUNC(ExplicitInstantiationDeclTemplateBase<int>, func)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?func@?$ExplicitInstantiationDeclTemplateBase@H@@QAEXXZ"
|
||||
// G32-DAG: define weak_odr x86_thiscallcc void @_ZN37ExplicitInstantiationDeclTemplateBaseIiE4funcEv
|
||||
// G32-DAG: define weak_odr dso_local x86_thiscallcc void @_ZN37ExplicitInstantiationDeclTemplateBaseIiE4funcEv
|
||||
|
||||
template <typename T> struct ExplicitInstantiationDeclTemplateBase2 { void func() {} };
|
||||
extern template struct ExplicitInstantiationDeclTemplateBase2<int>;
|
||||
|
@ -993,4 +993,4 @@ struct __declspec(dllimport) DerivedFromExplicitInstantiationDeclTemplateBase2 :
|
|||
template struct __declspec(dllexport) ExplicitInstantiationDeclTemplateBase2<int>;
|
||||
USEMEMFUNC(ExplicitInstantiationDeclTemplateBase2<int>, func)
|
||||
// M32-DAG: declare dllimport x86_thiscallcc void @"\01?func@?$ExplicitInstantiationDeclTemplateBase2@H@@QAEXXZ"
|
||||
// G32-DAG: define weak_odr x86_thiscallcc void @_ZN38ExplicitInstantiationDeclTemplateBase2IiE4funcEv
|
||||
// G32-DAG: define weak_odr dso_local x86_thiscallcc void @_ZN38ExplicitInstantiationDeclTemplateBase2IiE4funcEv
|
||||
|
|
|
@ -11,7 +11,7 @@ void caller() {
|
|||
may_throw();
|
||||
}
|
||||
}
|
||||
// CHECK-LABEL: define void @"\01?caller@test1@@YAXXZ"(
|
||||
// CHECK-LABEL: define dso_local void @"\01?caller@test1@@YAXXZ"(
|
||||
// CHECK: call void @never_throws(
|
||||
// CHECK: invoke void @"\01?may_throw@test1@@YAXXZ"(
|
||||
|
||||
|
@ -26,6 +26,6 @@ void caller() {
|
|||
may_throw();
|
||||
}
|
||||
}
|
||||
// CHECK-LABEL: define void @"\01?caller@test2@@YAXXZ"(
|
||||
// CHECK-LABEL: define dso_local void @"\01?caller@test2@@YAXXZ"(
|
||||
// CHECK: invoke void @throws_int(
|
||||
// CHECK: invoke void @"\01?may_throw@test2@@YAXXZ"(
|
||||
|
|
|
@ -12,7 +12,7 @@ void test_catch() {
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @"\01?test_catch@@YAXXZ"(
|
||||
// CHECK-LABEL: define dso_local void @"\01?test_catch@@YAXXZ"(
|
||||
// CHECK: invoke i32 @"\01?f@@YAHH@Z"(i32 1)
|
||||
// CHECK: to label %[[NORMAL:.*]] unwind label %[[CATCHSWITCH:.*]]
|
||||
|
||||
|
@ -50,7 +50,7 @@ void test_cleanup() {
|
|||
f(1);
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define {{.*}} @"\01?test_cleanup@@YAXXZ"(
|
||||
// CHECK-LABEL: define dso_local {{.*}} @"\01?test_cleanup@@YAXXZ"(
|
||||
// CHECK: invoke i32 @"\01?f@@YAHH@Z"(i32 1)
|
||||
// CHECK: to label %[[LEAVE_FUNC:.*]] unwind label %[[CLEANUP:.*]]
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ extern "C" void test_freefunc(int p1) {
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @test_freefunc(i32 %p1)
|
||||
// CHECK-LABEL: define dso_local void @test_freefunc(i32 %p1)
|
||||
// CHECK: @llvm.localescape(i32* %[[p1_ptr:[^, ]*]], i32* %[[l1_ptr:[^, ]*]])
|
||||
// CHECK: store i32 %p1, i32* %[[p1_ptr]], align 4
|
||||
// CHECK: store i32 13, i32* %[[l1_ptr]], align 4
|
||||
|
@ -45,7 +45,7 @@ void S::test_method() {
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @"\01?test_method@S@@QEAAXXZ"(%struct.S* %this)
|
||||
// CHECK-LABEL: define dso_local void @"\01?test_method@S@@QEAAXXZ"(%struct.S* %this)
|
||||
// CHECK: @llvm.localescape(i32* %[[l1_addr:[^, ]*]])
|
||||
// CHECK: store i32 13, i32* %[[l1_addr]], align 4
|
||||
// CHECK: invoke void @might_crash()
|
||||
|
|
|
@ -21,7 +21,7 @@ extern "C" void use_cxx() {
|
|||
|
||||
// Make sure we use __CxxFrameHandler3 for C++ EH.
|
||||
|
||||
// CXXEH-LABEL: define void @use_cxx()
|
||||
// CXXEH-LABEL: define dso_local void @use_cxx()
|
||||
// CXXEH-SAME: personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*)
|
||||
// CXXEH: call %struct.HasCleanup* @"\01??0HasCleanup@@QEAA@XZ"(%struct.HasCleanup* %{{.*}})
|
||||
// CXXEH: invoke void @might_throw()
|
||||
|
@ -36,7 +36,7 @@ extern "C" void use_cxx() {
|
|||
// CXXEH: call void @"\01??1HasCleanup@@QEAA@XZ"(%struct.HasCleanup* %{{.*}})
|
||||
// CXXEH: cleanupret
|
||||
|
||||
// NOCXX-LABEL: define void @use_cxx()
|
||||
// NOCXX-LABEL: define dso_local void @use_cxx()
|
||||
// NOCXX-NOT: invoke
|
||||
// NOCXX: call %struct.HasCleanup* @"\01??0HasCleanup@@QEAA@XZ"(%struct.HasCleanup* %{{.*}})
|
||||
// NOCXX-NOT: invoke
|
||||
|
@ -55,7 +55,7 @@ extern "C" void use_seh() {
|
|||
|
||||
// Make sure we use __C_specific_handler for SEH.
|
||||
|
||||
// CHECK-LABEL: define void @use_seh()
|
||||
// CHECK-LABEL: define dso_local void @use_seh()
|
||||
// CHECK-SAME: personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*)
|
||||
// CHECK: invoke void @might_throw() #[[NOINLINE:[0-9]+]]
|
||||
// CHECK: to label %[[cont:[^ ]*]] unwind label %[[lpad:[^ ]*]]
|
||||
|
@ -87,7 +87,7 @@ extern "C" void nested_finally() {
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @nested_finally() #{{[0-9]+}}
|
||||
// CHECK-LABEL: define dso_local void @nested_finally() #{{[0-9]+}}
|
||||
// CHECK-SAME: personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*)
|
||||
// CHECK: invoke void @might_throw()
|
||||
// CHECK: call void @"\01?fin$0@0@nested_finally@@"(i8 1, i8* {{.*}})
|
||||
|
@ -108,11 +108,11 @@ void use_seh_in_lambda() {
|
|||
might_throw();
|
||||
}
|
||||
|
||||
// CXXEH-LABEL: define void @"\01?use_seh_in_lambda@@YAXXZ"()
|
||||
// CXXEH-LABEL: define dso_local void @"\01?use_seh_in_lambda@@YAXXZ"()
|
||||
// CXXEH-SAME: personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*)
|
||||
// CXXEH: cleanuppad
|
||||
|
||||
// NOCXX-LABEL: define void @"\01?use_seh_in_lambda@@YAXXZ"()
|
||||
// NOCXX-LABEL: define dso_local void @"\01?use_seh_in_lambda@@YAXXZ"()
|
||||
// NOCXX-NOT: invoke
|
||||
// NOCXX: ret void
|
||||
|
||||
|
@ -139,7 +139,7 @@ void use_inline() {
|
|||
use_seh_in_inline_func();
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define linkonce_odr void @use_seh_in_inline_func() #{{[0-9]+}}
|
||||
// CHECK-LABEL: define linkonce_odr dso_local void @use_seh_in_inline_func() #{{[0-9]+}}
|
||||
// CHECK-SAME: personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*)
|
||||
// CHECK: invoke void @might_throw()
|
||||
//
|
||||
|
|
|
@ -119,14 +119,14 @@ namespace NestedClasses {
|
|||
// definition of Inner.
|
||||
template struct Outer<int>;
|
||||
// CHECK: define weak_odr void @_ZN13NestedClasses5OuterIiE5Inner1fEv
|
||||
// CHECK-MS: define weak_odr x86_thiscallcc void @"\01?f@Inner@?$Outer@H@NestedClasses@@QAEXXZ"
|
||||
// CHECK-MS: define weak_odr dso_local x86_thiscallcc void @"\01?f@Inner@?$Outer@H@NestedClasses@@QAEXXZ"
|
||||
|
||||
// Explicit instantiation declaration of Outer causes explicit instantiation
|
||||
// declaration of Inner, but not in MSVC mode.
|
||||
extern template struct Outer<char>;
|
||||
auto use = &Outer<char>::Inner::f;
|
||||
// CHECK: {{declare|define available_externally}} void @_ZN13NestedClasses5OuterIcE5Inner1fEv
|
||||
// CHECK-MS: define linkonce_odr x86_thiscallcc void @"\01?f@Inner@?$Outer@D@NestedClasses@@QAEXXZ"
|
||||
// CHECK-MS: define linkonce_odr dso_local x86_thiscallcc void @"\01?f@Inner@?$Outer@D@NestedClasses@@QAEXXZ"
|
||||
}
|
||||
|
||||
// Check that we emit definitions from explicit instantiations even when they
|
||||
|
|
|
@ -41,13 +41,13 @@ struct D5 : I1, I2, I3 {}; // homogeneous aggregate
|
|||
// PPC: define void @_Z7func_D12D1(%struct.D1* noalias sret %agg.result, [3 x i64] %x.coerce)
|
||||
// ARM32: define arm_aapcs_vfpcc void @_Z7func_D12D1(%struct.D1* noalias sret %agg.result, [3 x i64] %x.coerce)
|
||||
// ARM64: define void @_Z7func_D12D1(%struct.D1* noalias sret %agg.result, %struct.D1* %x)
|
||||
// X64: define x86_vectorcallcc void @"\01_Z7func_D12D1@@24"(%struct.D1* noalias sret %agg.result, %struct.D1* %x)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01_Z7func_D12D1@@24"(%struct.D1* noalias sret %agg.result, %struct.D1* %x)
|
||||
D1 CC func_D1(D1 x) { return x; }
|
||||
|
||||
// PPC: define [3 x double] @_Z7func_D22D2([3 x double] %x.coerce)
|
||||
// ARM32: define arm_aapcs_vfpcc %struct.D2 @_Z7func_D22D2(%struct.D2 %x.coerce)
|
||||
// ARM64: define %struct.D2 @_Z7func_D22D2([3 x double] %x.coerce)
|
||||
// X64: define x86_vectorcallcc %struct.D2 @"\01_Z7func_D22D2@@24"(%struct.D2 inreg %x.coerce)
|
||||
// X64: define dso_local x86_vectorcallcc %struct.D2 @"\01_Z7func_D22D2@@24"(%struct.D2 inreg %x.coerce)
|
||||
D2 CC func_D2(D2 x) { return x; }
|
||||
|
||||
// PPC: define void @_Z7func_D32D3(%struct.D3* noalias sret %agg.result, [4 x i64] %x.coerce)
|
||||
|
@ -92,7 +92,7 @@ struct HVAWithEmptyBase : Float1, Empty, Float2 { float z; };
|
|||
void CC with_empty_base(HVAWithEmptyBase a) {}
|
||||
|
||||
// FIXME: MSVC doesn't consider this an HVA because of the empty base.
|
||||
// X64: define x86_vectorcallcc void @"\01_Z15with_empty_base16HVAWithEmptyBase@@16"(%struct.HVAWithEmptyBase inreg %a.coerce)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01_Z15with_empty_base16HVAWithEmptyBase@@16"(%struct.HVAWithEmptyBase inreg %a.coerce)
|
||||
|
||||
struct HVAWithEmptyBitField : Float1, Float2 {
|
||||
int : 0; // Takes no space.
|
||||
|
@ -102,5 +102,5 @@ struct HVAWithEmptyBitField : Float1, Float2 {
|
|||
// PPC: define void @_Z19with_empty_bitfield20HVAWithEmptyBitField([3 x float] %a.coerce)
|
||||
// ARM64: define void @_Z19with_empty_bitfield20HVAWithEmptyBitField([3 x float] %a.coerce)
|
||||
// ARM32: define arm_aapcs_vfpcc void @_Z19with_empty_bitfield20HVAWithEmptyBitField(%struct.HVAWithEmptyBitField %a.coerce)
|
||||
// X64: define x86_vectorcallcc void @"\01_Z19with_empty_bitfield20HVAWithEmptyBitField@@16"(%struct.HVAWithEmptyBitField inreg %a.coerce)
|
||||
// X64: define dso_local x86_vectorcallcc void @"\01_Z19with_empty_bitfield20HVAWithEmptyBitField@@16"(%struct.HVAWithEmptyBitField inreg %a.coerce)
|
||||
void CC with_empty_bitfield(HVAWithEmptyBitField a) {}
|
||||
|
|
|
@ -15,7 +15,7 @@ void foo() {
|
|||
A a{f(), g()};
|
||||
}
|
||||
// CHECK-ITANIUM-LABEL: define void @_Z3foov
|
||||
// CHECK-MS-LABEL: define void @"\01?foo@@YAXXZ"
|
||||
// CHECK-MS-LABEL: define dso_local void @"\01?foo@@YAXXZ"
|
||||
// CHECK: call i32 @f()
|
||||
// CHECK: call i32 @g()
|
||||
|
||||
|
@ -24,6 +24,6 @@ struct B : A {
|
|||
};
|
||||
B::B() : A{f(), g()} {}
|
||||
// CHECK-ITANIUM-LABEL: define void @_ZN1BC2Ev
|
||||
// CHECK-MS-LABEL: define x86_thiscallcc %struct.B* @"\01??0B@@QAE@XZ"
|
||||
// CHECK-MS-LABEL: define dso_local x86_thiscallcc %struct.B* @"\01??0B@@QAE@XZ"
|
||||
// CHECK: call i32 @f()
|
||||
// CHECK: call i32 @g()
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// RUN: %clang_cc1 -triple i686-windows-win32 -fms-extensions -debug-info-kind=limited -emit-llvm %s -o - \
|
||||
// RUN: | FileCheck %s
|
||||
|
||||
// CHECK: @"\01?ui@s@@2IB" = weak_odr dllexport constant i32 0, comdat, align 4, !dbg [[UI:![0-9]+]]
|
||||
// CHECK: @"\01?ui@s@@2IB" = weak_odr dso_local dllexport constant i32 0, comdat, align 4, !dbg [[UI:![0-9]+]]
|
||||
|
||||
struct __declspec(dllexport) s {
|
||||
static const unsigned int ui = 0;
|
||||
|
|
|
@ -23,14 +23,14 @@ void B<char>::f() { }
|
|||
// We need a final CHECK line here.
|
||||
|
||||
// NORMAL-LABEL: define void @_Z1fv
|
||||
// MSVCCOMPAT-LABEL: define void @"\01?f@@YAXXZ"
|
||||
// MSVCCOMPAT-LABEL: define dso_local void @"\01?f@@YAXXZ"
|
||||
void f() { }
|
||||
|
||||
// <rdar://problem/8740363>
|
||||
inline void f1(int);
|
||||
|
||||
// NORMAL-LABEL: define linkonce_odr void @_Z2f1i
|
||||
// MSVCCOMPAT-LABEL: define linkonce_odr void @"\01?f1@@YAXH@Z"
|
||||
// MSVCCOMPAT-LABEL: define linkonce_odr dso_local void @"\01?f1@@YAXH@Z"
|
||||
void f1(int) { }
|
||||
|
||||
void test_f1() { f1(17); }
|
||||
|
@ -44,7 +44,7 @@ namespace test1 {
|
|||
};
|
||||
|
||||
// NORMAL-LABEL: define linkonce_odr void @_ZN5test11C4funcEv(
|
||||
// MSVCCOMPAT-LABEL: define linkonce_odr void @"\01?func@C@test1@@QEAAXXZ"(
|
||||
// MSVCCOMPAT-LABEL: define linkonce_odr dso_local void @"\01?func@C@test1@@QEAAXXZ"(
|
||||
|
||||
class C {
|
||||
public:
|
||||
|
@ -72,36 +72,36 @@ namespace test2 {
|
|||
f(a);
|
||||
}
|
||||
// NORMAL-LABEL: define linkonce_odr void @_ZN5test21fERKNS_1AE
|
||||
// MSVCCOMPAT-LABEL: define linkonce_odr void @"\01?f@test2@@YAXAEBUA@1@@Z"
|
||||
// MSVCCOMPAT-LABEL: define linkonce_odr dso_local void @"\01?f@test2@@YAXAEBUA@1@@Z"
|
||||
}
|
||||
|
||||
// NORMAL-NOT: _Z17ExternAndInlineFnv
|
||||
// MSVCCOMPAT-LABEL: define weak_odr void @"\01?ExternAndInlineFn@@YAXXZ"
|
||||
// MSVCCOMPAT-LABEL: define weak_odr dso_local void @"\01?ExternAndInlineFn@@YAXXZ"
|
||||
extern inline void ExternAndInlineFn() {}
|
||||
|
||||
// NORMAL-NOT: _Z18InlineThenExternFnv
|
||||
// MSVCCOMPAT-LABEL: define weak_odr void @"\01?InlineThenExternFn@@YAXXZ"
|
||||
// MSVCCOMPAT-LABEL: define weak_odr dso_local void @"\01?InlineThenExternFn@@YAXXZ"
|
||||
inline void InlineThenExternFn() {}
|
||||
extern void InlineThenExternFn();
|
||||
|
||||
// NORMAL-LABEL: define void @_Z18ExternThenInlineFnv
|
||||
// MSVCCOMPAT-LABEL: define void @"\01?ExternThenInlineFn@@YAXXZ"
|
||||
// MSVCCOMPAT-LABEL: define dso_local void @"\01?ExternThenInlineFn@@YAXXZ"
|
||||
extern void ExternThenInlineFn() {}
|
||||
|
||||
// NORMAL-NOT: _Z25ExternThenInlineThenDefFnv
|
||||
// MSVCCOMPAT-LABEL: define weak_odr void @"\01?ExternThenInlineThenDefFn@@YAXXZ"
|
||||
// MSVCCOMPAT-LABEL: define weak_odr dso_local void @"\01?ExternThenInlineThenDefFn@@YAXXZ"
|
||||
extern void ExternThenInlineThenDefFn();
|
||||
inline void ExternThenInlineThenDefFn();
|
||||
void ExternThenInlineThenDefFn() {}
|
||||
|
||||
// NORMAL-NOT: _Z25InlineThenExternThenDefFnv
|
||||
// MSVCCOMPAT-LABEL: define weak_odr void @"\01?InlineThenExternThenDefFn@@YAXXZ"
|
||||
// MSVCCOMPAT-LABEL: define weak_odr dso_local void @"\01?InlineThenExternThenDefFn@@YAXXZ"
|
||||
inline void InlineThenExternThenDefFn();
|
||||
extern void InlineThenExternThenDefFn();
|
||||
void InlineThenExternThenDefFn() {}
|
||||
|
||||
// NORMAL-NOT: _Z17ExternAndConstexprFnv
|
||||
// MSVCCOMPAT-LABEL: define weak_odr i32 @"\01?ExternAndConstexprFn@@YAHXZ"
|
||||
// MSVCCOMPAT-LABEL: define weak_odr dso_local i32 @"\01?ExternAndConstexprFn@@YAHXZ"
|
||||
extern constexpr int ExternAndConstexprFn() { return 0; }
|
||||
|
||||
// NORMAL-NOT: _Z11ConstexprFnv
|
||||
|
@ -112,7 +112,7 @@ template <typename T>
|
|||
extern inline void ExternInlineOnPrimaryTemplate(T);
|
||||
|
||||
// NORMAL-LABEL: define void @_Z29ExternInlineOnPrimaryTemplateIiEvT_
|
||||
// MSVCCOMPAT-LABEL: define void @"\01??$ExternInlineOnPrimaryTemplate@H@@YAXH@Z"
|
||||
// MSVCCOMPAT-LABEL: define dso_local void @"\01??$ExternInlineOnPrimaryTemplate@H@@YAXH@Z"
|
||||
template <>
|
||||
void ExternInlineOnPrimaryTemplate(int) {}
|
||||
|
||||
|
@ -120,7 +120,7 @@ template <typename T>
|
|||
extern inline void ExternInlineOnPrimaryTemplateAndSpecialization(T);
|
||||
|
||||
// NORMAL-NOT: _Z46ExternInlineOnPrimaryTemplateAndSpecializationIiEvT_
|
||||
// MSVCCOMPAT-LABEL: define weak_odr void @"\01??$ExternInlineOnPrimaryTemplateAndSpecialization@H@@YAXH@Z"
|
||||
// MSVCCOMPAT-LABEL: define weak_odr dso_local void @"\01??$ExternInlineOnPrimaryTemplateAndSpecialization@H@@YAXH@Z"
|
||||
template <>
|
||||
extern inline void ExternInlineOnPrimaryTemplateAndSpecialization(int) {}
|
||||
|
||||
|
@ -146,5 +146,5 @@ struct S {
|
|||
|
||||
__attribute__((used)) inline S<int> Foo() { return S<int>(); }
|
||||
// NORMAL-LABEL: define linkonce_odr void @_ZN7PR229593FooEv(
|
||||
// MSVCCOMPAT-LABEL: define linkonce_odr i8 @"\01?Foo@PR22959@@YA?AU?$S@H@1@XZ"(
|
||||
// MSVCCOMPAT-LABEL: define linkonce_odr dso_local i8 @"\01?Foo@PR22959@@YA?AU?$S@H@1@XZ"(
|
||||
}
|
||||
|
|
|
@ -322,13 +322,13 @@ void unaligned_foo8_S::unaligned_foo8() volatile __unaligned {}
|
|||
|
||||
namespace PR31197 {
|
||||
struct A {
|
||||
// CHECK-DAG: define linkonce_odr x86_thiscallcc i32* @"\01??R<lambda_1>@x@A@PR31197@@QBE@XZ"(
|
||||
// CHECK-DAG: define linkonce_odr dso_local x86_thiscallcc i32* @"\01??R<lambda_1>@x@A@PR31197@@QBE@XZ"(
|
||||
int *x = []() {
|
||||
static int white;
|
||||
// CHECK-DAG: @"\01?white@?1???R<lambda_1>@x@A@PR31197@@QBE@XZ@4HA"
|
||||
return &white;
|
||||
}();
|
||||
// CHECK-DAG: define linkonce_odr x86_thiscallcc i32* @"\01??R<lambda_1>@y@A@PR31197@@QBE@XZ"(
|
||||
// CHECK-DAG: define linkonce_odr dso_local x86_thiscallcc i32* @"\01??R<lambda_1>@y@A@PR31197@@QBE@XZ"(
|
||||
int *y = []() {
|
||||
static int black;
|
||||
// CHECK-DAG: @"\01?black@?1???R<lambda_1>@y@A@PR31197@@QBE@XZ@4HA"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -o - -triple i686-pc-win32 %s | FileCheck %s
|
||||
int xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx;
|
||||
// CHECK-DAG: @"\01??@bf7ea7b95f260b0b24e7f1e8fc8370ab@" = global i32 0, align 4
|
||||
// CHECK-DAG: @"\01??@bf7ea7b95f260b0b24e7f1e8fc8370ab@" = dso_local global i32 0, align 4
|
||||
|
||||
struct yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy {
|
||||
yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy();
|
||||
|
|
|
@ -57,4 +57,4 @@ template struct ClassTemplate<&MostGeneral::h>;
|
|||
|
||||
// Test that we mangle in the vbptr offset, which is 12 here.
|
||||
//
|
||||
// CHECK: define weak_odr x86_thiscallcc %struct.ClassTemplate* @"\01??0?$ClassTemplate@$J??_9MostGeneral@@$BA@AEA@M@3@@QAE@XZ"
|
||||
// CHECK: define weak_odr dso_local x86_thiscallcc %struct.ClassTemplate* @"\01??0?$ClassTemplate@$J??_9MostGeneral@@$BA@AEA@M@3@@QAE@XZ"
|
||||
|
|
|
@ -5,33 +5,33 @@
|
|||
#include <immintrin.h>
|
||||
|
||||
void foo64(__m64) {}
|
||||
// CHECK: define void @"\01?foo64@@YAXT__m64@@@Z"
|
||||
// CHECK: define dso_local void @"\01?foo64@@YAXT__m64@@@Z"
|
||||
|
||||
void foo128(__m128) {}
|
||||
// CHECK: define void @"\01?foo128@@YAXT__m128@@@Z"
|
||||
// CHECK: define dso_local void @"\01?foo128@@YAXT__m128@@@Z"
|
||||
|
||||
void foo128d(__m128d) {}
|
||||
// CHECK: define void @"\01?foo128d@@YAXU__m128d@@@Z"
|
||||
// CHECK: define dso_local void @"\01?foo128d@@YAXU__m128d@@@Z"
|
||||
|
||||
void foo128i(__m128i) {}
|
||||
// CHECK: define void @"\01?foo128i@@YAXT__m128i@@@Z"
|
||||
// CHECK: define dso_local void @"\01?foo128i@@YAXT__m128i@@@Z"
|
||||
|
||||
void foo256(__m256) {}
|
||||
// CHECK: define void @"\01?foo256@@YAXT__m256@@@Z"
|
||||
// CHECK: define dso_local void @"\01?foo256@@YAXT__m256@@@Z"
|
||||
|
||||
void foo256d(__m256d) {}
|
||||
// CHECK: define void @"\01?foo256d@@YAXU__m256d@@@Z"
|
||||
// CHECK: define dso_local void @"\01?foo256d@@YAXU__m256d@@@Z"
|
||||
|
||||
void foo256i(__m256i) {}
|
||||
// CHECK: define void @"\01?foo256i@@YAXT__m256i@@@Z"
|
||||
// CHECK: define dso_local void @"\01?foo256i@@YAXT__m256i@@@Z"
|
||||
|
||||
// We have a custom mangling for vector types not standardized by Intel.
|
||||
void foov8hi(__v8hi) {}
|
||||
// CHECK: define void @"\01?foov8hi@@YAXT?$__vector@F$07@__clang@@@Z"
|
||||
// CHECK: define dso_local void @"\01?foov8hi@@YAXT?$__vector@F$07@__clang@@@Z"
|
||||
|
||||
typedef __attribute__((ext_vector_type(4))) int vi4b;
|
||||
void foovi4b(vi4b) {}
|
||||
// CHECK: define void @"\01?foovi4b@@YAXT?$__vector@H$03@__clang@@@Z"
|
||||
// CHECK: define dso_local void @"\01?foovi4b@@YAXT?$__vector@H$03@__clang@@@Z"
|
||||
|
||||
// Clang does not support vectors of complex types, so we can't test the
|
||||
// mangling of them.
|
||||
|
|
|
@ -27,8 +27,8 @@ int _c(void) {return N::anonymous + c;}
|
|||
// X64-DAG: @"\01?_c@@YAHXZ"
|
||||
|
||||
const int &NeedsReferenceTemporary = 2;
|
||||
// CHECK-DAG: @"\01?NeedsReferenceTemporary@@3ABHB" = constant i32* @"\01?$RT1@NeedsReferenceTemporary@@3ABHB"
|
||||
// X64-DAG: @"\01?NeedsReferenceTemporary@@3AEBHEB" = constant i32* @"\01?$RT1@NeedsReferenceTemporary@@3AEBHEB"
|
||||
// CHECK-DAG: @"\01?NeedsReferenceTemporary@@3ABHB" = dso_local constant i32* @"\01?$RT1@NeedsReferenceTemporary@@3ABHB"
|
||||
// X64-DAG: @"\01?NeedsReferenceTemporary@@3AEBHEB" = dso_local constant i32* @"\01?$RT1@NeedsReferenceTemporary@@3AEBHEB"
|
||||
|
||||
class foo {
|
||||
static const short d;
|
||||
|
@ -448,22 +448,22 @@ namespace PassObjectSize {
|
|||
// void foo(void *const, __clang::__pass_object_size0);
|
||||
// where __clang is a top-level namespace.
|
||||
|
||||
// CHECK-DAG: define i32 @"\01?foo@PassObjectSize@@YAHQAHW4__pass_object_size0@__clang@@@Z"
|
||||
// CHECK-DAG: define dso_local i32 @"\01?foo@PassObjectSize@@YAHQAHW4__pass_object_size0@__clang@@@Z"
|
||||
int foo(int *const i __attribute__((pass_object_size(0)))) { return 0; }
|
||||
// CHECK-DAG: define i32 @"\01?bar@PassObjectSize@@YAHQAHW4__pass_object_size1@__clang@@@Z"
|
||||
// CHECK-DAG: define dso_local i32 @"\01?bar@PassObjectSize@@YAHQAHW4__pass_object_size1@__clang@@@Z"
|
||||
int bar(int *const i __attribute__((pass_object_size(1)))) { return 0; }
|
||||
// CHECK-DAG: define i32 @"\01?qux@PassObjectSize@@YAHQAHW4__pass_object_size1@__clang@@0W4__pass_object_size0@3@@Z"
|
||||
// CHECK-DAG: define dso_local i32 @"\01?qux@PassObjectSize@@YAHQAHW4__pass_object_size1@__clang@@0W4__pass_object_size0@3@@Z"
|
||||
int qux(int *const i __attribute__((pass_object_size(1))), int *const j __attribute__((pass_object_size(0)))) { return 0; }
|
||||
// CHECK-DAG: define i32 @"\01?zot@PassObjectSize@@YAHQAHW4__pass_object_size1@__clang@@01@Z"
|
||||
// CHECK-DAG: define dso_local i32 @"\01?zot@PassObjectSize@@YAHQAHW4__pass_object_size1@__clang@@01@Z"
|
||||
int zot(int *const i __attribute__((pass_object_size(1))), int *const j __attribute__((pass_object_size(1)))) { return 0; }
|
||||
}
|
||||
|
||||
namespace Atomic {
|
||||
// CHECK-DAG: define void @"\01?f@Atomic@@YAXU?$_Atomic@H@__clang@@@Z"(
|
||||
// CHECK-DAG: define dso_local void @"\01?f@Atomic@@YAXU?$_Atomic@H@__clang@@@Z"(
|
||||
void f(_Atomic(int)) {}
|
||||
}
|
||||
namespace Complex {
|
||||
// CHECK-DAG: define void @"\01?f@Complex@@YAXU?$_Complex@H@__clang@@@Z"(
|
||||
// CHECK-DAG: define dso_local void @"\01?f@Complex@@YAXU?$_Complex@H@__clang@@@Z"(
|
||||
void f(_Complex int) {}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,20 +5,20 @@
|
|||
// RUN: FileCheck --check-prefix=ITANIUM %s
|
||||
|
||||
void __stdcall f1(void) {}
|
||||
// WIN: define x86_stdcallcc void @"\01?f1@@YGXXZ"
|
||||
// ITANIUM: define x86_stdcallcc void @"\01__Z2f1v@0"
|
||||
// WIN: define dso_local x86_stdcallcc void @"\01?f1@@YGXXZ"
|
||||
// ITANIUM: define dso_local x86_stdcallcc void @"\01__Z2f1v@0"
|
||||
|
||||
void __fastcall f2(void) {}
|
||||
// WIN: define x86_fastcallcc void @"\01?f2@@YIXXZ"
|
||||
// ITANIUM: define x86_fastcallcc void @"\01@_Z2f2v@0"
|
||||
// WIN: define dso_local x86_fastcallcc void @"\01?f2@@YIXXZ"
|
||||
// ITANIUM: define dso_local x86_fastcallcc void @"\01@_Z2f2v@0"
|
||||
|
||||
extern "C" void __stdcall f3(void) {}
|
||||
// WIN: define x86_stdcallcc void @"\01_f3@0"
|
||||
// ITANIUM: define x86_stdcallcc void @"\01_f3@0"
|
||||
// WIN: define dso_local x86_stdcallcc void @"\01_f3@0"
|
||||
// ITANIUM: define dso_local x86_stdcallcc void @"\01_f3@0"
|
||||
|
||||
extern "C" void __fastcall f4(void) {}
|
||||
// WIN: define x86_fastcallcc void @"\01@f4@0"
|
||||
// ITANIUM: define x86_fastcallcc void @"\01@f4@0"
|
||||
// WIN: define dso_local x86_fastcallcc void @"\01@f4@0"
|
||||
// ITANIUM: define dso_local x86_fastcallcc void @"\01@f4@0"
|
||||
|
||||
struct Foo {
|
||||
void __stdcall foo();
|
||||
|
@ -26,17 +26,17 @@ struct Foo {
|
|||
};
|
||||
|
||||
void Foo::foo() {}
|
||||
// WIN: define x86_stdcallcc void @"\01?foo@Foo@@QAGXXZ"
|
||||
// ITANIUM: define x86_stdcallcc void @"\01__ZN3Foo3fooEv@4"
|
||||
// WIN: define dso_local x86_stdcallcc void @"\01?foo@Foo@@QAGXXZ"
|
||||
// ITANIUM: define dso_local x86_stdcallcc void @"\01__ZN3Foo3fooEv@4"
|
||||
|
||||
void Foo::bar() {}
|
||||
// WIN: define x86_stdcallcc void @"\01?bar@Foo@@SGXXZ"
|
||||
// ITANIUM: define x86_stdcallcc void @"\01__ZN3Foo3barEv@0"
|
||||
// WIN: define dso_local x86_stdcallcc void @"\01?bar@Foo@@SGXXZ"
|
||||
// ITANIUM: define dso_local x86_stdcallcc void @"\01__ZN3Foo3barEv@0"
|
||||
|
||||
// Mostly a test that we don't crash and that the names start with a \01.
|
||||
// gcc on mingw produces __Zpp@4
|
||||
// cl produces _++@4
|
||||
extern "C" void __stdcall operator++(Foo &x) {
|
||||
}
|
||||
// WIN: define x86_stdcallcc void @"\01??E@YGXAAUFoo@@@Z"
|
||||
// ITANIUM: define x86_stdcallcc void @"\01__ZppR3Foo@4"
|
||||
// WIN: define dso_local x86_stdcallcc void @"\01??E@YGXAAUFoo@@@Z"
|
||||
// ITANIUM: define dso_local x86_stdcallcc void @"\01__ZppR3Foo@4"
|
||||
|
|
|
@ -11,7 +11,7 @@ int f(A* a, int (A::*fp)()) {
|
|||
|
||||
// CHECK-LABEL: define i32 @_Z2g1v()
|
||||
// CHECK: ret i32 1
|
||||
// MINGW64-LABEL: define i32 @_Z2g1v()
|
||||
// MINGW64-LABEL: define dso_local i32 @_Z2g1v()
|
||||
// MINGW64: call i32 @_Z1fP1AMS_FivE(%struct.A* %{{.*}}, { i64, i64 }* %{{.*}})
|
||||
int g1() {
|
||||
A a;
|
||||
|
@ -20,7 +20,7 @@ int g1() {
|
|||
|
||||
// CHECK-LABEL: define i32 @_Z2g2v()
|
||||
// CHECK: ret i32 2
|
||||
// MINGW64-LABEL: define i32 @_Z2g2v()
|
||||
// MINGW64-LABEL: define dso_local i32 @_Z2g2v()
|
||||
// MINGW64: call i32 @_Z1fP1AMS_FivE(%struct.A* %{{.*}}, { i64, i64 }* %{{.*}})
|
||||
int g2() {
|
||||
A a;
|
||||
|
|
|
@ -13,7 +13,7 @@ void foo(A a, A b, A c) {
|
|||
|
||||
// Order of destruction should be left to right.
|
||||
//
|
||||
// X86-LABEL: define void @"\01?foo@@YAXUA@@00@Z"
|
||||
// X86-LABEL: define dso_local void @"\01?foo@@YAXUA@@00@Z"
|
||||
// X86: ([[argmem_ty:<{ %struct.A, %struct.A, %struct.A }>]]* inalloca)
|
||||
// X86: %[[a:[^ ]*]] = getelementptr inbounds [[argmem_ty]], [[argmem_ty]]* %0, i32 0, i32 0
|
||||
// X86: %[[b:[^ ]*]] = getelementptr inbounds [[argmem_ty]], [[argmem_ty]]* %0, i32 0, i32 1
|
||||
|
@ -23,7 +23,7 @@ void foo(A a, A b, A c) {
|
|||
// X86: call x86_thiscallcc void @"\01??1A@@QAE@XZ"(%struct.A* %[[c]])
|
||||
// X86: ret void
|
||||
|
||||
// X64-LABEL: define void @"\01?foo@@YAXUA@@00@Z"
|
||||
// X64-LABEL: define dso_local void @"\01?foo@@YAXUA@@00@Z"
|
||||
// X64: (%struct.A* %[[a:[^,]*]], %struct.A* %[[b:[^,]*]], %struct.A* %[[c:[^)]*]])
|
||||
// X64: call void @"\01??1A@@QEAA@XZ"(%struct.A* %[[a]])
|
||||
// X64: call void @"\01??1A@@QEAA@XZ"(%struct.A* %[[b]])
|
||||
|
@ -38,7 +38,7 @@ void call_foo() {
|
|||
// Order of evaluation should be right to left, and we should clean up the right
|
||||
// things as we unwind.
|
||||
//
|
||||
// X86-LABEL: define void @"\01?call_foo@@YAXXZ"()
|
||||
// X86-LABEL: define dso_local void @"\01?call_foo@@YAXXZ"()
|
||||
// X86: call i8* @llvm.stacksave()
|
||||
// X86: %[[argmem:[^ ]*]] = alloca inalloca [[argmem_ty]]
|
||||
// X86: %[[arg3:[^ ]*]] = getelementptr inbounds [[argmem_ty]], [[argmem_ty]]* %[[argmem]], i32 0, i32 2
|
||||
|
@ -59,7 +59,7 @@ void call_foo() {
|
|||
// ehcleanup:
|
||||
// X86: call x86_thiscallcc void @"\01??1A@@QAE@XZ"(%struct.A* %[[arg3]])
|
||||
|
||||
// X64-LABEL: define void @"\01?call_foo@@YAXXZ"()
|
||||
// X64-LABEL: define dso_local void @"\01?call_foo@@YAXXZ"()
|
||||
// X64: call %struct.A* @"\01??0A@@QEAA@H@Z"(%struct.A* %[[arg3:[^,]*]], i32 3)
|
||||
// X64: invoke %struct.A* @"\01??0A@@QEAA@H@Z"(%struct.A* %[[arg2:[^,]*]], i32 2)
|
||||
// X64: invoke %struct.A* @"\01??0A@@QEAA@H@Z"(%struct.A* %[[arg1:[^,]*]], i32 1)
|
||||
|
|
|
@ -5,7 +5,7 @@ struct ClassWithoutDtor {
|
|||
};
|
||||
|
||||
void check_array_no_cookies() {
|
||||
// CHECK: define void @"\01?check_array_no_cookies@@YAXXZ"() [[NUW:#[0-9]+]]
|
||||
// CHECK: define dso_local void @"\01?check_array_no_cookies@@YAXXZ"() [[NUW:#[0-9]+]]
|
||||
|
||||
// CHECK: call i8* @"\01??_U@YAPAXI@Z"(i32 42)
|
||||
ClassWithoutDtor *array = new ClassWithoutDtor[42];
|
||||
|
@ -62,7 +62,7 @@ namespace PR23990 {
|
|||
struct S {
|
||||
char x[42];
|
||||
void operator delete[](void *p, __SIZE_TYPE__);
|
||||
// CHECK-LABEL: define void @"\01?delete_s@PR23990@@YAXPAUS@1@@Z"(
|
||||
// CHECK-LABEL: define dso_local void @"\01?delete_s@PR23990@@YAXPAUS@1@@Z"(
|
||||
// CHECK: call void @"\01??_VS@PR23990@@SAXPAXI@Z"(i8* {{.*}}, i32 42)
|
||||
};
|
||||
void delete_s(S *s) { delete[] s; }
|
||||
|
|
|
@ -18,7 +18,7 @@ A B::foo(A x) {
|
|||
return x;
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define x86_thiscallcc %struct.A* @"\01?foo@B@@QAE?AUA@@U2@@Z"
|
||||
// CHECK-LABEL: define dso_local x86_thiscallcc %struct.A* @"\01?foo@B@@QAE?AUA@@U2@@Z"
|
||||
// CHECK: (%struct.B* %this, <{ %struct.A*, %struct.A }>* inalloca)
|
||||
// CHECK: getelementptr inbounds <{ %struct.A*, %struct.A }>, <{ %struct.A*, %struct.A }>* %{{.*}}, i32 0, i32 0
|
||||
// CHECK: load %struct.A*, %struct.A**
|
||||
|
@ -28,7 +28,7 @@ A B::bar(A x) {
|
|||
return x;
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define %struct.A* @"\01?bar@B@@QAA?AUA@@U2@@Z"
|
||||
// CHECK-LABEL: define dso_local %struct.A* @"\01?bar@B@@QAA?AUA@@U2@@Z"
|
||||
// CHECK: (<{ %struct.B*, %struct.A*, %struct.A }>* inalloca)
|
||||
// CHECK: getelementptr inbounds <{ %struct.B*, %struct.A*, %struct.A }>, <{ %struct.B*, %struct.A*, %struct.A }>* %{{.*}}, i32 0, i32 1
|
||||
// CHECK: load %struct.A*, %struct.A**
|
||||
|
@ -38,7 +38,7 @@ A B::baz(A x) {
|
|||
return x;
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define x86_stdcallcc %struct.A* @"\01?baz@B@@QAG?AUA@@U2@@Z"
|
||||
// CHECK-LABEL: define dso_local x86_stdcallcc %struct.A* @"\01?baz@B@@QAG?AUA@@U2@@Z"
|
||||
// CHECK: (<{ %struct.B*, %struct.A*, %struct.A }>* inalloca)
|
||||
// CHECK: getelementptr inbounds <{ %struct.B*, %struct.A*, %struct.A }>, <{ %struct.B*, %struct.A*, %struct.A }>* %{{.*}}, i32 0, i32 1
|
||||
// CHECK: load %struct.A*, %struct.A**
|
||||
|
@ -48,7 +48,7 @@ A B::qux(A x) {
|
|||
return x;
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define x86_fastcallcc void @"\01?qux@B@@QAI?AUA@@U2@@Z"
|
||||
// CHECK-LABEL: define dso_local x86_fastcallcc void @"\01?qux@B@@QAI?AUA@@U2@@Z"
|
||||
// CHECK: (%struct.B* inreg %this, %struct.A* inreg noalias sret %agg.result, <{ %struct.A }>* inalloca)
|
||||
// CHECK: ret void
|
||||
|
||||
|
|
|
@ -14,14 +14,14 @@ struct B { virtual void foo(Agg x); };
|
|||
struct C : A, B { C(); virtual void foo(Agg x); };
|
||||
C::C() {} // force emission
|
||||
|
||||
// CHECK32-LABEL: define linkonce_odr x86_thiscallcc void @"\01?foo@C@byval_thunk@@W3AEXUAgg@2@@Z"
|
||||
// CHECK32-LABEL: define linkonce_odr dso_local x86_thiscallcc void @"\01?foo@C@byval_thunk@@W3AEXUAgg@2@@Z"
|
||||
// CHECK32: (%"struct.byval_thunk::C"* %this, <{ %"struct.byval_thunk::Agg" }>* inalloca)
|
||||
// CHECK32: getelementptr i8, i8* %{{.*}}, i32 -4
|
||||
// CHECK32: musttail call x86_thiscallcc void @"\01?foo@C@byval_thunk@@UAEXUAgg@2@@Z"
|
||||
// CHECK32: (%"struct.byval_thunk::C"* %{{.*}}, <{ %"struct.byval_thunk::Agg" }>* inalloca %0)
|
||||
// CHECK32-NEXT: ret void
|
||||
|
||||
// CHECK64-LABEL: define linkonce_odr void @"\01?foo@C@byval_thunk@@W7EAAXUAgg@2@@Z"
|
||||
// CHECK64-LABEL: define linkonce_odr dso_local void @"\01?foo@C@byval_thunk@@W7EAAXUAgg@2@@Z"
|
||||
// CHECK64: (%"struct.byval_thunk::C"* %this, %"struct.byval_thunk::Agg"* %x)
|
||||
// CHECK64: getelementptr i8, i8* %{{.*}}, i32 -8
|
||||
// CHECK64: call void @"\01?foo@C@byval_thunk@@UEAAXUAgg@2@@Z"
|
||||
|
@ -43,7 +43,7 @@ struct B { virtual void __stdcall foo(Agg x); };
|
|||
struct C : A, B { C(); virtual void __stdcall foo(Agg x); };
|
||||
C::C() {} // force emission
|
||||
|
||||
// CHECK32-LABEL: define linkonce_odr x86_stdcallcc void @"\01?foo@C@stdcall_thunk@@W3AGXUAgg@2@@Z"
|
||||
// CHECK32-LABEL: define linkonce_odr dso_local x86_stdcallcc void @"\01?foo@C@stdcall_thunk@@W3AGXUAgg@2@@Z"
|
||||
// CHECK32: (<{ %"struct.stdcall_thunk::C"*, %"struct.stdcall_thunk::Agg" }>* inalloca)
|
||||
// CHECK32: %[[this_slot:[^ ]*]] = getelementptr inbounds <{ %"struct.stdcall_thunk::C"*, %"struct.stdcall_thunk::Agg" }>, <{ %"struct.stdcall_thunk::C"*, %"struct.stdcall_thunk::Agg" }>* %0, i32 0, i32 0
|
||||
// CHECK32: load %"struct.stdcall_thunk::C"*, %"struct.stdcall_thunk::C"** %[[this_slot]]
|
||||
|
@ -53,7 +53,7 @@ C::C() {} // force emission
|
|||
// CHECK32: (<{ %"struct.stdcall_thunk::C"*, %"struct.stdcall_thunk::Agg" }>* inalloca %0)
|
||||
// CHECK32-NEXT: ret void
|
||||
|
||||
// CHECK64-LABEL: define linkonce_odr void @"\01?foo@C@stdcall_thunk@@W7EAAXUAgg@2@@Z"
|
||||
// CHECK64-LABEL: define linkonce_odr dso_local void @"\01?foo@C@stdcall_thunk@@W7EAAXUAgg@2@@Z"
|
||||
// CHECK64: (%"struct.stdcall_thunk::C"* %this, %"struct.stdcall_thunk::Agg"* %x)
|
||||
// CHECK64: getelementptr i8, i8* %{{.*}}, i32 -8
|
||||
// CHECK64: call void @"\01?foo@C@stdcall_thunk@@UEAAXUAgg@2@@Z"
|
||||
|
@ -75,7 +75,7 @@ struct B { virtual Agg __cdecl foo(Agg x); };
|
|||
struct C : A, B { C(); virtual Agg __cdecl foo(Agg x); };
|
||||
C::C() {} // force emission
|
||||
|
||||
// CHECK32-LABEL: define linkonce_odr %"struct.sret_thunk::Agg"* @"\01?foo@C@sret_thunk@@W3AA?AUAgg@2@U32@@Z"
|
||||
// CHECK32-LABEL: define linkonce_odr dso_local %"struct.sret_thunk::Agg"* @"\01?foo@C@sret_thunk@@W3AA?AUAgg@2@U32@@Z"
|
||||
// CHECK32: (<{ %"struct.sret_thunk::C"*, %"struct.sret_thunk::Agg"*, %"struct.sret_thunk::Agg" }>* inalloca)
|
||||
// CHECK32: %[[this_slot:[^ ]*]] = getelementptr inbounds <{ %"struct.sret_thunk::C"*, %"struct.sret_thunk::Agg"*, %"struct.sret_thunk::Agg" }>, <{ %"struct.sret_thunk::C"*, %"struct.sret_thunk::Agg"*, %"struct.sret_thunk::Agg" }>* %0, i32 0, i32 0
|
||||
// CHECK32: load %"struct.sret_thunk::C"*, %"struct.sret_thunk::C"** %[[this_slot]]
|
||||
|
@ -85,7 +85,7 @@ C::C() {} // force emission
|
|||
// CHECK32: (<{ %"struct.sret_thunk::C"*, %"struct.sret_thunk::Agg"*, %"struct.sret_thunk::Agg" }>* inalloca %0)
|
||||
// CHECK32-NEXT: ret %"struct.sret_thunk::Agg"* %[[rv]]
|
||||
|
||||
// CHECK64-LABEL: define linkonce_odr void @"\01?foo@C@sret_thunk@@W7EAA?AUAgg@2@U32@@Z"
|
||||
// CHECK64-LABEL: define linkonce_odr dso_local void @"\01?foo@C@sret_thunk@@W7EAA?AUAgg@2@U32@@Z"
|
||||
// CHECK64: (%"struct.sret_thunk::C"* %this, %"struct.sret_thunk::Agg"* noalias sret %agg.result, %"struct.sret_thunk::Agg"* %x)
|
||||
// CHECK64: getelementptr i8, i8* %{{.*}}, i32 -8
|
||||
// CHECK64: call void @"\01?foo@C@sret_thunk@@UEAA?AUAgg@2@U32@@Z"
|
||||
|
|
|
@ -19,12 +19,12 @@ int foo(A a, ...) {
|
|||
return sum;
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define i32 @"\01?foo@@YAHUA@@ZZ"(<{ %struct.A }>* inalloca, ...)
|
||||
// CHECK-LABEL: define dso_local i32 @"\01?foo@@YAHUA@@ZZ"(<{ %struct.A }>* inalloca, ...)
|
||||
|
||||
int main() {
|
||||
return foo(A(3), 1, 2, 3);
|
||||
}
|
||||
// CHECK-LABEL: define i32 @main()
|
||||
// CHECK-LABEL: define dso_local i32 @main()
|
||||
// CHECK: %[[argmem:[^ ]*]] = alloca inalloca <{ %struct.A, i32, i32, i32 }>
|
||||
// CHECK: call i32 {{.*bitcast.*}}@"\01?foo@@YAHUA@@ZZ"{{.*}}(<{ %struct.A, i32, i32, i32 }>* inalloca %[[argmem]])
|
||||
|
||||
|
@ -40,13 +40,13 @@ void call_var_args() {
|
|||
varargs_three(1, 2, 3, x);
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @"\01?call_var_args@@YAXXZ"()
|
||||
// CHECK-LABEL: define dso_local void @"\01?call_var_args@@YAXXZ"()
|
||||
// CHECK: call void {{.*bitcast.*varargs_zero.*}}(<{ %struct.A }>* inalloca %{{.*}})
|
||||
// CHECK: call void {{.*bitcast.*varargs_one.*}}(<{ i32, %struct.A }>* inalloca %{{.*}})
|
||||
// CHECK: call void {{.*bitcast.*varargs_two.*}}(<{ i32, i32, %struct.A }>* inalloca %{{.*}})
|
||||
// CHECK: call void {{.*bitcast.*varargs_three.*}}(<{ i32, i32, i32, %struct.A }>* inalloca %{{.*}})
|
||||
|
||||
// CHECK-LABEL: declare void @"\01?varargs_zero@@YAXZZ"(...)
|
||||
// CHECK-LABEL: declare void @"\01?varargs_one@@YAXHZZ"(i32, ...)
|
||||
// CHECK-LABEL: declare void @"\01?varargs_two@@YAXHHZZ"(i32, i32, ...)
|
||||
// CHECK-LABEL: declare void @"\01?varargs_three@@YAXHHHZZ"(i32, i32, i32, ...)
|
||||
// CHECK-LABEL: declare dso_local void @"\01?varargs_zero@@YAXZZ"(...)
|
||||
// CHECK-LABEL: declare dso_local void @"\01?varargs_one@@YAXHZZ"(i32, ...)
|
||||
// CHECK-LABEL: declare dso_local void @"\01?varargs_two@@YAXHHZZ"(i32, i32, ...)
|
||||
// CHECK-LABEL: declare dso_local void @"\01?varargs_three@@YAXHHHZZ"(i32, i32, i32, ...)
|
||||
|
|
|
@ -19,9 +19,9 @@ S C::variadic_sret(const char *f, ...) { return S(); }
|
|||
S C::cdecl_sret() { return S(); }
|
||||
S C::byval_and_sret(S a) { return S(); }
|
||||
|
||||
// CHECK: define void @"\01?variadic_sret@C@@QAA?AUS@@PBDZZ"(%struct.C* %this, %struct.S* noalias sret %agg.result, i8* %f, ...)
|
||||
// CHECK: define void @"\01?cdecl_sret@C@@QAA?AUS@@XZ"(%struct.C* %this, %struct.S* noalias sret %agg.result)
|
||||
// CHECK: define void @"\01?byval_and_sret@C@@QAA?AUS@@U2@@Z"(%struct.C* %this, %struct.S* noalias sret %agg.result, %struct.S* byval align 4 %a)
|
||||
// CHECK: define dso_local void @"\01?variadic_sret@C@@QAA?AUS@@PBDZZ"(%struct.C* %this, %struct.S* noalias sret %agg.result, i8* %f, ...)
|
||||
// CHECK: define dso_local void @"\01?cdecl_sret@C@@QAA?AUS@@XZ"(%struct.C* %this, %struct.S* noalias sret %agg.result)
|
||||
// CHECK: define dso_local void @"\01?byval_and_sret@C@@QAA?AUS@@U2@@Z"(%struct.C* %this, %struct.S* noalias sret %agg.result, %struct.S* byval align 4 %a)
|
||||
|
||||
int main() {
|
||||
C c;
|
||||
|
@ -29,7 +29,7 @@ int main() {
|
|||
c.cdecl_sret();
|
||||
c.byval_and_sret(S());
|
||||
}
|
||||
// CHECK-LABEL: define i32 @main()
|
||||
// CHECK-LABEL: define dso_local i32 @main()
|
||||
// CHECK: call void {{.*}} @"\01?variadic_sret@C@@QAA?AUS@@PBDZZ"
|
||||
// CHECK: call void @"\01?cdecl_sret@C@@QAA?AUS@@XZ"
|
||||
// CHECK: call void @"\01?byval_and_sret@C@@QAA?AUS@@U2@@Z"
|
||||
|
@ -41,4 +41,4 @@ struct A {
|
|||
S A::f(int x) {
|
||||
return S();
|
||||
}
|
||||
// CHECK-LABEL: define x86_fastcallcc void @"\01?f@A@@QAI?AUS@@H@Z"(%struct.A* inreg %this, %struct.S* inreg noalias sret %agg.result, i32 %x)
|
||||
// CHECK-LABEL: define dso_local x86_fastcallcc void @"\01?f@A@@QAI?AUS@@H@Z"(%struct.A* inreg %this, %struct.S* inreg noalias sret %agg.result, i32 %x)
|
||||
|
|
|
@ -7,7 +7,7 @@ struct A {
|
|||
};
|
||||
|
||||
A a(42);
|
||||
// CHECK: @"\01?a@@3UA@@A" = global { { [1 x i8*] }*, i32 } { { [1 x i8*] }* @"\01??_7A@@6B@", i32 42 }, align 4
|
||||
// CHECK: @"\01?a@@3UA@@A" = dso_local global { { [1 x i8*] }*, i32 } { { [1 x i8*] }* @"\01??_7A@@6B@", i32 42 }, align 4
|
||||
|
||||
struct B {
|
||||
constexpr B(int y) : y(y) {}
|
||||
|
@ -20,4 +20,4 @@ struct C : A, B {
|
|||
};
|
||||
|
||||
C c;
|
||||
// CHECK: @"\01?c@@3UC@@A" = global { { [1 x i8*] }*, i32, { [1 x i8*] }*, i32 } { { [1 x i8*] }* @"\01??_7C@@6BA@@@", i32 777, { [1 x i8*] }* @"\01??_7C@@6BB@@@", i32 13 }
|
||||
// CHECK: @"\01?c@@3UC@@A" = dso_local global { { [1 x i8*] }*, i32, { [1 x i8*] }*, i32 } { { [1 x i8*] }* @"\01??_7C@@6BA@@@", i32 777, { [1 x i8*] }* @"\01??_7C@@6BB@@@", i32 13 }
|
||||
|
|
|
@ -13,13 +13,13 @@ void foo();
|
|||
void __cdecl foo();
|
||||
void __cdecl foo() {}
|
||||
// GCABI-LABEL: define void @_Z3foov()
|
||||
// MSABI: define void @"\01?foo@@YAXXZ"
|
||||
// MSABI: define dso_local void @"\01?foo@@YAXXZ"
|
||||
|
||||
void __cdecl bar();
|
||||
void bar();
|
||||
void bar() {}
|
||||
// GCABI-LABEL: define void @_Z3barv()
|
||||
// MSABI: define void @"\01?bar@@YAXXZ"
|
||||
// MSABI: define dso_local void @"\01?bar@@YAXXZ"
|
||||
|
||||
// Test that it's OK to mark either the method declaration or method definition
|
||||
// with a default CC explicitly.
|
||||
|
@ -34,23 +34,23 @@ public:
|
|||
|
||||
void METHOD_CC A::baz() {}
|
||||
// GCABI-LABEL: define void @_ZN1A3bazEv
|
||||
// MSABI: define x86_thiscallcc void @"\01?baz@A@@QAEXXZ"
|
||||
// MSABI: define dso_local x86_thiscallcc void @"\01?baz@A@@QAEXXZ"
|
||||
void A::qux() {}
|
||||
// GCABI-LABEL: define void @_ZN1A3quxEv
|
||||
// MSABI: define x86_thiscallcc void @"\01?qux@A@@QAEXXZ"
|
||||
// MSABI: define dso_local x86_thiscallcc void @"\01?qux@A@@QAEXXZ"
|
||||
|
||||
void __cdecl static_baz() {}
|
||||
// GCABI-LABEL: define void @_Z10static_bazv
|
||||
// MSABI: define void @"\01?static_baz@@YAXXZ"
|
||||
// MSABI: define dso_local void @"\01?static_baz@@YAXXZ"
|
||||
void static_qux() {}
|
||||
// GCABI-LABEL: define void @_Z10static_quxv
|
||||
// MSABI: define void @"\01?static_qux@@YAXXZ"
|
||||
// MSABI: define dso_local void @"\01?static_qux@@YAXXZ"
|
||||
|
||||
namespace PR31656 {
|
||||
template <int I>
|
||||
void __cdecl callee(int args[I]);
|
||||
// GCABI-LABEL: declare void @_ZN7PR316566calleeILi1EEEvPi(
|
||||
// MSABI: declare void @"\01??$callee@$00@PR31656@@YAXQAH@Z"(
|
||||
// MSABI: declare dso_local void @"\01??$callee@$00@PR31656@@YAXQAH@Z"(
|
||||
|
||||
void caller() { callee<1>(0); }
|
||||
}
|
||||
|
|
|
@ -7,18 +7,18 @@ struct B : S, virtual V {};
|
|||
struct T {};
|
||||
|
||||
T* test0() { return dynamic_cast<T*>((B*)0); }
|
||||
// CHECK-LABEL: define noalias %struct.T* @"\01?test0@@YAPAUT@@XZ"()
|
||||
// CHECK-LABEL: define dso_local noalias %struct.T* @"\01?test0@@YAPAUT@@XZ"()
|
||||
// CHECK: ret %struct.T* null
|
||||
|
||||
T* test1(V* x) { return &dynamic_cast<T&>(*x); }
|
||||
// CHECK-LABEL: define %struct.T* @"\01?test1@@YAPAUT@@PAUV@@@Z"(%struct.V* %x)
|
||||
// CHECK-LABEL: define dso_local %struct.T* @"\01?test1@@YAPAUT@@PAUV@@@Z"(%struct.V* %x)
|
||||
// CHECK: [[CAST:%.*]] = bitcast %struct.V* %x to i8*
|
||||
// CHECK-NEXT: [[CALL:%.*]] = tail call i8* @__RTDynamicCast(i8* [[CAST]], i32 0, i8* bitcast (%rtti.TypeDescriptor7* @"\01??_R0?AUV@@@8" to i8*), i8* bitcast (%rtti.TypeDescriptor7* @"\01??_R0?AUT@@@8" to i8*), i32 1)
|
||||
// CHECK-NEXT: [[RET:%.*]] = bitcast i8* [[CALL]] to %struct.T*
|
||||
// CHECK-NEXT: ret %struct.T* [[RET]]
|
||||
|
||||
T* test2(A* x) { return &dynamic_cast<T&>(*x); }
|
||||
// CHECK-LABEL: define %struct.T* @"\01?test2@@YAPAUT@@PAUA@@@Z"(%struct.A* %x)
|
||||
// CHECK-LABEL: define dso_local %struct.T* @"\01?test2@@YAPAUT@@PAUA@@@Z"(%struct.A* %x)
|
||||
// CHECK: [[CAST:%.*]] = bitcast %struct.A* %x to i8*
|
||||
// CHECK-NEXT: [[VBPTRPTR:%.*]] = getelementptr inbounds %struct.A, %struct.A* %x, i32 0, i32 0
|
||||
// CHECK-NEXT: [[VBTBL:%.*]] = load i32*, i32** [[VBPTRPTR]], align 4
|
||||
|
@ -30,7 +30,7 @@ T* test2(A* x) { return &dynamic_cast<T&>(*x); }
|
|||
// CHECK-NEXT: ret %struct.T* [[RET]]
|
||||
|
||||
T* test3(B* x) { return &dynamic_cast<T&>(*x); }
|
||||
// CHECK-LABEL: define %struct.T* @"\01?test3@@YAPAUT@@PAUB@@@Z"(%struct.B* %x)
|
||||
// CHECK-LABEL: define dso_local %struct.T* @"\01?test3@@YAPAUT@@PAUB@@@Z"(%struct.B* %x)
|
||||
// CHECK: [[VOIDP:%.*]] = getelementptr inbounds %struct.B, %struct.B* %x, i32 0, i32 0, i32 0
|
||||
// CHECK-NEXT: [[VBPTR:%.*]] = getelementptr inbounds i8, i8* [[VOIDP]], i32 4
|
||||
// CHECK-NEXT: [[VBPTRPTR:%.*]] = bitcast i8* [[VBPTR:%.*]] to i32**
|
||||
|
@ -44,14 +44,14 @@ T* test3(B* x) { return &dynamic_cast<T&>(*x); }
|
|||
// CHECK-NEXT: ret %struct.T* [[RET]]
|
||||
|
||||
T* test4(V* x) { return dynamic_cast<T*>(x); }
|
||||
// CHECK-LABEL: define %struct.T* @"\01?test4@@YAPAUT@@PAUV@@@Z"(%struct.V* %x)
|
||||
// CHECK-LABEL: define dso_local %struct.T* @"\01?test4@@YAPAUT@@PAUV@@@Z"(%struct.V* %x)
|
||||
// CHECK: [[CAST:%.*]] = bitcast %struct.V* %x to i8*
|
||||
// CHECK-NEXT: [[CALL:%.*]] = tail call i8* @__RTDynamicCast(i8* [[CAST]], i32 0, i8* bitcast (%rtti.TypeDescriptor7* @"\01??_R0?AUV@@@8" to i8*), i8* bitcast (%rtti.TypeDescriptor7* @"\01??_R0?AUT@@@8" to i8*), i32 0)
|
||||
// CHECK-NEXT: [[RET:%.*]] = bitcast i8* [[CALL]] to %struct.T*
|
||||
// CHECK-NEXT: ret %struct.T* [[RET]]
|
||||
|
||||
T* test5(A* x) { return dynamic_cast<T*>(x); }
|
||||
// CHECK-LABEL: define %struct.T* @"\01?test5@@YAPAUT@@PAUA@@@Z"(%struct.A* %x)
|
||||
// CHECK-LABEL: define dso_local %struct.T* @"\01?test5@@YAPAUT@@PAUA@@@Z"(%struct.A* %x)
|
||||
// CHECK: [[CHECK:%.*]] = icmp eq %struct.A* %x, null
|
||||
// CHECK-NEXT: br i1 [[CHECK]]
|
||||
// CHECK: [[VOIDP:%.*]] = bitcast %struct.A* %x to i8*
|
||||
|
@ -67,7 +67,7 @@ T* test5(A* x) { return dynamic_cast<T*>(x); }
|
|||
// CHECK-NEXT: ret %struct.T* [[RET]]
|
||||
|
||||
T* test6(B* x) { return dynamic_cast<T*>(x); }
|
||||
// CHECK-LABEL: define %struct.T* @"\01?test6@@YAPAUT@@PAUB@@@Z"(%struct.B* %x)
|
||||
// CHECK-LABEL: define dso_local %struct.T* @"\01?test6@@YAPAUT@@PAUB@@@Z"(%struct.B* %x)
|
||||
// CHECK: [[CHECK:%.*]] = icmp eq %struct.B* %x, null
|
||||
// CHECK-NEXT: br i1 [[CHECK]]
|
||||
// CHECK: [[CAST:%.*]] = getelementptr inbounds %struct.B, %struct.B* %x, i32 0, i32 0, i32 0
|
||||
|
@ -85,13 +85,13 @@ T* test6(B* x) { return dynamic_cast<T*>(x); }
|
|||
// CHECK-NEXT: ret %struct.T* [[RET]]
|
||||
|
||||
void* test7(V* x) { return dynamic_cast<void*>(x); }
|
||||
// CHECK-LABEL: define i8* @"\01?test7@@YAPAXPAUV@@@Z"(%struct.V* %x)
|
||||
// CHECK-LABEL: define dso_local i8* @"\01?test7@@YAPAXPAUV@@@Z"(%struct.V* %x)
|
||||
// CHECK: [[CAST:%.*]] = bitcast %struct.V* %x to i8*
|
||||
// CHECK-NEXT: [[RET:%.*]] = tail call i8* @__RTCastToVoid(i8* [[CAST]])
|
||||
// CHECK-NEXT: ret i8* [[RET]]
|
||||
|
||||
void* test8(A* x) { return dynamic_cast<void*>(x); }
|
||||
// CHECK-LABEL: define i8* @"\01?test8@@YAPAXPAUA@@@Z"(%struct.A* %x)
|
||||
// CHECK-LABEL: define dso_local i8* @"\01?test8@@YAPAXPAUA@@@Z"(%struct.A* %x)
|
||||
// CHECK: [[CHECK:%.*]] = icmp eq %struct.A* %x, null
|
||||
// CHECK-NEXT: br i1 [[CHECK]]
|
||||
// CHECK: [[VOIDP:%.*]] = bitcast %struct.A* %x to i8*
|
||||
|
@ -106,7 +106,7 @@ void* test8(A* x) { return dynamic_cast<void*>(x); }
|
|||
// CHECK-NEXT: ret i8* [[RET]]
|
||||
|
||||
void* test9(B* x) { return dynamic_cast<void*>(x); }
|
||||
// CHECK-LABEL: define i8* @"\01?test9@@YAPAXPAUB@@@Z"(%struct.B* %x)
|
||||
// CHECK-LABEL: define dso_local i8* @"\01?test9@@YAPAXPAUB@@@Z"(%struct.B* %x)
|
||||
// CHECK: [[CHECK:%.*]] = icmp eq %struct.B* %x, null
|
||||
// CHECK-NEXT: br i1 [[CHECK]]
|
||||
// CHECK: [[CAST:%.*]] = getelementptr inbounds %struct.B, %struct.B* %x, i32 0, i32 0, i32 0
|
||||
|
@ -134,7 +134,7 @@ S3 *f(S2 &s) {
|
|||
Cleanup c;
|
||||
return dynamic_cast<S3 *>(&s);
|
||||
}
|
||||
// CHECK-LABEL: define %"struct.PR25606::S3"* @"\01?f@PR25606@@YAPAUS3@1@AAUS2@1@@Z"(
|
||||
// CHECK-LABEL: define dso_local %"struct.PR25606::S3"* @"\01?f@PR25606@@YAPAUS3@1@AAUS2@1@@Z"(
|
||||
// CHECK: [[CALL:%.*]] = invoke i8* @__RTDynamicCast
|
||||
|
||||
// CHECK: [[BC:%.*]] = bitcast i8* [[CALL]] to %"struct.PR25606::S3"*
|
||||
|
|
|
@ -17,7 +17,7 @@ extern "C" void catch_all() {
|
|||
}
|
||||
}
|
||||
|
||||
// WIN64-LABEL: define void @catch_all()
|
||||
// WIN64-LABEL: define dso_local void @catch_all()
|
||||
// WIN64: invoke void @might_throw()
|
||||
// WIN64-NEXT: to label %[[cont:[^ ]*]] unwind label %[[catchswitch_lpad:[^ ]*]]
|
||||
//
|
||||
|
@ -46,7 +46,7 @@ extern "C" void catch_int() {
|
|||
}
|
||||
}
|
||||
|
||||
// WIN64-LABEL: define void @catch_int()
|
||||
// WIN64-LABEL: define dso_local void @catch_int()
|
||||
// WIN64: catchpad within %{{[^ ]*}} [%rtti.TypeDescriptor2* @"\01??_R0H@8", i32 0, i32* %[[e_addr:[^\]]*]]]
|
||||
//
|
||||
// The catchpad instruction starts the lifetime of 'e'. Unfortunately, that
|
||||
|
@ -68,7 +68,7 @@ extern "C" void catch_int_unnamed() {
|
|||
}
|
||||
}
|
||||
|
||||
// WIN64-LABEL: define void @catch_int_unnamed()
|
||||
// WIN64-LABEL: define dso_local void @catch_int_unnamed()
|
||||
// WIN64: catchpad within %{{.*}} [%rtti.TypeDescriptor2* @"\01??_R0H@8", i32 0, i8* null]
|
||||
// WIN64: catchret
|
||||
|
||||
|
@ -94,7 +94,7 @@ extern "C" void catch_a_byval() {
|
|||
}
|
||||
}
|
||||
|
||||
// WIN64-LABEL: define void @catch_a_byval()
|
||||
// WIN64-LABEL: define dso_local void @catch_a_byval()
|
||||
// WIN64: %[[e_addr:[^ ]*]] = alloca %struct.A
|
||||
// WIN64: catchpad within %{{[^ ]*}} [%rtti.TypeDescriptor7* @"\01??_R0?AUA@@@8", i32 0, %struct.A* %[[e_addr]]]
|
||||
// WIN64: %[[e_i8:[^ ]*]] = bitcast %struct.A* %[[e_addr]] to i8*
|
||||
|
@ -109,7 +109,7 @@ extern "C" void catch_a_ref() {
|
|||
}
|
||||
}
|
||||
|
||||
// WIN64-LABEL: define void @catch_a_ref()
|
||||
// WIN64-LABEL: define dso_local void @catch_a_ref()
|
||||
// WIN64: %[[e_addr:[^ ]*]] = alloca %struct.A*
|
||||
// WIN64: catchpad within %{{[^ ]*}} [%rtti.TypeDescriptor7* @"\01??_R0?AUA@@@8", i32 8, %struct.A** %[[e_addr]]]
|
||||
// WIN64: %[[eptr:[^ ]*]] = load %struct.A*, %struct.A** %[[e_addr]]
|
||||
|
@ -121,7 +121,7 @@ extern "C" void fn_with_exc_spec() throw(int) {
|
|||
might_throw();
|
||||
}
|
||||
|
||||
// WIN64-LABEL: define void @fn_with_exc_spec()
|
||||
// WIN64-LABEL: define dso_local void @fn_with_exc_spec()
|
||||
// WIN64: call void @might_throw()
|
||||
// WIN64-NEXT: ret void
|
||||
|
||||
|
@ -137,7 +137,7 @@ extern "C" void catch_nested() {
|
|||
}
|
||||
}
|
||||
|
||||
// WIN64-LABEL: define void @catch_nested()
|
||||
// WIN64-LABEL: define dso_local void @catch_nested()
|
||||
// WIN64: invoke void @might_throw()
|
||||
// WIN64-NEXT: to label %{{.*}} unwind label %[[catchswitch_outer:[^ ]*]]
|
||||
//
|
||||
|
|
|
@ -15,7 +15,7 @@ void HasEHCleanup() {
|
|||
}
|
||||
|
||||
// With exceptions, we need to clean up at least one of these temporaries.
|
||||
// WIN32-LABEL: define void @"\01?HasEHCleanup@@YAXXZ"() {{.*}} {
|
||||
// WIN32-LABEL: define dso_local void @"\01?HasEHCleanup@@YAXXZ"() {{.*}} {
|
||||
// WIN32: %[[base:.*]] = call i8* @llvm.stacksave()
|
||||
// If this call throws, we have to restore the stack.
|
||||
// WIN32: call void @"\01?getA@@YA?AUA@@XZ"(%struct.A* sret %{{.*}})
|
||||
|
@ -37,7 +37,7 @@ int HasDeactivatedCleanups() {
|
|||
return TakesTwo((TakeRef(A()), A()), (TakeRef(A()), A()));
|
||||
}
|
||||
|
||||
// WIN32-LABEL: define i32 @"\01?HasDeactivatedCleanups@@YAHXZ"() {{.*}} {
|
||||
// WIN32-LABEL: define dso_local i32 @"\01?HasDeactivatedCleanups@@YAHXZ"() {{.*}} {
|
||||
// WIN32: %[[isactive:.*]] = alloca i1
|
||||
// WIN32: call i8* @llvm.stacksave()
|
||||
// WIN32: %[[argmem:.*]] = alloca inalloca [[argmem_ty:<{ %struct.A, %struct.A }>]]
|
||||
|
@ -72,7 +72,7 @@ int HasConditionalCleanup(bool cond) {
|
|||
return (cond ? TakesTwo(A(), A()) : CouldThrow());
|
||||
}
|
||||
|
||||
// WIN32-LABEL: define i32 @"\01?HasConditionalCleanup@@YAH_N@Z"(i1 zeroext %{{.*}}) {{.*}} {
|
||||
// WIN32-LABEL: define dso_local i32 @"\01?HasConditionalCleanup@@YAH_N@Z"(i1 zeroext %{{.*}}) {{.*}} {
|
||||
// WIN32: store i1 false
|
||||
// WIN32: br i1
|
||||
// WIN32: call i8* @llvm.stacksave()
|
||||
|
@ -95,7 +95,7 @@ int HasConditionalDeactivatedCleanups(bool cond) {
|
|||
return (cond ? TakesTwo((TakeRef(A()), A()), (TakeRef(A()), A())) : CouldThrow());
|
||||
}
|
||||
|
||||
// WIN32-O0-LABEL: define i32 @"\01?HasConditionalDeactivatedCleanups@@YAH_N@Z"{{.*}} {
|
||||
// WIN32-O0-LABEL: define dso_local i32 @"\01?HasConditionalDeactivatedCleanups@@YAH_N@Z"{{.*}} {
|
||||
// WIN32-O0: alloca i1
|
||||
// WIN32-O0: %[[arg1_cond:.*]] = alloca i1
|
||||
// Start all four cleanups as deactivated.
|
||||
|
@ -130,7 +130,7 @@ int HasConditionalDeactivatedCleanups(bool cond) {
|
|||
// WIN32-O0: call x86_thiscallcc void @"\01??1A@@QAE@XZ"({{.*}})
|
||||
// WIN32-O0: }
|
||||
|
||||
// WIN32-O3-LABEL: define i32 @"\01?HasConditionalDeactivatedCleanups@@YAH_N@Z"{{.*}} {
|
||||
// WIN32-O3-LABEL: define dso_local i32 @"\01?HasConditionalDeactivatedCleanups@@YAH_N@Z"{{.*}} {
|
||||
// WIN32-O3: alloca i1
|
||||
// WIN32-O3: alloca i1
|
||||
// WIN32-O3: %[[arg1_cond:.*]] = alloca i1
|
||||
|
@ -187,7 +187,7 @@ C::C() { foo(); }
|
|||
|
||||
// Verify that we don't bother with a vbtable lookup when adjusting the this
|
||||
// pointer to call a base destructor from a constructor while unwinding.
|
||||
// WIN32-LABEL: define {{.*}} @"\01??0C@crash_on_partial_destroy@@QAE@XZ"{{.*}} {
|
||||
// WIN32-LABEL: define dso_local {{.*}} @"\01??0C@crash_on_partial_destroy@@QAE@XZ"{{.*}} {
|
||||
// WIN32: cleanuppad
|
||||
//
|
||||
// We shouldn't do any vbptr loads, just constant GEPs.
|
||||
|
@ -217,7 +217,7 @@ void f() {
|
|||
g();
|
||||
}
|
||||
|
||||
// WIN32-LABEL: define void @"\01?f@dont_call_terminate@@YAXXZ"()
|
||||
// WIN32-LABEL: define dso_local void @"\01?f@dont_call_terminate@@YAXXZ"()
|
||||
// WIN32: invoke void @"\01?g@dont_call_terminate@@YAXXZ"()
|
||||
// WIN32-NEXT: to label %[[cont:[^ ]*]] unwind label %[[lpad:[^ ]*]]
|
||||
//
|
||||
|
@ -239,7 +239,7 @@ void f() {
|
|||
}
|
||||
}
|
||||
|
||||
// WIN32-LABEL: define void @"\01?f@noexcept_false_dtor@@YAXXZ"()
|
||||
// WIN32-LABEL: define dso_local void @"\01?f@noexcept_false_dtor@@YAXXZ"()
|
||||
// WIN32: invoke i32 @"\01?CouldThrow@@YAHXZ"()
|
||||
// WIN32: call x86_thiscallcc void @"\01??1D@noexcept_false_dtor@@QAE@XZ"(%"struct.noexcept_false_dtor::D"* %{{.*}})
|
||||
// WIN32: cleanuppad
|
||||
|
@ -256,7 +256,7 @@ void f() {
|
|||
g();
|
||||
}
|
||||
|
||||
// WIN32-LIFETIME-LABEL: define void @"\01?f@lifetime_marker@@YAXXZ"()
|
||||
// WIN32-LIFETIME-LABEL: define dso_local void @"\01?f@lifetime_marker@@YAXXZ"()
|
||||
// WIN32-LIFETIME: %[[c:.*]] = alloca %"struct.lifetime_marker::C"
|
||||
// WIN32-LIFETIME: %[[bc0:.*]] = bitcast %"struct.lifetime_marker::C"* %c to i8*
|
||||
// WIN32-LIFETIME: call void @llvm.lifetime.start.p0i8(i64 1, i8* %[[bc0]])
|
||||
|
@ -293,7 +293,7 @@ struct class_0 : class_1 {
|
|||
};
|
||||
|
||||
class_0::class_0() {
|
||||
// WIN32: define x86_thiscallcc %struct.class_0* @"\01??0class_0@@QAE@XZ"(%struct.class_0* returned %this, i32 %is_most_derived)
|
||||
// WIN32: define dso_local x86_thiscallcc %struct.class_0* @"\01??0class_0@@QAE@XZ"(%struct.class_0* returned %this, i32 %is_most_derived)
|
||||
// WIN32: store i32 %is_most_derived, i32* %[[IS_MOST_DERIVED_VAR:.*]], align 4
|
||||
// WIN32: %[[IS_MOST_DERIVED_VAL:.*]] = load i32, i32* %[[IS_MOST_DERIVED_VAR]]
|
||||
// WIN32: %[[SHOULD_CALL_VBASE_CTORS:.*]] = icmp ne i32 %[[IS_MOST_DERIVED_VAL]], 0
|
||||
|
|
|
@ -12,7 +12,7 @@ extern "C" void foo() {
|
|||
}
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @foo()
|
||||
// CHECK-LABEL: define dso_local void @foo()
|
||||
// CHECK: invoke void @might_throw()
|
||||
// CHECK: %[[CATCHPAD:[^ ]*]] = catchpad within
|
||||
// CHECK: call void asm sideeffect "nop", {{.*}} [ "funclet"(token %[[CATCHPAD]]) ]
|
||||
|
|
|
@ -6,7 +6,7 @@ void never_throws() noexcept(true) {
|
|||
may_throw();
|
||||
}
|
||||
|
||||
// CHECK-LABEL: define void @"\01?never_throws@@YAXXZ"()
|
||||
// CHECK-LABEL: define dso_local void @"\01?never_throws@@YAXXZ"()
|
||||
// CHECK-SAME: personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*)
|
||||
// CHECK: invoke void @"\01?may_throw@@YAXXZ"()
|
||||
// CHECK: %[[cp:.*]] = cleanuppad within none []
|
||||
|
|
|
@ -7,13 +7,13 @@
|
|||
// CHECK-SAME: i8* bitcast (i8* (%struct.Foo*, i32)* @"\01??_G?$Foo@H@@UEAAPEAXI@Z" to i8*)
|
||||
// CHECK-SAME: ] }, comdat
|
||||
|
||||
// CHECK-LABEL: define %struct.Foo* @"\01?f@@YAPEAU?$Foo@H@@XZ"()
|
||||
// CHECK-LABEL: define dso_local %struct.Foo* @"\01?f@@YAPEAU?$Foo@H@@XZ"()
|
||||
// CHECK: call %struct.Foo* @"\01??0?$Foo@H@@QEAA@XZ"(%struct.Foo* %{{.*}})
|
||||
|
||||
// CHECK: define available_externally %struct.Foo* @"\01??0?$Foo@H@@QEAA@XZ"(%struct.Foo* returned %this)
|
||||
// CHECK: define available_externally dso_local %struct.Foo* @"\01??0?$Foo@H@@QEAA@XZ"(%struct.Foo* returned %this)
|
||||
// CHECK: store {{.*}} @"\01??_7?$Foo@H@@6B@"
|
||||
|
||||
// CHECK: define linkonce_odr i8* @"\01??_G?$Foo@H@@UEAAPEAXI@Z"(%struct.Foo* %this, i32 %should_call_delete)
|
||||
// CHECK: define linkonce_odr dso_local i8* @"\01??_G?$Foo@H@@UEAAPEAXI@Z"(%struct.Foo* %this, i32 %should_call_delete)
|
||||
|
||||
struct Base {
|
||||
virtual ~Base();
|
||||
|
|
|
@ -15,17 +15,17 @@ void PR26313_f(PR26313_FUNC *p) { delete p; }
|
|||
struct PR26313_Z;
|
||||
int PR26313_Z::**a = nullptr;
|
||||
int PR26313_Z::*b = *a;
|
||||
// CHECK-DAG: @"\01?a@@3PAPQPR26313_Z@@HA" = global %0* null, align 4
|
||||
// CHECK-DAG: @"\01?b@@3PQPR26313_Z@@HQ1@" = global { i32, i32, i32 } { i32 0, i32 0, i32 -1 }, align 4
|
||||
// CHECK-DAG: @"\01?a@@3PAPQPR26313_Z@@HA" = dso_local global %0* null, align 4
|
||||
// CHECK-DAG: @"\01?b@@3PQPR26313_Z@@HQ1@" = dso_local global { i32, i32, i32 } { i32 0, i32 0, i32 -1 }, align 4
|
||||
|
||||
namespace PR20947 {
|
||||
struct A;
|
||||
int A::**a = nullptr;
|
||||
// CHECK-DAG: @"\01?a@PR20947@@3PAPQA@1@HA" = global %{{.*}}* null, align 4
|
||||
// CHECK-DAG: @"\01?a@PR20947@@3PAPQA@1@HA" = dso_local global %{{.*}}* null, align 4
|
||||
|
||||
struct B;
|
||||
int B::*&b = b;
|
||||
// CHECK-DAG: @"\01?b@PR20947@@3AAPQB@1@HA" = global %{{.*}}* null, align 4
|
||||
// CHECK-DAG: @"\01?b@PR20947@@3AAPQB@1@HA" = dso_local global %{{.*}}* null, align 4
|
||||
}
|
||||
|
||||
namespace PR20017 {
|
||||
|
@ -35,7 +35,7 @@ struct A {
|
|||
};
|
||||
struct B;
|
||||
auto a = &A<B>::m_fn1;
|
||||
// CHECK-DAG: @"\01?a@PR20017@@3P8?$A@UB@PR20017@@@1@AEPQB@1@HXZQ21@" = global i8* bitcast ({ i32, i32, i32 } ({{.*}}*)* @"\01?m_fn1@?$A@UB@PR20017@@@PR20017@@QAEPQB@2@HXZ" to i8*), align 4
|
||||
// CHECK-DAG: @"\01?a@PR20017@@3P8?$A@UB@PR20017@@@1@AEPQB@1@HXZQ21@" = dso_local global i8* bitcast ({ i32, i32, i32 } ({{.*}}*)* @"\01?m_fn1@?$A@UB@PR20017@@@PR20017@@QAEPQB@2@HXZ" to i8*), align 4
|
||||
}
|
||||
|
||||
#ifndef INCOMPLETE_VIRTUAL
|
||||
|
@ -89,24 +89,24 @@ int Virtual ::*v_d_memptr;
|
|||
int NonZeroVBPtr::*n_d_memptr;
|
||||
int Unspecified::*u_d_memptr;
|
||||
int UnspecSingle::*us_d_memptr;
|
||||
// CHECK: @"\01?s_d_memptr@@3PQSingle@@HQ1@" = global i32 -1, align 4
|
||||
// CHECK: @"\01?p_d_memptr@@3PQPolymorphic@@HQ1@" = global i32 0, align 4
|
||||
// CHECK: @"\01?m_d_memptr@@3PQMultiple@@HQ1@" = global i32 -1, align 4
|
||||
// CHECK: @"\01?v_d_memptr@@3PQVirtual@@HQ1@" = global { i32, i32 }
|
||||
// CHECK: @"\01?s_d_memptr@@3PQSingle@@HQ1@" = dso_local global i32 -1, align 4
|
||||
// CHECK: @"\01?p_d_memptr@@3PQPolymorphic@@HQ1@" = dso_local global i32 0, align 4
|
||||
// CHECK: @"\01?m_d_memptr@@3PQMultiple@@HQ1@" = dso_local global i32 -1, align 4
|
||||
// CHECK: @"\01?v_d_memptr@@3PQVirtual@@HQ1@" = dso_local global { i32, i32 }
|
||||
// CHECK: { i32 0, i32 -1 }, align 4
|
||||
// CHECK: @"\01?n_d_memptr@@3PQNonZeroVBPtr@@HQ1@" = global { i32, i32 }
|
||||
// CHECK: @"\01?n_d_memptr@@3PQNonZeroVBPtr@@HQ1@" = dso_local global { i32, i32 }
|
||||
// CHECK: { i32 0, i32 -1 }, align 4
|
||||
// CHECK: @"\01?u_d_memptr@@3PQUnspecified@@HQ1@" = global { i32, i32, i32 }
|
||||
// CHECK: @"\01?u_d_memptr@@3PQUnspecified@@HQ1@" = dso_local global { i32, i32, i32 }
|
||||
// CHECK: { i32 0, i32 0, i32 -1 }, align 4
|
||||
// CHECK: @"\01?us_d_memptr@@3PQUnspecSingle@@HQ1@" = global { i32, i32, i32 }
|
||||
// CHECK: @"\01?us_d_memptr@@3PQUnspecSingle@@HQ1@" = dso_local global { i32, i32, i32 }
|
||||
// CHECK: { i32 0, i32 0, i32 -1 }, align 4
|
||||
|
||||
void (Single ::*s_f_memptr)();
|
||||
void (Multiple::*m_f_memptr)();
|
||||
void (Virtual ::*v_f_memptr)();
|
||||
// CHECK: @"\01?s_f_memptr@@3P8Single@@AEXXZQ1@" = global i8* null, align 4
|
||||
// CHECK: @"\01?m_f_memptr@@3P8Multiple@@AEXXZQ1@" = global { i8*, i32 } zeroinitializer, align 4
|
||||
// CHECK: @"\01?v_f_memptr@@3P8Virtual@@AEXXZQ1@" = global { i8*, i32, i32 } zeroinitializer, align 4
|
||||
// CHECK: @"\01?s_f_memptr@@3P8Single@@AEXXZQ1@" = dso_local global i8* null, align 4
|
||||
// CHECK: @"\01?m_f_memptr@@3P8Multiple@@AEXXZQ1@" = dso_local global { i8*, i32 } zeroinitializer, align 4
|
||||
// CHECK: @"\01?v_f_memptr@@3P8Virtual@@AEXXZQ1@" = dso_local global { i8*, i32, i32 } zeroinitializer, align 4
|
||||
|
||||
// We can define Unspecified after locking in the inheritance model.
|
||||
struct Unspecified : Multiple, Virtual {
|
||||
|
@ -170,11 +170,11 @@ struct D : C {
|
|||
// Try a cast that changes the inheritance model. Null for D is 0, but null for
|
||||
// C is -1. We need the cast to long in order to hit the non-APValue path.
|
||||
int C::*ptr4 = (int C::*) (int D::*) (long D::*) 0;
|
||||
// CHECK: @"\01?ptr4@CastParam@@3PQC@1@HQ21@" = global i32 -1, align 4
|
||||
// CHECK: @"\01?ptr4@CastParam@@3PQC@1@HQ21@" = dso_local global i32 -1, align 4
|
||||
|
||||
// MSVC rejects this but we accept it.
|
||||
int C::*ptr5 = (int C::*) (long D::*) 0;
|
||||
// CHECK: @"\01?ptr5@CastParam@@3PQC@1@HQ21@" = global i32 -1, align 4
|
||||
// CHECK: @"\01?ptr5@CastParam@@3PQC@1@HQ21@" = dso_local global i32 -1, align 4
|
||||
}
|
||||
|
||||
struct UnspecWithVBPtr;
|
||||
|
@ -191,7 +191,7 @@ void EmitNonVirtualMemberPointers() {
|
|||
void (Virtual ::*v_f_memptr)() = &Virtual::foo;
|
||||
void (Unspecified::*u_f_memptr)() = &Unspecified::foo;
|
||||
void (UnspecWithVBPtr::*u2_f_memptr)() = &UnspecWithVBPtr::foo;
|
||||
// CHECK: define void @"\01?EmitNonVirtualMemberPointers@@YAXXZ"() {{.*}} {
|
||||
// CHECK: define dso_local void @"\01?EmitNonVirtualMemberPointers@@YAXXZ"() {{.*}} {
|
||||
// CHECK: alloca i8*, align 4
|
||||
// CHECK: alloca { i8*, i32 }, align 4
|
||||
// CHECK: alloca { i8*, i32, i32 }, align 4
|
||||
|
@ -221,7 +221,7 @@ void podMemPtrs() {
|
|||
if (memptr)
|
||||
memptr = 0;
|
||||
// Check that member pointers use the right offsets and that null is -1.
|
||||
// CHECK: define void @"\01?podMemPtrs@@YAXXZ"() {{.*}} {
|
||||
// CHECK: define dso_local void @"\01?podMemPtrs@@YAXXZ"() {{.*}} {
|
||||
// CHECK: %[[memptr:.*]] = alloca i32, align 4
|
||||
// CHECK-NEXT: store i32 0, i32* %[[memptr]], align 4
|
||||
// CHECK-NEXT: store i32 4, i32* %[[memptr]], align 4
|
||||
|
@ -241,7 +241,7 @@ void polymorphicMemPtrs() {
|
|||
memptr = 0;
|
||||
// Member pointers for polymorphic classes include the vtable slot in their
|
||||
// offset and use 0 to represent null.
|
||||
// CHECK: define void @"\01?polymorphicMemPtrs@@YAXXZ"() {{.*}} {
|
||||
// CHECK: define dso_local void @"\01?polymorphicMemPtrs@@YAXXZ"() {{.*}} {
|
||||
// CHECK: %[[memptr:.*]] = alloca i32, align 4
|
||||
// CHECK-NEXT: store i32 4, i32* %[[memptr]], align 4
|
||||
// CHECK-NEXT: store i32 8, i32* %[[memptr]], align 4
|
||||
|
@ -255,7 +255,7 @@ void polymorphicMemPtrs() {
|
|||
|
||||
bool nullTestDataUnspecified(int Unspecified::*mp) {
|
||||
return mp;
|
||||
// CHECK: define zeroext i1 @"\01?nullTestDataUnspecified@@YA_NPQUnspecified@@H@Z"{{.*}} {
|
||||
// CHECK: define dso_local zeroext i1 @"\01?nullTestDataUnspecified@@YA_NPQUnspecified@@H@Z"{{.*}} {
|
||||
// CHECK: %{{.*}} = load { i32, i32, i32 }, { i32, i32, i32 }* %{{.*}}, align 4
|
||||
// CHECK: store { i32, i32, i32 } {{.*}} align 4
|
||||
// CHECK: %[[mp:.*]] = load { i32, i32, i32 }, { i32, i32, i32 }* %{{.*}}, align 4
|
||||
|
@ -271,13 +271,13 @@ bool nullTestDataUnspecified(int Unspecified::*mp) {
|
|||
// CHECK: }
|
||||
|
||||
// Pass this large type indirectly.
|
||||
// X64-LABEL: define zeroext i1 @"\01?nullTestDataUnspecified@@
|
||||
// X64-LABEL: define dso_local zeroext i1 @"\01?nullTestDataUnspecified@@
|
||||
// X64: ({ i32, i32, i32 }*)
|
||||
}
|
||||
|
||||
bool nullTestFunctionUnspecified(void (Unspecified::*mp)()) {
|
||||
return mp;
|
||||
// CHECK: define zeroext i1 @"\01?nullTestFunctionUnspecified@@YA_NP8Unspecified@@AEXXZ@Z"{{.*}} {
|
||||
// CHECK: define dso_local zeroext i1 @"\01?nullTestFunctionUnspecified@@YA_NP8Unspecified@@AEXXZ@Z"{{.*}} {
|
||||
// CHECK: %{{.*}} = load { i8*, i32, i32, i32 }, { i8*, i32, i32, i32 }* %{{.*}}, align 4
|
||||
// CHECK: store { i8*, i32, i32, i32 } {{.*}} align 4
|
||||
// CHECK: %[[mp:.*]] = load { i8*, i32, i32, i32 }, { i8*, i32, i32, i32 }* %{{.*}}, align 4
|
||||
|
@ -291,7 +291,7 @@ int loadDataMemberPointerVirtual(Virtual *o, int Virtual::*memptr) {
|
|||
return o->*memptr;
|
||||
// Test that we can unpack this aggregate member pointer and load the member
|
||||
// data pointer.
|
||||
// CHECK: define i32 @"\01?loadDataMemberPointerVirtual@@YAHPAUVirtual@@PQ1@H@Z"{{.*}} {
|
||||
// CHECK: define dso_local i32 @"\01?loadDataMemberPointerVirtual@@YAHPAUVirtual@@PQ1@H@Z"{{.*}} {
|
||||
// CHECK: %[[o:.*]] = load %{{.*}}*, %{{.*}}** %{{.*}}, align 4
|
||||
// CHECK: %[[memptr:.*]] = load { i32, i32 }, { i32, i32 }* %{{.*}}, align 4
|
||||
// CHECK: %[[memptr0:.*]] = extractvalue { i32, i32 } %[[memptr:.*]], 0
|
||||
|
@ -312,7 +312,7 @@ int loadDataMemberPointerVirtual(Virtual *o, int Virtual::*memptr) {
|
|||
|
||||
// A two-field data memptr on x64 gets coerced to i64 and is passed in a
|
||||
// register or memory.
|
||||
// X64-LABEL: define i32 @"\01?loadDataMemberPointerVirtual@@YAHPEAUVirtual@@PEQ1@H@Z"
|
||||
// X64-LABEL: define dso_local i32 @"\01?loadDataMemberPointerVirtual@@YAHPEAUVirtual@@PEQ1@H@Z"
|
||||
// X64: (%struct.Virtual* %o, i64 %memptr.coerce)
|
||||
}
|
||||
|
||||
|
@ -320,7 +320,7 @@ int loadDataMemberPointerUnspecified(Unspecified *o, int Unspecified::*memptr) {
|
|||
return o->*memptr;
|
||||
// Test that we can unpack this aggregate member pointer and load the member
|
||||
// data pointer.
|
||||
// CHECK: define i32 @"\01?loadDataMemberPointerUnspecified@@YAHPAUUnspecified@@PQ1@H@Z"{{.*}} {
|
||||
// CHECK: define dso_local i32 @"\01?loadDataMemberPointerUnspecified@@YAHPAUUnspecified@@PQ1@H@Z"{{.*}} {
|
||||
// CHECK: %[[o:.*]] = load %{{.*}}*, %{{.*}}** %{{.*}}, align 4
|
||||
// CHECK: %[[memptr:.*]] = load { i32, i32, i32 }, { i32, i32, i32 }* %{{.*}}, align 4
|
||||
// CHECK: %[[memptr0:.*]] = extractvalue { i32, i32, i32 } %[[memptr:.*]], 0
|
||||
|
@ -351,12 +351,12 @@ int loadDataMemberPointerUnspecified(Unspecified *o, int Unspecified::*memptr) {
|
|||
void callMemberPointerSingle(Single *o, void (Single::*memptr)()) {
|
||||
(o->*memptr)();
|
||||
// Just look for an indirect thiscall.
|
||||
// CHECK: define void @"\01?callMemberPointerSingle@@{{.*}} {{.*}} {
|
||||
// CHECK: define dso_local void @"\01?callMemberPointerSingle@@{{.*}} {{.*}} {
|
||||
// CHECK: call x86_thiscallcc void %{{.*}}(%{{.*}} %{{.*}})
|
||||
// CHECK: ret void
|
||||
// CHECK: }
|
||||
|
||||
// X64-LABEL: define void @"\01?callMemberPointerSingle@@
|
||||
// X64-LABEL: define dso_local void @"\01?callMemberPointerSingle@@
|
||||
// X64: (%struct.Single* %o, i8* %memptr)
|
||||
// X64: bitcast i8* %{{[^ ]*}} to void (%struct.Single*)*
|
||||
// X64: ret void
|
||||
|
@ -364,7 +364,7 @@ void callMemberPointerSingle(Single *o, void (Single::*memptr)()) {
|
|||
|
||||
void callMemberPointerMultiple(Multiple *o, void (Multiple::*memptr)()) {
|
||||
(o->*memptr)();
|
||||
// CHECK: define void @"\01?callMemberPointerMultiple@@{{.*}} {
|
||||
// CHECK: define dso_local void @"\01?callMemberPointerMultiple@@{{.*}} {
|
||||
// CHECK: %[[memptr0:.*]] = extractvalue { i8*, i32 } %{{.*}}, 0
|
||||
// CHECK: %[[memptr1:.*]] = extractvalue { i8*, i32 } %{{.*}}, 1
|
||||
// CHECK: %[[this_adjusted:.*]] = getelementptr inbounds i8, i8* %{{.*}}, i32 %[[memptr1]]
|
||||
|
@ -378,7 +378,7 @@ void callMemberPointerMultiple(Multiple *o, void (Multiple::*memptr)()) {
|
|||
void callMemberPointerVirtualBase(Virtual *o, void (Virtual::*memptr)()) {
|
||||
(o->*memptr)();
|
||||
// This shares a lot with virtual data member pointers.
|
||||
// CHECK: define void @"\01?callMemberPointerVirtualBase@@{{.*}} {
|
||||
// CHECK: define dso_local void @"\01?callMemberPointerVirtualBase@@{{.*}} {
|
||||
// CHECK: %[[memptr0:.*]] = extractvalue { i8*, i32, i32 } %{{.*}}, 0
|
||||
// CHECK: %[[memptr1:.*]] = extractvalue { i8*, i32, i32 } %{{.*}}, 1
|
||||
// CHECK: %[[memptr2:.*]] = extractvalue { i8*, i32, i32 } %{{.*}}, 2
|
||||
|
@ -400,21 +400,21 @@ void callMemberPointerVirtualBase(Virtual *o, void (Virtual::*memptr)()) {
|
|||
bool compareSingleFunctionMemptr(void (Single::*l)(), void (Single::*r)()) {
|
||||
return l == r;
|
||||
// Should only be one comparison here.
|
||||
// CHECK: define zeroext i1 @"\01?compareSingleFunctionMemptr@@YA_NP8Single@@AEXXZ0@Z"{{.*}} {
|
||||
// CHECK: define dso_local zeroext i1 @"\01?compareSingleFunctionMemptr@@YA_NP8Single@@AEXXZ0@Z"{{.*}} {
|
||||
// CHECK-NOT: icmp
|
||||
// CHECK: %[[r:.*]] = icmp eq
|
||||
// CHECK-NOT: icmp
|
||||
// CHECK: ret i1 %[[r]]
|
||||
// CHECK: }
|
||||
|
||||
// X64-LABEL: define zeroext i1 @"\01?compareSingleFunctionMemptr@@
|
||||
// X64-LABEL: define dso_local zeroext i1 @"\01?compareSingleFunctionMemptr@@
|
||||
// X64: (i8* %{{[^,]*}}, i8* %{{[^)]*}})
|
||||
}
|
||||
|
||||
bool compareNeqSingleFunctionMemptr(void (Single::*l)(), void (Single::*r)()) {
|
||||
return l != r;
|
||||
// Should only be one comparison here.
|
||||
// CHECK: define zeroext i1 @"\01?compareNeqSingleFunctionMemptr@@YA_NP8Single@@AEXXZ0@Z"{{.*}} {
|
||||
// CHECK: define dso_local zeroext i1 @"\01?compareNeqSingleFunctionMemptr@@YA_NP8Single@@AEXXZ0@Z"{{.*}} {
|
||||
// CHECK-NOT: icmp
|
||||
// CHECK: %[[r:.*]] = icmp ne
|
||||
// CHECK-NOT: icmp
|
||||
|
@ -424,7 +424,7 @@ bool compareNeqSingleFunctionMemptr(void (Single::*l)(), void (Single::*r)()) {
|
|||
|
||||
bool unspecFuncMemptrEq(void (Unspecified::*l)(), void (Unspecified::*r)()) {
|
||||
return l == r;
|
||||
// CHECK: define zeroext i1 @"\01?unspecFuncMemptrEq@@YA_NP8Unspecified@@AEXXZ0@Z"{{.*}} {
|
||||
// CHECK: define dso_local zeroext i1 @"\01?unspecFuncMemptrEq@@YA_NP8Unspecified@@AEXXZ0@Z"{{.*}} {
|
||||
// CHECK: %[[lhs0:.*]] = extractvalue { i8*, i32, i32, i32 } %[[l:.*]], 0
|
||||
// CHECK: %{{.*}} = extractvalue { i8*, i32, i32, i32 } %[[r:.*]], 0
|
||||
// CHECK: %[[cmp0:.*]] = icmp eq i8* %[[lhs0]], %{{.*}}
|
||||
|
@ -445,13 +445,13 @@ bool unspecFuncMemptrEq(void (Unspecified::*l)(), void (Unspecified::*r)()) {
|
|||
// CHECK: ret i1 %{{.*}}
|
||||
// CHECK: }
|
||||
|
||||
// X64-LABEL: define zeroext i1 @"\01?unspecFuncMemptrEq@@
|
||||
// X64-LABEL: define dso_local zeroext i1 @"\01?unspecFuncMemptrEq@@
|
||||
// X64: ({ i8*, i32, i32, i32 }*, { i8*, i32, i32, i32 }*)
|
||||
}
|
||||
|
||||
bool unspecFuncMemptrNeq(void (Unspecified::*l)(), void (Unspecified::*r)()) {
|
||||
return l != r;
|
||||
// CHECK: define zeroext i1 @"\01?unspecFuncMemptrNeq@@YA_NP8Unspecified@@AEXXZ0@Z"{{.*}} {
|
||||
// CHECK: define dso_local zeroext i1 @"\01?unspecFuncMemptrNeq@@YA_NP8Unspecified@@AEXXZ0@Z"{{.*}} {
|
||||
// CHECK: %[[lhs0:.*]] = extractvalue { i8*, i32, i32, i32 } %[[l:.*]], 0
|
||||
// CHECK: %{{.*}} = extractvalue { i8*, i32, i32, i32 } %[[r:.*]], 0
|
||||
// CHECK: %[[cmp0:.*]] = icmp ne i8* %[[lhs0]], %{{.*}}
|
||||
|
@ -475,7 +475,7 @@ bool unspecFuncMemptrNeq(void (Unspecified::*l)(), void (Unspecified::*r)()) {
|
|||
|
||||
bool unspecDataMemptrEq(int Unspecified::*l, int Unspecified::*r) {
|
||||
return l == r;
|
||||
// CHECK: define zeroext i1 @"\01?unspecDataMemptrEq@@YA_NPQUnspecified@@H0@Z"{{.*}} {
|
||||
// CHECK: define dso_local zeroext i1 @"\01?unspecDataMemptrEq@@YA_NPQUnspecified@@H0@Z"{{.*}} {
|
||||
// CHECK: extractvalue { i32, i32, i32 } %{{.*}}, 0
|
||||
// CHECK: extractvalue { i32, i32, i32 } %{{.*}}, 0
|
||||
// CHECK: icmp eq i32
|
||||
|
@ -490,13 +490,13 @@ bool unspecDataMemptrEq(int Unspecified::*l, int Unspecified::*r) {
|
|||
// CHECK: ret i1
|
||||
// CHECK: }
|
||||
|
||||
// X64-LABEL: define zeroext i1 @"\01?unspecDataMemptrEq@@
|
||||
// X64-LABEL: define dso_local zeroext i1 @"\01?unspecDataMemptrEq@@
|
||||
// X64: ({ i32, i32, i32 }*, { i32, i32, i32 }*)
|
||||
}
|
||||
|
||||
void (Multiple::*convertB2FuncToMultiple(void (B2::*mp)()))() {
|
||||
return mp;
|
||||
// CHECK: define i64 @"\01?convertB2FuncToMultiple@@YAP8Multiple@@AEXXZP8B2@@AEXXZ@Z"{{.*}} {
|
||||
// CHECK: define dso_local i64 @"\01?convertB2FuncToMultiple@@YAP8Multiple@@AEXXZP8B2@@AEXXZ@Z"{{.*}} {
|
||||
// CHECK: store
|
||||
// CHECK: %[[mp:.*]] = load i8*, i8** %{{.*}}, align 4
|
||||
// CHECK: icmp ne i8* %[[mp]], null
|
||||
|
@ -520,7 +520,7 @@ void (B2::*convertMultipleFuncToB2(void (Multiple::*mp)()))() {
|
|||
// LLVM from optimizing away the branch. This is likely a bug in
|
||||
// lib/CodeGen/TargetInfo.cpp with how we classify memptr types for returns.
|
||||
//
|
||||
// CHECK: define i32 @"\01?convertMultipleFuncToB2@@YAP8B2@@AEXXZP8Multiple@@AEXXZ@Z"{{.*}} {
|
||||
// CHECK: define dso_local i32 @"\01?convertMultipleFuncToB2@@YAP8B2@@AEXXZP8Multiple@@AEXXZ@Z"{{.*}} {
|
||||
// CHECK: store
|
||||
// CHECK: %[[src:.*]] = load { i8*, i32 }, { i8*, i32 }* %{{.*}}, align 4
|
||||
// CHECK: extractvalue { i8*, i32 } %[[src]], 0
|
||||
|
@ -545,7 +545,7 @@ struct D : B, C { int d; };
|
|||
|
||||
void (D::*convertCToD(void (C::*mp)()))() {
|
||||
return mp;
|
||||
// CHECK: define void @"\01?convertCToD@Test1@@YAP8D@1@AEXXZP8C@1@AEXXZ@Z"{{.*}} {
|
||||
// CHECK: define dso_local void @"\01?convertCToD@Test1@@YAP8D@1@AEXXZP8C@1@AEXXZ@Z"{{.*}} {
|
||||
// CHECK: store
|
||||
// CHECK: load { i8*, i32, i32 }, { i8*, i32, i32 }* %{{.*}}, align 4
|
||||
// CHECK: extractvalue { i8*, i32, i32 } %{{.*}}, 0
|
||||
|
@ -585,7 +585,7 @@ struct C : A {
|
|||
|
||||
int A::*reinterpret(int B::*mp) {
|
||||
return reinterpret_cast<int A::*>(mp);
|
||||
// CHECK: define i32 @"\01?reinterpret@Test2@@YAPQA@1@HPQB@1@H@Z"{{.*}} {
|
||||
// CHECK: define dso_local i32 @"\01?reinterpret@Test2@@YAPQA@1@HPQB@1@H@Z"{{.*}} {
|
||||
// CHECK-NOT: select
|
||||
// CHECK: ret i32
|
||||
// CHECK: }
|
||||
|
@ -593,7 +593,7 @@ int A::*reinterpret(int B::*mp) {
|
|||
|
||||
int A::*reinterpret(int C::*mp) {
|
||||
return reinterpret_cast<int A::*>(mp);
|
||||
// CHECK: define i32 @"\01?reinterpret@Test2@@YAPQA@1@HPQC@1@H@Z"{{.*}} {
|
||||
// CHECK: define dso_local i32 @"\01?reinterpret@Test2@@YAPQA@1@HPQC@1@H@Z"{{.*}} {
|
||||
// CHECK: %[[mp:.*]] = load i32, i32*
|
||||
// CHECK: %[[cmp:.*]] = icmp ne i32 %[[mp]], 0
|
||||
// CHECK: select i1 %[[cmp]], i32 %[[mp]], i32 -1
|
||||
|
@ -612,7 +612,7 @@ struct A {
|
|||
|
||||
int *load_data(A *a, int A::*mp) {
|
||||
return &(a->*mp);
|
||||
// CHECK-LABEL: define i32* @"\01?load_data@Test3@@YAPAHPAUA@1@PQ21@H@Z"{{.*}} {
|
||||
// CHECK-LABEL: define dso_local i32* @"\01?load_data@Test3@@YAPAHPAUA@1@PQ21@H@Z"{{.*}} {
|
||||
// CHECK: %[[a:.*]] = load %"struct.Test3::A"*, %"struct.Test3::A"** %{{.*}}, align 4
|
||||
// CHECK: %[[mp:.*]] = load i32, i32* %{{.*}}, align 4
|
||||
// CHECK: %[[a_i8:.*]] = bitcast %"struct.Test3::A"* %[[a]] to i8*
|
||||
|
@ -631,7 +631,7 @@ struct C : A, B { virtual void g(); };
|
|||
void (C::*getmp())() {
|
||||
return &C::g;
|
||||
}
|
||||
// CHECK-LABEL: define i64 @"\01?getmp@Test4@@YAP8C@1@AEXXZXZ"()
|
||||
// CHECK-LABEL: define dso_local i64 @"\01?getmp@Test4@@YAP8C@1@AEXXZXZ"()
|
||||
// CHECK: store { i8*, i32 } { i8* bitcast (void (%"struct.Test4::C"*, ...)* @"\01??_9C@Test4@@$BA@AE" to i8*), i32 4 }, { i8*, i32 }* %{{.*}}
|
||||
//
|
||||
|
||||
|
@ -651,7 +651,7 @@ struct A {
|
|||
};
|
||||
struct B : public A {};
|
||||
void test() { void (B::*a)() = &B::f; }
|
||||
// CHECK-LABEL: define void @"\01?test@pr20007@@YAXXZ"
|
||||
// CHECK-LABEL: define dso_local void @"\01?test@pr20007@@YAXXZ"
|
||||
// CHECK: store i8* bitcast (void (%"struct.pr20007::A"*)* @"\01?f@A@pr20007@@QAEXXZ" to i8*)
|
||||
}
|
||||
|
||||
|
@ -663,7 +663,7 @@ struct A {
|
|||
struct __single_inheritance B;
|
||||
struct B : public A {};
|
||||
void test() { void (B::*a)() = &B::f; }
|
||||
// CHECK-LABEL: define void @"\01?test@pr20007_kw@@YAXXZ"
|
||||
// CHECK-LABEL: define dso_local void @"\01?test@pr20007_kw@@YAXXZ"
|
||||
// CHECK: store i8* bitcast (void (%"struct.pr20007_kw::A"*)* @"\01?f@A@pr20007_kw@@QAEXXZ" to i8*)
|
||||
}
|
||||
|
||||
|
@ -678,7 +678,7 @@ void test() { (void)(void (B::*)()) &B::f; }
|
|||
static_assert(sizeof(int B::*) == 4, "");
|
||||
static_assert(sizeof(int A::*) == 4, "");
|
||||
#pragma pointers_to_members(best_case)
|
||||
// CHECK-LABEL: define void @"\01?test@pr20007_pragma@@YAXXZ"
|
||||
// CHECK-LABEL: define dso_local void @"\01?test@pr20007_pragma@@YAXXZ"
|
||||
}
|
||||
|
||||
namespace pr20007_pragma2 {
|
||||
|
@ -692,7 +692,7 @@ void test() { (void)&B::f; }
|
|||
static_assert(sizeof(int B::*) == 4, "");
|
||||
static_assert(sizeof(int A::*) == 12, "");
|
||||
#pragma pointers_to_members(best_case)
|
||||
// CHECK-LABEL: define void @"\01?test@pr20007_pragma2@@YAXXZ"
|
||||
// CHECK-LABEL: define dso_local void @"\01?test@pr20007_pragma2@@YAXXZ"
|
||||
}
|
||||
|
||||
namespace pr23823 {
|
||||
|
@ -738,7 +738,7 @@ struct D : A, C {};
|
|||
|
||||
typedef void (D::*DMemPtrTy)();
|
||||
|
||||
// CHECK-LABEL: define void @"\01?get_memptr@pr23878@@YAP8D@1@AEXXZXZ"
|
||||
// CHECK-LABEL: define dso_local void @"\01?get_memptr@pr23878@@YAP8D@1@AEXXZXZ"
|
||||
// CHECK: @"\01??_9C@pr23878@@$BA@AE" to i8*), i32 0, i32 4
|
||||
DMemPtrTy get_memptr() { return &D::f; }
|
||||
}
|
||||
|
@ -762,7 +762,7 @@ namespace PR24703 {
|
|||
struct S;
|
||||
|
||||
void f(int S::*&p) {}
|
||||
// CHECK-LABEL: define void @"\01?f@PR24703@@YAXAAPQS@1@H@Z"(
|
||||
// CHECK-LABEL: define dso_local void @"\01?f@PR24703@@YAXAAPQS@1@H@Z"(
|
||||
}
|
||||
|
||||
namespace ReferenceToMPTWithIncompleteClass {
|
||||
|
|
|
@ -22,7 +22,7 @@ void call_simple_method() {
|
|||
// CHECK: ret
|
||||
|
||||
// Make sure that the definition uses the right calling convention:
|
||||
// CHECK: define linkonce_odr x86_thiscallcc void @"\01?simple_method@C@@QAEXXZ"
|
||||
// CHECK: define linkonce_odr dso_local x86_thiscallcc void @"\01?simple_method@C@@QAEXXZ"
|
||||
// CHECK: ret
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ void call_cdecl_method() {
|
|||
// CHECK: ret
|
||||
|
||||
// Make sure that the definition uses the right calling convention:
|
||||
// CHECK: define linkonce_odr void @"\01?cdecl_method@C@@QAAXXZ"
|
||||
// CHECK: define linkonce_odr dso_local void @"\01?cdecl_method@C@@QAAXXZ"
|
||||
// CHECK: ret
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ void call_vararg_method() {
|
|||
// CHECK: ret
|
||||
|
||||
// Make sure that the definition uses the right calling convention:
|
||||
// CHECK: define linkonce_odr void @"\01?vararg_method@C@@QAAXPBDZZ"
|
||||
// CHECK: define linkonce_odr dso_local void @"\01?vararg_method@C@@QAAXPBDZZ"
|
||||
}
|
||||
|
||||
void call_static_method() {
|
||||
|
@ -56,7 +56,7 @@ void call_static_method() {
|
|||
// CHECK: ret
|
||||
|
||||
// Make sure that the definition uses the right calling convention:
|
||||
// CHECK: define linkonce_odr void @"\01?static_method@C@@SAXXZ"
|
||||
// CHECK: define linkonce_odr dso_local void @"\01?static_method@C@@SAXXZ"
|
||||
}
|
||||
|
||||
class Base {
|
||||
|
@ -71,19 +71,19 @@ void constructors() {
|
|||
Child c;
|
||||
// Make sure that the Base constructor call in the Child constructor uses
|
||||
// the right calling convention:
|
||||
// CHECK: define linkonce_odr x86_thiscallcc %class.Child* @"\01??0Child@@QAE@XZ"
|
||||
// CHECK: define linkonce_odr dso_local x86_thiscallcc %class.Child* @"\01??0Child@@QAE@XZ"
|
||||
// CHECK: %{{[.0-9A-Z_a-z]+}} = call x86_thiscallcc %class.Base* @"\01??0Base@@QAE@XZ"
|
||||
// CHECK: ret
|
||||
|
||||
// Make sure that the Base constructor definition uses the right CC:
|
||||
// CHECK: define linkonce_odr x86_thiscallcc %class.Base* @"\01??0Base@@QAE@XZ"
|
||||
// CHECK: define linkonce_odr dso_local x86_thiscallcc %class.Base* @"\01??0Base@@QAE@XZ"
|
||||
|
||||
// Make sure that the Base destructor call in the Child denstructor uses
|
||||
// the right calling convention:
|
||||
// CHECK: define linkonce_odr x86_thiscallcc void @"\01??1Child@@QAE@XZ"
|
||||
// CHECK: define linkonce_odr dso_local x86_thiscallcc void @"\01??1Child@@QAE@XZ"
|
||||
// CHECK: call x86_thiscallcc void @"\01??1Base@@QAE@XZ"
|
||||
// CHECK: ret
|
||||
|
||||
// Make sure that the Base destructor definition uses the right CC:
|
||||
// CHECK: define linkonce_odr x86_thiscallcc void @"\01??1Base@@QAE@XZ"
|
||||
// CHECK: define linkonce_odr dso_local x86_thiscallcc void @"\01??1Base@@QAE@XZ"
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ struct ChildOverride : Left, Right {
|
|||
extern "C" void foo(void *);
|
||||
|
||||
void call_left_no_override(ChildNoOverride *child) {
|
||||
// CHECK-LABEL: define void @"\01?call_left_no_override
|
||||
// CHECK-LABEL: define dso_local void @"\01?call_left_no_override
|
||||
// CHECK: %[[CHILD:.*]] = load %struct.ChildNoOverride
|
||||
|
||||
child->left();
|
||||
|
@ -34,7 +34,7 @@ void call_left_no_override(ChildNoOverride *child) {
|
|||
}
|
||||
|
||||
void ChildOverride::left() {
|
||||
// CHECK-LABEL: define x86_thiscallcc void @"\01?left@ChildOverride@@UAEXXZ"
|
||||
// CHECK-LABEL: define dso_local x86_thiscallcc void @"\01?left@ChildOverride@@UAEXXZ"
|
||||
// CHECK-SAME: (%struct.ChildOverride* %[[THIS:.*]])
|
||||
//
|
||||
// No need to adjust 'this' as the ChildOverride's layout begins with Left.
|
||||
|
@ -49,7 +49,7 @@ void ChildOverride::left() {
|
|||
}
|
||||
|
||||
void call_left_override(ChildOverride *child) {
|
||||
// CHECK-LABEL: define void @"\01?call_left_override
|
||||
// CHECK-LABEL: define dso_local void @"\01?call_left_override
|
||||
// CHECK: %[[CHILD:.*]] = load %struct.ChildOverride
|
||||
|
||||
child->left();
|
||||
|
@ -63,7 +63,7 @@ void call_left_override(ChildOverride *child) {
|
|||
}
|
||||
|
||||
void call_right_no_override(ChildNoOverride *child) {
|
||||
// CHECK-LABEL: define void @"\01?call_right_no_override
|
||||
// CHECK-LABEL: define dso_local void @"\01?call_right_no_override
|
||||
// CHECK: %[[CHILD:.*]] = load %struct.ChildNoOverride
|
||||
|
||||
child->right();
|
||||
|
@ -83,7 +83,7 @@ void call_right_no_override(ChildNoOverride *child) {
|
|||
}
|
||||
|
||||
void ChildOverride::right() {
|
||||
// CHECK-LABEL: define x86_thiscallcc void @"\01?right@ChildOverride@@UAEXXZ"(i8*
|
||||
// CHECK-LABEL: define dso_local x86_thiscallcc void @"\01?right@ChildOverride@@UAEXXZ"(i8*
|
||||
//
|
||||
// ChildOverride::right gets 'this' cast to Right* in ECX (i.e. this+4) so we
|
||||
// need to adjust 'this' before use.
|
||||
|
@ -106,7 +106,7 @@ void ChildOverride::right() {
|
|||
}
|
||||
|
||||
void call_right_override(ChildOverride *child) {
|
||||
// CHECK-LABEL: define void @"\01?call_right_override
|
||||
// CHECK-LABEL: define dso_local void @"\01?call_right_override
|
||||
// CHECK: %[[CHILD:.*]] = load %struct.ChildOverride
|
||||
|
||||
child->right();
|
||||
|
@ -132,7 +132,7 @@ struct GrandchildOverride : ChildOverride {
|
|||
};
|
||||
|
||||
void GrandchildOverride::right() {
|
||||
// CHECK-LABEL: define x86_thiscallcc void @"\01?right@GrandchildOverride@@UAEXXZ"(i8*
|
||||
// CHECK-LABEL: define dso_local x86_thiscallcc void @"\01?right@GrandchildOverride@@UAEXXZ"(i8*
|
||||
//
|
||||
// CHECK: %[[THIS_STORE:.*]] = alloca %struct.GrandchildOverride*, align 4
|
||||
// CHECK: %[[THIS_ADDR:.*]] = alloca %struct.GrandchildOverride*, align 4
|
||||
|
@ -202,7 +202,7 @@ struct AsymmetricChild : LeftWithNonVirtualDtor, Right {
|
|||
};
|
||||
|
||||
void call_asymmetric_child_complete_dtor() {
|
||||
// CHECK-LABEL: define void @"\01?call_asymmetric_child_complete_dtor@@YAXXZ"
|
||||
// CHECK-LABEL: define dso_local void @"\01?call_asymmetric_child_complete_dtor@@YAXXZ"
|
||||
AsymmetricChild obj;
|
||||
// CHECK: call x86_thiscallcc %struct.AsymmetricChild* @"\01??0AsymmetricChild@@QAE@XZ"(%struct.AsymmetricChild* %[[OBJ:.*]])
|
||||
// CHECK-NOT: getelementptr
|
||||
|
|
|
@ -68,7 +68,7 @@ struct BaseNoByval : Small {
|
|||
int bb;
|
||||
};
|
||||
|
||||
// WIN32: declare void @"{{.*take_bools_and_chars.*}}"
|
||||
// WIN32: declare dso_local void @"{{.*take_bools_and_chars.*}}"
|
||||
// WIN32: (<{ i8, [3 x i8], i8, [3 x i8], %struct.SmallWithDtor,
|
||||
// WIN32: i8, [3 x i8], i8, [3 x i8], i32, i8, [3 x i8] }>* inalloca)
|
||||
void take_bools_and_chars(char a, char b, SmallWithDtor c, char d, bool e, int f, bool g);
|
||||
|
@ -79,93 +79,93 @@ void call_bools_and_chars() {
|
|||
// Returning structs that fit into a register.
|
||||
Small small_return() { return Small(); }
|
||||
// LINUX-LABEL: define void @_Z12small_returnv(%struct.Small* noalias sret %agg.result)
|
||||
// WIN32: define i32 @"\01?small_return@@YA?AUSmall@@XZ"()
|
||||
// WIN64: define i32 @"\01?small_return@@YA?AUSmall@@XZ"()
|
||||
// WIN32: define dso_local i32 @"\01?small_return@@YA?AUSmall@@XZ"()
|
||||
// WIN64: define dso_local i32 @"\01?small_return@@YA?AUSmall@@XZ"()
|
||||
|
||||
Medium medium_return() { return Medium(); }
|
||||
// LINUX-LABEL: define void @_Z13medium_returnv(%struct.Medium* noalias sret %agg.result)
|
||||
// WIN32: define i64 @"\01?medium_return@@YA?AUMedium@@XZ"()
|
||||
// WIN64: define i64 @"\01?medium_return@@YA?AUMedium@@XZ"()
|
||||
// WIN32: define dso_local i64 @"\01?medium_return@@YA?AUMedium@@XZ"()
|
||||
// WIN64: define dso_local i64 @"\01?medium_return@@YA?AUMedium@@XZ"()
|
||||
|
||||
// Returning structs that fit into a register but are not POD.
|
||||
SmallCpp11NotCpp03Pod small_non_pod_return() { return SmallCpp11NotCpp03Pod(); }
|
||||
// LINUX-LABEL: define void @_Z20small_non_pod_returnv(%struct.SmallCpp11NotCpp03Pod* noalias sret %agg.result)
|
||||
// WIN32: define void @"\01?small_non_pod_return@@YA?AUSmallCpp11NotCpp03Pod@@XZ"(%struct.SmallCpp11NotCpp03Pod* noalias sret %agg.result)
|
||||
// WIN64: define void @"\01?small_non_pod_return@@YA?AUSmallCpp11NotCpp03Pod@@XZ"(%struct.SmallCpp11NotCpp03Pod* noalias sret %agg.result)
|
||||
// WIN32: define dso_local void @"\01?small_non_pod_return@@YA?AUSmallCpp11NotCpp03Pod@@XZ"(%struct.SmallCpp11NotCpp03Pod* noalias sret %agg.result)
|
||||
// WIN64: define dso_local void @"\01?small_non_pod_return@@YA?AUSmallCpp11NotCpp03Pod@@XZ"(%struct.SmallCpp11NotCpp03Pod* noalias sret %agg.result)
|
||||
|
||||
SmallWithCtor small_with_ctor_return() { return SmallWithCtor(); }
|
||||
// LINUX-LABEL: define void @_Z22small_with_ctor_returnv(%struct.SmallWithCtor* noalias sret %agg.result)
|
||||
// WIN32: define void @"\01?small_with_ctor_return@@YA?AUSmallWithCtor@@XZ"(%struct.SmallWithCtor* noalias sret %agg.result)
|
||||
// WIN64: define void @"\01?small_with_ctor_return@@YA?AUSmallWithCtor@@XZ"(%struct.SmallWithCtor* noalias sret %agg.result)
|
||||
// WIN32: define dso_local void @"\01?small_with_ctor_return@@YA?AUSmallWithCtor@@XZ"(%struct.SmallWithCtor* noalias sret %agg.result)
|
||||
// WIN64: define dso_local void @"\01?small_with_ctor_return@@YA?AUSmallWithCtor@@XZ"(%struct.SmallWithCtor* noalias sret %agg.result)
|
||||
// FIXME: The 'sret' mark here doesn't seem to be enough to convince LLVM to
|
||||
// preserve the hidden sret pointer in R0 across the function.
|
||||
// WOA: define arm_aapcs_vfpcc void @"\01?small_with_ctor_return@@YA?AUSmallWithCtor@@XZ"(%struct.SmallWithCtor* noalias sret %agg.result)
|
||||
// WOA: define dso_local arm_aapcs_vfpcc void @"\01?small_with_ctor_return@@YA?AUSmallWithCtor@@XZ"(%struct.SmallWithCtor* noalias sret %agg.result)
|
||||
|
||||
SmallWithVftable small_with_vftable_return() { return SmallWithVftable(); }
|
||||
// LINUX-LABEL: define void @_Z25small_with_vftable_returnv(%struct.SmallWithVftable* noalias sret %agg.result)
|
||||
// WIN32: define void @"\01?small_with_vftable_return@@YA?AUSmallWithVftable@@XZ"(%struct.SmallWithVftable* noalias sret %agg.result)
|
||||
// WIN64: define void @"\01?small_with_vftable_return@@YA?AUSmallWithVftable@@XZ"(%struct.SmallWithVftable* noalias sret %agg.result)
|
||||
// WIN32: define dso_local void @"\01?small_with_vftable_return@@YA?AUSmallWithVftable@@XZ"(%struct.SmallWithVftable* noalias sret %agg.result)
|
||||
// WIN64: define dso_local void @"\01?small_with_vftable_return@@YA?AUSmallWithVftable@@XZ"(%struct.SmallWithVftable* noalias sret %agg.result)
|
||||
|
||||
MediumWithCopyCtor medium_with_copy_ctor_return() { return MediumWithCopyCtor(); }
|
||||
// LINUX-LABEL: define void @_Z28medium_with_copy_ctor_returnv(%struct.MediumWithCopyCtor* noalias sret %agg.result)
|
||||
// WIN32: define void @"\01?medium_with_copy_ctor_return@@YA?AUMediumWithCopyCtor@@XZ"(%struct.MediumWithCopyCtor* noalias sret %agg.result)
|
||||
// WIN64: define void @"\01?medium_with_copy_ctor_return@@YA?AUMediumWithCopyCtor@@XZ"(%struct.MediumWithCopyCtor* noalias sret %agg.result)
|
||||
// WOA: define arm_aapcs_vfpcc void @"\01?medium_with_copy_ctor_return@@YA?AUMediumWithCopyCtor@@XZ"(%struct.MediumWithCopyCtor* noalias sret %agg.result)
|
||||
// WIN32: define dso_local void @"\01?medium_with_copy_ctor_return@@YA?AUMediumWithCopyCtor@@XZ"(%struct.MediumWithCopyCtor* noalias sret %agg.result)
|
||||
// WIN64: define dso_local void @"\01?medium_with_copy_ctor_return@@YA?AUMediumWithCopyCtor@@XZ"(%struct.MediumWithCopyCtor* noalias sret %agg.result)
|
||||
// WOA: define dso_local arm_aapcs_vfpcc void @"\01?medium_with_copy_ctor_return@@YA?AUMediumWithCopyCtor@@XZ"(%struct.MediumWithCopyCtor* noalias sret %agg.result)
|
||||
|
||||
// Returning a large struct that doesn't fit into a register.
|
||||
Big big_return() { return Big(); }
|
||||
// LINUX-LABEL: define void @_Z10big_returnv(%struct.Big* noalias sret %agg.result)
|
||||
// WIN32: define void @"\01?big_return@@YA?AUBig@@XZ"(%struct.Big* noalias sret %agg.result)
|
||||
// WIN64: define void @"\01?big_return@@YA?AUBig@@XZ"(%struct.Big* noalias sret %agg.result)
|
||||
// WIN32: define dso_local void @"\01?big_return@@YA?AUBig@@XZ"(%struct.Big* noalias sret %agg.result)
|
||||
// WIN64: define dso_local void @"\01?big_return@@YA?AUBig@@XZ"(%struct.Big* noalias sret %agg.result)
|
||||
|
||||
|
||||
void small_arg(Small s) {}
|
||||
// LINUX-LABEL: define void @_Z9small_arg5Small(i32 %s.0)
|
||||
// WIN32: define void @"\01?small_arg@@YAXUSmall@@@Z"(i32 %s.0)
|
||||
// WIN64: define void @"\01?small_arg@@YAXUSmall@@@Z"(i32 %s.coerce)
|
||||
// WOA: define arm_aapcs_vfpcc void @"\01?small_arg@@YAXUSmall@@@Z"([1 x i32] %s.coerce)
|
||||
// WIN32: define dso_local void @"\01?small_arg@@YAXUSmall@@@Z"(i32 %s.0)
|
||||
// WIN64: define dso_local void @"\01?small_arg@@YAXUSmall@@@Z"(i32 %s.coerce)
|
||||
// WOA: define dso_local arm_aapcs_vfpcc void @"\01?small_arg@@YAXUSmall@@@Z"([1 x i32] %s.coerce)
|
||||
|
||||
void medium_arg(Medium s) {}
|
||||
// LINUX-LABEL: define void @_Z10medium_arg6Medium(i32 %s.0, i32 %s.1)
|
||||
// WIN32: define void @"\01?medium_arg@@YAXUMedium@@@Z"(i32 %s.0, i32 %s.1)
|
||||
// WIN64: define void @"\01?medium_arg@@YAXUMedium@@@Z"(i64 %s.coerce)
|
||||
// WOA: define arm_aapcs_vfpcc void @"\01?medium_arg@@YAXUMedium@@@Z"([2 x i32] %s.coerce)
|
||||
// WIN32: define dso_local void @"\01?medium_arg@@YAXUMedium@@@Z"(i32 %s.0, i32 %s.1)
|
||||
// WIN64: define dso_local void @"\01?medium_arg@@YAXUMedium@@@Z"(i64 %s.coerce)
|
||||
// WOA: define dso_local arm_aapcs_vfpcc void @"\01?medium_arg@@YAXUMedium@@@Z"([2 x i32] %s.coerce)
|
||||
|
||||
void base_no_byval_arg(BaseNoByval s) {}
|
||||
// LINUX-LABEL: define void @_Z17base_no_byval_arg11BaseNoByval(%struct.BaseNoByval* byval align 4 %s)
|
||||
// WIN32: define void @"\01?base_no_byval_arg@@YAXUBaseNoByval@@@Z"(i32 %s.0, i32 %s.1)
|
||||
// WIN64: define void @"\01?base_no_byval_arg@@YAXUBaseNoByval@@@Z"(i64 %s.coerce)
|
||||
// WOA: define arm_aapcs_vfpcc void @"\01?base_no_byval_arg@@YAXUBaseNoByval@@@Z"([2 x i32] %s.coerce)
|
||||
// WIN32: define dso_local void @"\01?base_no_byval_arg@@YAXUBaseNoByval@@@Z"(i32 %s.0, i32 %s.1)
|
||||
// WIN64: define dso_local void @"\01?base_no_byval_arg@@YAXUBaseNoByval@@@Z"(i64 %s.coerce)
|
||||
// WOA: define dso_local arm_aapcs_vfpcc void @"\01?base_no_byval_arg@@YAXUBaseNoByval@@@Z"([2 x i32] %s.coerce)
|
||||
|
||||
void small_arg_with_ctor(SmallWithCtor s) {}
|
||||
// LINUX-LABEL: define void @_Z19small_arg_with_ctor13SmallWithCtor(%struct.SmallWithCtor* byval align 4 %s)
|
||||
// WIN32: define void @"\01?small_arg_with_ctor@@YAXUSmallWithCtor@@@Z"(i32 %s.0)
|
||||
// WIN64: define void @"\01?small_arg_with_ctor@@YAXUSmallWithCtor@@@Z"(i32 %s.coerce)
|
||||
// WOA: define arm_aapcs_vfpcc void @"\01?small_arg_with_ctor@@YAXUSmallWithCtor@@@Z"([1 x i32] %s.coerce)
|
||||
// WIN32: define dso_local void @"\01?small_arg_with_ctor@@YAXUSmallWithCtor@@@Z"(i32 %s.0)
|
||||
// WIN64: define dso_local void @"\01?small_arg_with_ctor@@YAXUSmallWithCtor@@@Z"(i32 %s.coerce)
|
||||
// WOA: define dso_local arm_aapcs_vfpcc void @"\01?small_arg_with_ctor@@YAXUSmallWithCtor@@@Z"([1 x i32] %s.coerce)
|
||||
|
||||
// FIXME: We could coerce to a series of i32s here if we wanted to.
|
||||
void multibyte_arg(Multibyte s) {}
|
||||
// LINUX-LABEL: define void @_Z13multibyte_arg9Multibyte(%struct.Multibyte* byval align 4 %s)
|
||||
// WIN32: define void @"\01?multibyte_arg@@YAXUMultibyte@@@Z"(%struct.Multibyte* byval align 4 %s)
|
||||
// WIN64: define void @"\01?multibyte_arg@@YAXUMultibyte@@@Z"(i32 %s.coerce)
|
||||
// WOA: define arm_aapcs_vfpcc void @"\01?multibyte_arg@@YAXUMultibyte@@@Z"([1 x i32] %s.coerce)
|
||||
// WIN32: define dso_local void @"\01?multibyte_arg@@YAXUMultibyte@@@Z"(%struct.Multibyte* byval align 4 %s)
|
||||
// WIN64: define dso_local void @"\01?multibyte_arg@@YAXUMultibyte@@@Z"(i32 %s.coerce)
|
||||
// WOA: define dso_local arm_aapcs_vfpcc void @"\01?multibyte_arg@@YAXUMultibyte@@@Z"([1 x i32] %s.coerce)
|
||||
|
||||
void packed_arg(Packed s) {}
|
||||
// LINUX-LABEL: define void @_Z10packed_arg6Packed(%struct.Packed* byval align 4 %s)
|
||||
// WIN32: define void @"\01?packed_arg@@YAXUPacked@@@Z"(%struct.Packed* byval align 4 %s)
|
||||
// WIN64: define void @"\01?packed_arg@@YAXUPacked@@@Z"(%struct.Packed* %s)
|
||||
// WIN32: define dso_local void @"\01?packed_arg@@YAXUPacked@@@Z"(%struct.Packed* byval align 4 %s)
|
||||
// WIN64: define dso_local void @"\01?packed_arg@@YAXUPacked@@@Z"(%struct.Packed* %s)
|
||||
|
||||
// Test that dtors are invoked in the callee.
|
||||
void small_arg_with_dtor(SmallWithDtor s) {}
|
||||
// WIN32: define void @"\01?small_arg_with_dtor@@YAXUSmallWithDtor@@@Z"(<{ %struct.SmallWithDtor }>* inalloca) {{.*}} {
|
||||
// WIN32: define dso_local void @"\01?small_arg_with_dtor@@YAXUSmallWithDtor@@@Z"(<{ %struct.SmallWithDtor }>* inalloca) {{.*}} {
|
||||
// WIN32: call x86_thiscallcc void @"\01??1SmallWithDtor@@QAE@XZ"
|
||||
// WIN32: }
|
||||
// WIN64: define void @"\01?small_arg_with_dtor@@YAXUSmallWithDtor@@@Z"(i32 %s.coerce) {{.*}} {
|
||||
// WIN64: define dso_local void @"\01?small_arg_with_dtor@@YAXUSmallWithDtor@@@Z"(i32 %s.coerce) {{.*}} {
|
||||
// WIN64: call void @"\01??1SmallWithDtor@@QEAA@XZ"
|
||||
// WIN64: }
|
||||
|
||||
// FIXME: MSVC incompatible!
|
||||
// WOA: define arm_aapcs_vfpcc void @"\01?small_arg_with_dtor@@YAXUSmallWithDtor@@@Z"(%struct.SmallWithDtor* %s) {{.*}} {
|
||||
// WOA: define dso_local arm_aapcs_vfpcc void @"\01?small_arg_with_dtor@@YAXUSmallWithDtor@@@Z"(%struct.SmallWithDtor* %s) {{.*}} {
|
||||
// WOA: call arm_aapcs_vfpcc void @"\01??1SmallWithDtor@@QAA@XZ"(%struct.SmallWithDtor* %s)
|
||||
// WOA: }
|
||||
|
||||
|
@ -174,7 +174,7 @@ void call_small_arg_with_dtor() {
|
|||
}
|
||||
// The temporary is copied, so it's destroyed in the caller as well as the
|
||||
// callee.
|
||||
// WIN64-LABEL: define void @"\01?call_small_arg_with_dtor@@YAXXZ"()
|
||||
// WIN64-LABEL: define dso_local void @"\01?call_small_arg_with_dtor@@YAXXZ"()
|
||||
// WIN64: call %struct.SmallWithDtor* @"\01??0SmallWithDtor@@QEAA@XZ"
|
||||
// WIN64: call void @"\01?small_arg_with_dtor@@YAXUSmallWithDtor@@@Z"(i32 %{{.*}})
|
||||
// WIN64: call void @"\01??1SmallWithDtor@@QEAA@XZ"
|
||||
|
@ -182,13 +182,13 @@ void call_small_arg_with_dtor() {
|
|||
|
||||
// Test that references aren't destroyed in the callee.
|
||||
void ref_small_arg_with_dtor(const SmallWithDtor &s) { }
|
||||
// WIN32: define void @"\01?ref_small_arg_with_dtor@@YAXABUSmallWithDtor@@@Z"(%struct.SmallWithDtor* dereferenceable({{[0-9]+}}) %s) {{.*}} {
|
||||
// WIN32: define dso_local void @"\01?ref_small_arg_with_dtor@@YAXABUSmallWithDtor@@@Z"(%struct.SmallWithDtor* dereferenceable({{[0-9]+}}) %s) {{.*}} {
|
||||
// WIN32-NOT: call x86_thiscallcc void @"\01??1SmallWithDtor@@QAE@XZ"
|
||||
// WIN32: }
|
||||
// WIN64-LABEL: define void @"\01?ref_small_arg_with_dtor@@YAXAEBUSmallWithDtor@@@Z"(%struct.SmallWithDtor* dereferenceable({{[0-9]+}}) %s)
|
||||
// WIN64-LABEL: define dso_local void @"\01?ref_small_arg_with_dtor@@YAXAEBUSmallWithDtor@@@Z"(%struct.SmallWithDtor* dereferenceable({{[0-9]+}}) %s)
|
||||
|
||||
void big_arg_with_dtor(BigWithDtor s) {}
|
||||
// WIN64-LABEL: define void @"\01?big_arg_with_dtor@@YAXUBigWithDtor@@@Z"(%struct.BigWithDtor* %s)
|
||||
// WIN64-LABEL: define dso_local void @"\01?big_arg_with_dtor@@YAXUBigWithDtor@@@Z"(%struct.BigWithDtor* %s)
|
||||
// WIN64: call void @"\01??1BigWithDtor@@QEAA@XZ"
|
||||
// WIN64: }
|
||||
|
||||
|
@ -197,7 +197,7 @@ void call_big_arg_with_dtor() {
|
|||
}
|
||||
// We can elide the copy of the temporary in the caller, because this object is
|
||||
// larger than 8 bytes and is passed indirectly.
|
||||
// WIN64-LABEL: define void @"\01?call_big_arg_with_dtor@@YAXXZ"()
|
||||
// WIN64-LABEL: define dso_local void @"\01?call_big_arg_with_dtor@@YAXXZ"()
|
||||
// WIN64: call %struct.BigWithDtor* @"\01??0BigWithDtor@@QEAA@XZ"
|
||||
// WIN64: call void @"\01?big_arg_with_dtor@@YAXUBigWithDtor@@@Z"(%struct.BigWithDtor* %{{.*}})
|
||||
// WIN64-NOT: call void @"\01??1BigWithDtor@@QEAA@XZ"
|
||||
|
@ -207,7 +207,7 @@ void call_big_arg_with_dtor() {
|
|||
void temporary_ref_with_dtor() {
|
||||
ref_small_arg_with_dtor(SmallWithDtor());
|
||||
}
|
||||
// WIN32: define void @"\01?temporary_ref_with_dtor@@YAXXZ"() {{.*}} {
|
||||
// WIN32: define dso_local void @"\01?temporary_ref_with_dtor@@YAXXZ"() {{.*}} {
|
||||
// WIN32: call x86_thiscallcc %struct.SmallWithDtor* @"\01??0SmallWithDtor@@QAE@XZ"
|
||||
// WIN32: call void @"\01?ref_small_arg_with_dtor@@YAXABUSmallWithDtor@@@Z"
|
||||
// WIN32: call x86_thiscallcc void @"\01??1SmallWithDtor@@QAE@XZ"
|
||||
|
@ -219,7 +219,7 @@ void eh_cleanup_arg_with_dtor() {
|
|||
}
|
||||
// When exceptions are off, we don't have any cleanups. See
|
||||
// microsoft-abi-exceptions.cpp for these cleanups.
|
||||
// WIN32: define void @"\01?eh_cleanup_arg_with_dtor@@YAXXZ"() {{.*}} {
|
||||
// WIN32: define dso_local void @"\01?eh_cleanup_arg_with_dtor@@YAXXZ"() {{.*}} {
|
||||
// WIN32: call x86_thiscallcc %struct.SmallWithDtor* @"\01??0SmallWithDtor@@QAE@XZ"
|
||||
// WIN32: call x86_thiscallcc %struct.SmallWithDtor* @"\01??0SmallWithDtor@@QAE@XZ"
|
||||
// WIN32: call void @"\01?takes_two_by_val_with_dtor@@YAXUSmallWithDtor@@0@Z"
|
||||
|
@ -228,19 +228,19 @@ void eh_cleanup_arg_with_dtor() {
|
|||
|
||||
void small_arg_with_vftable(SmallWithVftable s) {}
|
||||
// LINUX-LABEL: define void @_Z22small_arg_with_vftable16SmallWithVftable(%struct.SmallWithVftable* %s)
|
||||
// WIN32: define void @"\01?small_arg_with_vftable@@YAXUSmallWithVftable@@@Z"(<{ %struct.SmallWithVftable }>* inalloca)
|
||||
// WIN64: define void @"\01?small_arg_with_vftable@@YAXUSmallWithVftable@@@Z"(%struct.SmallWithVftable* %s)
|
||||
// WIN32: define dso_local void @"\01?small_arg_with_vftable@@YAXUSmallWithVftable@@@Z"(<{ %struct.SmallWithVftable }>* inalloca)
|
||||
// WIN64: define dso_local void @"\01?small_arg_with_vftable@@YAXUSmallWithVftable@@@Z"(%struct.SmallWithVftable* %s)
|
||||
|
||||
void medium_arg_with_copy_ctor(MediumWithCopyCtor s) {}
|
||||
// LINUX-LABEL: define void @_Z25medium_arg_with_copy_ctor18MediumWithCopyCtor(%struct.MediumWithCopyCtor* %s)
|
||||
// WIN32: define void @"\01?medium_arg_with_copy_ctor@@YAXUMediumWithCopyCtor@@@Z"(<{ %struct.MediumWithCopyCtor }>* inalloca)
|
||||
// WIN64: define void @"\01?medium_arg_with_copy_ctor@@YAXUMediumWithCopyCtor@@@Z"(%struct.MediumWithCopyCtor* %s)
|
||||
// WOA: define arm_aapcs_vfpcc void @"\01?medium_arg_with_copy_ctor@@YAXUMediumWithCopyCtor@@@Z"(%struct.MediumWithCopyCtor* %s)
|
||||
// WIN32: define dso_local void @"\01?medium_arg_with_copy_ctor@@YAXUMediumWithCopyCtor@@@Z"(<{ %struct.MediumWithCopyCtor }>* inalloca)
|
||||
// WIN64: define dso_local void @"\01?medium_arg_with_copy_ctor@@YAXUMediumWithCopyCtor@@@Z"(%struct.MediumWithCopyCtor* %s)
|
||||
// WOA: define dso_local arm_aapcs_vfpcc void @"\01?medium_arg_with_copy_ctor@@YAXUMediumWithCopyCtor@@@Z"(%struct.MediumWithCopyCtor* %s)
|
||||
|
||||
void big_arg(Big s) {}
|
||||
// LINUX-LABEL: define void @_Z7big_arg3Big(%struct.Big* byval align 4 %s)
|
||||
// WIN32: define void @"\01?big_arg@@YAXUBig@@@Z"(%struct.Big* byval align 4 %s)
|
||||
// WIN64: define void @"\01?big_arg@@YAXUBig@@@Z"(%struct.Big* %s)
|
||||
// WIN32: define dso_local void @"\01?big_arg@@YAXUBig@@@Z"(%struct.Big* byval align 4 %s)
|
||||
// WIN64: define dso_local void @"\01?big_arg@@YAXUBig@@@Z"(%struct.Big* %s)
|
||||
|
||||
// PR27607: We would attempt to load i32 value out of the reference instead of
|
||||
// just loading the pointer from the struct during argument expansion.
|
||||
|
@ -250,8 +250,8 @@ struct RefField {
|
|||
};
|
||||
void takes_ref_field(RefField s) {}
|
||||
// LINUX-LABEL: define void @_Z15takes_ref_field8RefField(%struct.RefField* byval align 4 %s)
|
||||
// WIN32: define void @"\01?takes_ref_field@@YAXURefField@@@Z"(i32* %s.0)
|
||||
// WIN64: define void @"\01?takes_ref_field@@YAXURefField@@@Z"(i64 %s.coerce)
|
||||
// WIN32: define dso_local void @"\01?takes_ref_field@@YAXURefField@@@Z"(i32* %s.0)
|
||||
// WIN64: define dso_local void @"\01?takes_ref_field@@YAXURefField@@@Z"(i64 %s.coerce)
|
||||
|
||||
void pass_ref_field() {
|
||||
int x;
|
||||
|
@ -259,9 +259,9 @@ void pass_ref_field() {
|
|||
}
|
||||
// LINUX-LABEL: define void @_Z14pass_ref_fieldv()
|
||||
// LINUX: call void @_Z15takes_ref_field8RefField(%struct.RefField* byval align 4 %{{.*}})
|
||||
// WIN32-LABEL: define void @"\01?pass_ref_field@@YAXXZ"()
|
||||
// WIN32-LABEL: define dso_local void @"\01?pass_ref_field@@YAXXZ"()
|
||||
// WIN32: call void @"\01?takes_ref_field@@YAXURefField@@@Z"(i32* %{{.*}})
|
||||
// WIN64-LABEL: define void @"\01?pass_ref_field@@YAXXZ"()
|
||||
// WIN64-LABEL: define dso_local void @"\01?pass_ref_field@@YAXXZ"()
|
||||
// WIN64: call void @"\01?takes_ref_field@@YAXURefField@@@Z"(i64 %{{.*}})
|
||||
|
||||
class Class {
|
||||
|
@ -269,47 +269,47 @@ class Class {
|
|||
Small thiscall_method_small() { return Small(); }
|
||||
// LINUX: define {{.*}} void @_ZN5Class21thiscall_method_smallEv(%struct.Small* noalias sret %agg.result, %class.Class* %this)
|
||||
// WIN32: define {{.*}} x86_thiscallcc void @"\01?thiscall_method_small@Class@@QAE?AUSmall@@XZ"(%class.Class* %this, %struct.Small* noalias sret %agg.result)
|
||||
// WIN64: define linkonce_odr void @"\01?thiscall_method_small@Class@@QEAA?AUSmall@@XZ"(%class.Class* %this, %struct.Small* noalias sret %agg.result)
|
||||
// WIN64: define linkonce_odr dso_local void @"\01?thiscall_method_small@Class@@QEAA?AUSmall@@XZ"(%class.Class* %this, %struct.Small* noalias sret %agg.result)
|
||||
|
||||
SmallWithCtor thiscall_method_small_with_ctor() { return SmallWithCtor(); }
|
||||
// LINUX: define {{.*}} void @_ZN5Class31thiscall_method_small_with_ctorEv(%struct.SmallWithCtor* noalias sret %agg.result, %class.Class* %this)
|
||||
// WIN32: define {{.*}} x86_thiscallcc void @"\01?thiscall_method_small_with_ctor@Class@@QAE?AUSmallWithCtor@@XZ"(%class.Class* %this, %struct.SmallWithCtor* noalias sret %agg.result)
|
||||
// WIN64: define linkonce_odr void @"\01?thiscall_method_small_with_ctor@Class@@QEAA?AUSmallWithCtor@@XZ"(%class.Class* %this, %struct.SmallWithCtor* noalias sret %agg.result)
|
||||
// WIN64: define linkonce_odr dso_local void @"\01?thiscall_method_small_with_ctor@Class@@QEAA?AUSmallWithCtor@@XZ"(%class.Class* %this, %struct.SmallWithCtor* noalias sret %agg.result)
|
||||
|
||||
Small __cdecl cdecl_method_small() { return Small(); }
|
||||
// LINUX: define {{.*}} void @_ZN5Class18cdecl_method_smallEv(%struct.Small* noalias sret %agg.result, %class.Class* %this)
|
||||
// WIN32: define {{.*}} void @"\01?cdecl_method_small@Class@@QAA?AUSmall@@XZ"(%class.Class* %this, %struct.Small* noalias sret %agg.result)
|
||||
// WIN64: define linkonce_odr void @"\01?cdecl_method_small@Class@@QEAA?AUSmall@@XZ"(%class.Class* %this, %struct.Small* noalias sret %agg.result)
|
||||
// WIN64: define linkonce_odr dso_local void @"\01?cdecl_method_small@Class@@QEAA?AUSmall@@XZ"(%class.Class* %this, %struct.Small* noalias sret %agg.result)
|
||||
|
||||
Big __cdecl cdecl_method_big() { return Big(); }
|
||||
// LINUX: define {{.*}} void @_ZN5Class16cdecl_method_bigEv(%struct.Big* noalias sret %agg.result, %class.Class* %this)
|
||||
// WIN32: define {{.*}} void @"\01?cdecl_method_big@Class@@QAA?AUBig@@XZ"(%class.Class* %this, %struct.Big* noalias sret %agg.result)
|
||||
// WIN64: define linkonce_odr void @"\01?cdecl_method_big@Class@@QEAA?AUBig@@XZ"(%class.Class* %this, %struct.Big* noalias sret %agg.result)
|
||||
// WIN64: define linkonce_odr dso_local void @"\01?cdecl_method_big@Class@@QEAA?AUBig@@XZ"(%class.Class* %this, %struct.Big* noalias sret %agg.result)
|
||||
|
||||
void thiscall_method_arg(Empty s) {}
|
||||
// LINUX: define {{.*}} void @_ZN5Class19thiscall_method_argE5Empty(%class.Class* %this)
|
||||
// WIN32: define {{.*}} void @"\01?thiscall_method_arg@Class@@QAEXUEmpty@@@Z"(%class.Class* %this, %struct.Empty* byval align 4 %s)
|
||||
// WIN64: define linkonce_odr void @"\01?thiscall_method_arg@Class@@QEAAXUEmpty@@@Z"(%class.Class* %this, i8 %s.coerce)
|
||||
// WIN64: define linkonce_odr dso_local void @"\01?thiscall_method_arg@Class@@QEAAXUEmpty@@@Z"(%class.Class* %this, i8 %s.coerce)
|
||||
|
||||
void thiscall_method_arg(EmptyWithCtor s) {}
|
||||
// LINUX: define {{.*}} void @_ZN5Class19thiscall_method_argE13EmptyWithCtor(%class.Class* %this)
|
||||
// WIN32: define {{.*}} void @"\01?thiscall_method_arg@Class@@QAEXUEmptyWithCtor@@@Z"(%class.Class* %this, %struct.EmptyWithCtor* byval align 4 %s)
|
||||
// WIN64: define linkonce_odr void @"\01?thiscall_method_arg@Class@@QEAAXUEmptyWithCtor@@@Z"(%class.Class* %this, i8 %s.coerce)
|
||||
// WIN64: define linkonce_odr dso_local void @"\01?thiscall_method_arg@Class@@QEAAXUEmptyWithCtor@@@Z"(%class.Class* %this, i8 %s.coerce)
|
||||
|
||||
void thiscall_method_arg(Small s) {}
|
||||
// LINUX: define {{.*}} void @_ZN5Class19thiscall_method_argE5Small(%class.Class* %this, i32 %s.0)
|
||||
// WIN32: define {{.*}} void @"\01?thiscall_method_arg@Class@@QAEXUSmall@@@Z"(%class.Class* %this, i32 %s.0)
|
||||
// WIN64: define linkonce_odr void @"\01?thiscall_method_arg@Class@@QEAAXUSmall@@@Z"(%class.Class* %this, i32 %s.coerce)
|
||||
// WIN64: define linkonce_odr dso_local void @"\01?thiscall_method_arg@Class@@QEAAXUSmall@@@Z"(%class.Class* %this, i32 %s.coerce)
|
||||
|
||||
void thiscall_method_arg(SmallWithCtor s) {}
|
||||
// LINUX: define {{.*}} void @_ZN5Class19thiscall_method_argE13SmallWithCtor(%class.Class* %this, %struct.SmallWithCtor* byval align 4 %s)
|
||||
// WIN32: define {{.*}} void @"\01?thiscall_method_arg@Class@@QAEXUSmallWithCtor@@@Z"(%class.Class* %this, i32 %s.0)
|
||||
// WIN64: define linkonce_odr void @"\01?thiscall_method_arg@Class@@QEAAXUSmallWithCtor@@@Z"(%class.Class* %this, i32 %s.coerce)
|
||||
// WIN64: define linkonce_odr dso_local void @"\01?thiscall_method_arg@Class@@QEAAXUSmallWithCtor@@@Z"(%class.Class* %this, i32 %s.coerce)
|
||||
|
||||
void thiscall_method_arg(Big s) {}
|
||||
// LINUX: define {{.*}} void @_ZN5Class19thiscall_method_argE3Big(%class.Class* %this, %struct.Big* byval align 4 %s)
|
||||
// WIN32: define {{.*}} void @"\01?thiscall_method_arg@Class@@QAEXUBig@@@Z"(%class.Class* %this, %struct.Big* byval align 4 %s)
|
||||
// WIN64: define linkonce_odr void @"\01?thiscall_method_arg@Class@@QEAAXUBig@@@Z"(%class.Class* %this, %struct.Big* %s)
|
||||
// WIN64: define linkonce_odr dso_local void @"\01?thiscall_method_arg@Class@@QEAAXUBig@@@Z"(%class.Class* %this, %struct.Big* %s)
|
||||
};
|
||||
|
||||
void use_class() {
|
||||
|
@ -333,13 +333,13 @@ struct X {
|
|||
};
|
||||
void g(X) {
|
||||
}
|
||||
// WIN32: define void @"\01?g@@YAXUX@@@Z"(<{ %struct.X, [3 x i8] }>* inalloca) {{.*}} {
|
||||
// WIN32: define dso_local void @"\01?g@@YAXUX@@@Z"(<{ %struct.X, [3 x i8] }>* inalloca) {{.*}} {
|
||||
// WIN32: call x86_thiscallcc void @"\01??1X@@QAE@XZ"(%struct.X* {{.*}})
|
||||
// WIN32: }
|
||||
void f() {
|
||||
g(X());
|
||||
}
|
||||
// WIN32: define void @"\01?f@@YAXXZ"() {{.*}} {
|
||||
// WIN32: define dso_local void @"\01?f@@YAXXZ"() {{.*}} {
|
||||
// WIN32-NOT: call {{.*}} @"\01??1X@@QAE@XZ"
|
||||
// WIN32: }
|
||||
|
||||
|
@ -362,7 +362,7 @@ void bar() {
|
|||
b.b = 13;
|
||||
int c = foo(NonTrivial(), b);
|
||||
}
|
||||
// WIN32-LABEL: define void @"\01?bar@test2@@YAXXZ"() {{.*}} {
|
||||
// WIN32-LABEL: define dso_local void @"\01?bar@test2@@YAXXZ"() {{.*}} {
|
||||
// WIN32: %[[argmem:[^ ]*]] = alloca inalloca [[argmem_ty:<{ %"struct.test2::NonTrivial", %"struct.test2::POD" }>]]
|
||||
// WIN32: getelementptr inbounds [[argmem_ty]], [[argmem_ty]]* %[[argmem]], i32 0, i32 1
|
||||
// WIN32: call void @llvm.memcpy
|
||||
|
@ -384,7 +384,7 @@ struct NonTrivial {
|
|||
int a;
|
||||
};
|
||||
void foo(NonTrivial a, bool b) { }
|
||||
// WIN32-LABEL: define void @"\01?foo@test3@@YAXUNonTrivial@1@_N@Z"(<{ %"struct.test3::NonTrivial", i8, [3 x i8] }>* inalloca)
|
||||
// WIN32-LABEL: define dso_local void @"\01?foo@test3@@YAXUNonTrivial@1@_N@Z"(<{ %"struct.test3::NonTrivial", i8, [3 x i8] }>* inalloca)
|
||||
|
||||
}
|
||||
|
||||
|
@ -399,7 +399,7 @@ void fn1(FnPtr1 a, SmallWithDtor b) { }
|
|||
struct ForwardDeclare1 {};
|
||||
|
||||
void fn2(FnPtr1 a, SmallWithDtor b) { fn1(a, b); };
|
||||
// WIN32-LABEL: define void @"\01?fn2@@YAXP6AXUForwardDeclare1@@@ZUSmallWithDtor@@@Z"
|
||||
// WIN32-LABEL: define dso_local void @"\01?fn2@@YAXP6AXUForwardDeclare1@@@ZUSmallWithDtor@@@Z"
|
||||
// WIN32: %[[a:[^ ]*]] = getelementptr inbounds [[argmem_ty:<{ {}\*, %struct.SmallWithDtor }>]], [[argmem_ty:<{ {}\*, %struct.SmallWithDtor }>]]* %{{.*}}, i32 0, i32 0
|
||||
// WIN32: %[[a1:[^ ]*]] = bitcast {}** %[[a]] to void [[dst_ty:\(%struct.ForwardDeclare1\*\)\*]]*
|
||||
// WIN32: %[[argmem:[^ ]*]] = alloca inalloca [[argmem_ty]]
|
||||
|
@ -430,11 +430,11 @@ struct C final : A, B {
|
|||
};
|
||||
void C::g() { return h(SmallWithDtor()); }
|
||||
|
||||
// WIN32-LABEL: define x86_thiscallcc void @"\01?g@C@pr30293@@QAEXXZ"(%"struct.pr30293::C"* %this)
|
||||
// WIN32-LABEL: define dso_local x86_thiscallcc void @"\01?g@C@pr30293@@QAEXXZ"(%"struct.pr30293::C"* %this)
|
||||
// WIN32: call x86_thiscallcc %struct.SmallWithDtor* @"\01??0SmallWithDtor@@QAE@XZ"
|
||||
// WIN32: call void @"\01?h@C@pr30293@@UAAXUSmallWithDtor@@@Z"(<{ i8*, %struct.SmallWithDtor }>* inalloca %{{[^,)]*}})
|
||||
// WIN32: declare void @"\01?h@C@pr30293@@UAAXUSmallWithDtor@@@Z"(<{ i8*, %struct.SmallWithDtor }>* inalloca)
|
||||
// WIN32: declare dso_local void @"\01?h@C@pr30293@@UAAXUSmallWithDtor@@@Z"(<{ i8*, %struct.SmallWithDtor }>* inalloca)
|
||||
|
||||
// WIN64-LABEL: define void @"\01?g@C@pr30293@@QEAAXXZ"(%"struct.pr30293::C"* %this)
|
||||
// WIN64: declare void @"\01?h@C@pr30293@@UEAAXUSmallWithDtor@@@Z"(i8*, i32)
|
||||
// WIN64-LABEL: define dso_local void @"\01?g@C@pr30293@@QEAAXXZ"(%"struct.pr30293::C"* %this)
|
||||
// WIN64: declare dso_local void @"\01?h@C@pr30293@@UEAAXUSmallWithDtor@@@Z"(i8*, i32)
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue