mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-03 07:38:57 +00:00
Recommit #2 "[Driver] Default to -fno-common for all targets"
After a first attempt to fix the test-suite failures, my first recommit caused the same failures again. I had updated CMakeList.txt files of tests that needed -fcommon, but it turns out that there are also Makefiles which are used by some bots, so I've updated these Makefiles now too. See the original commit message for more details on this change: 0a9fc9233e172601e26381810d093e02ef410f65
This commit is contained in:
parent
156a1b59df
commit
3d9a0445cc
@ -1307,6 +1307,10 @@ Use colors in diagnostics
|
||||
|
||||
.. option:: -fcommon, -fno-common
|
||||
|
||||
Place definitions of variables with no storage class and no initializer
|
||||
(tentative definitions) in a common block, instead of generating individual
|
||||
zero-initialized definitions (default -fno-common).
|
||||
|
||||
.. option:: -fcompile-resource=<arg>, --resource <arg>, --resource=<arg>
|
||||
|
||||
.. option:: -fconstant-cfstrings, -fno-constant-cfstrings
|
||||
|
@ -84,6 +84,13 @@ future versions of Clang.
|
||||
Modified Compiler Flags
|
||||
-----------------------
|
||||
|
||||
- -fno-common has been enabled as the default for all targets. Therefore, C
|
||||
code that uses tentative definitions as definitions of a variable in multiple
|
||||
translation units will trigger multiple-definition linker errors. Generally,
|
||||
this occurs when the use of the ``extern`` keyword is neglected in the declaration
|
||||
of a variable in a header file. In some cases, no specific translation unit
|
||||
provides a definition of the variable. The previous behavior can be restored by
|
||||
specifying ``-fcommon``.
|
||||
|
||||
New Pragmas in Clang
|
||||
--------------------
|
||||
|
@ -848,7 +848,8 @@ def fno_record_command_line : Flag<["-"], "fno-record-command-line">,
|
||||
Group<f_clang_Group>;
|
||||
def : Flag<["-"], "frecord-gcc-switches">, Alias<frecord_command_line>;
|
||||
def : Flag<["-"], "fno-record-gcc-switches">, Alias<fno_record_command_line>;
|
||||
def fcommon : Flag<["-"], "fcommon">, Group<f_Group>;
|
||||
def fcommon : Flag<["-"], "fcommon">, Group<f_Group>,
|
||||
Flags<[CoreOption, CC1Option]>, HelpText<"Place uninitialized global variables in a common block">;
|
||||
def fcompile_resource_EQ : Joined<["-"], "fcompile-resource=">, Group<f_Group>;
|
||||
def fcomplete_member_pointers : Flag<["-"], "fcomplete-member-pointers">, Group<f_clang_Group>,
|
||||
Flags<[CoreOption, CC1Option]>,
|
||||
|
@ -1408,20 +1408,6 @@ static bool isSignedCharDefault(const llvm::Triple &Triple) {
|
||||
}
|
||||
}
|
||||
|
||||
static bool isNoCommonDefault(const llvm::Triple &Triple) {
|
||||
switch (Triple.getArch()) {
|
||||
default:
|
||||
if (Triple.isOSFuchsia())
|
||||
return true;
|
||||
return false;
|
||||
|
||||
case llvm::Triple::xcore:
|
||||
case llvm::Triple::wasm32:
|
||||
case llvm::Triple::wasm64:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
static bool hasMultipleInvocations(const llvm::Triple &Triple,
|
||||
const ArgList &Args) {
|
||||
// Supported only on Darwin where we invoke the compiler multiple times
|
||||
@ -5692,11 +5678,9 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
||||
if (!Args.hasFlag(options::OPT_Qy, options::OPT_Qn, true))
|
||||
CmdArgs.push_back("-Qn");
|
||||
|
||||
// -fcommon is the default unless compiling kernel code or the target says so
|
||||
bool NoCommonDefault = KernelOrKext || isNoCommonDefault(RawTriple);
|
||||
if (!Args.hasFlag(options::OPT_fcommon, options::OPT_fno_common,
|
||||
!NoCommonDefault))
|
||||
CmdArgs.push_back("-fno-common");
|
||||
// -fno-common is the default, set -fcommon only when that flag is set.
|
||||
if (Args.hasFlag(options::OPT_fcommon, options::OPT_fno_common, false))
|
||||
CmdArgs.push_back("-fcommon");
|
||||
|
||||
// -fsigned-bitfields is default, and clang doesn't yet support
|
||||
// -funsigned-bitfields.
|
||||
|
@ -811,7 +811,7 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
||||
Opts.RecordCommandLine =
|
||||
std::string(Args.getLastArgValue(OPT_record_command_line));
|
||||
Opts.MergeAllConstants = Args.hasArg(OPT_fmerge_all_constants);
|
||||
Opts.NoCommon = Args.hasArg(OPT_fno_common);
|
||||
Opts.NoCommon = !Args.hasArg(OPT_fcommon);
|
||||
Opts.NoInlineLineTables = Args.hasArg(OPT_gno_inline_line_tables);
|
||||
Opts.NoImplicitFloat = Args.hasArg(OPT_no_implicit_float);
|
||||
Opts.OptimizeSize = getOptimizationLevelSize(Args);
|
||||
|
@ -3,6 +3,6 @@
|
||||
int g0, f0();
|
||||
int f1(), g1;
|
||||
|
||||
// CHECK: @g0 = common {{(dso_local )?}}global i32 0, align 4
|
||||
// CHECK: @g1 = common {{(dso_local )?}}global i32 0, align 4
|
||||
// CHECK: @g0 = {{(dso_local )?}}global i32 0, align 4
|
||||
// CHECK: @g1 = {{(dso_local )?}}global i32 0, align 4
|
||||
|
||||
|
@ -2,10 +2,10 @@
|
||||
// RUN: %clang -target i386-apple-darwin10 -flto -S -g %s -o - | FileCheck %s
|
||||
|
||||
// CHECK: @main.localstatic = internal global i32 0, align 4, !dbg [[L:![0-9]+]]
|
||||
// CHECK: @global = common global i32 0, align 4, !dbg [[G:![0-9]+]]
|
||||
// CHECK: @global = global i32 0, align 4, !dbg [[G:![0-9]+]]
|
||||
|
||||
int global;
|
||||
int main() {
|
||||
int main() {
|
||||
static int localstatic;
|
||||
return 0;
|
||||
}
|
||||
|
@ -16,7 +16,7 @@
|
||||
// CHECK-DEBUG: cannot yet generate debug info for SVE type '__SVFloat64_t'
|
||||
// CHECK-DEBUG: cannot yet generate debug info for SVE type '__SVBool_t'
|
||||
|
||||
// CHECK: @ptr = common global <vscale x 16 x i8>* null, align 8
|
||||
// CHECK: @ptr = global <vscale x 16 x i8>* null, align 8
|
||||
// CHECK: %s8 = alloca <vscale x 16 x i8>, align 16
|
||||
// CHECK: %s16 = alloca <vscale x 8 x i16>, align 16
|
||||
// CHECK: %s32 = alloca <vscale x 4 x i32>, align 16
|
||||
|
@ -1,13 +1,13 @@
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm < %s | FileCheck -enable-var-scope -check-prefixes=CHECK,X86 %s
|
||||
// RUN: %clang_cc1 -triple amdgcn -emit-llvm < %s | FileCheck -enable-var-scope -check-prefixes=CHECK,AMDGCN %s
|
||||
|
||||
// CHECK: @foo = common addrspace(1) global
|
||||
// CHECK: @foo = addrspace(1) global
|
||||
int foo __attribute__((address_space(1)));
|
||||
|
||||
// CHECK: @ban = common addrspace(1) global
|
||||
// CHECK: @ban = addrspace(1) global
|
||||
int ban[10] __attribute__((address_space(1)));
|
||||
|
||||
// CHECK: @a = common global
|
||||
// CHECK: @a = global
|
||||
int a __attribute__((address_space(0)));
|
||||
|
||||
// CHECK-LABEL: define i32 @test1()
|
||||
|
@ -5,8 +5,13 @@
|
||||
// RUN: %clang_cc1 -triple aarch64-linux-gnu -emit-llvm -o - %s | FileCheck -check-prefix=CHECKGLOBALS %s
|
||||
|
||||
int g0;
|
||||
// CHECKBASIC-DAG: @g0 = common global i32 0
|
||||
// CHECKASM-DAG: .comm g0,4,4
|
||||
// CHECKBASIC-DAG: @g0 = global i32 0
|
||||
// CHECKASM-DAG: .bss
|
||||
// CHECKASM-DAG: .globl g0
|
||||
// CHECKASM-DAG: .p2align 2
|
||||
// CHECKASM-DAG: g0:
|
||||
// CHECKASM-DAG: .long 0
|
||||
// CHECKASM-DAG: .size g0, 4
|
||||
__thread int TL_WITH_ALIAS;
|
||||
// CHECKBASIC-DAG: @TL_WITH_ALIAS = thread_local global i32 0, align 4
|
||||
// CHECKASM-DAG: .globl TL_WITH_ALIAS
|
||||
|
@ -7,10 +7,10 @@ struct test {
|
||||
};
|
||||
|
||||
char c;
|
||||
// CHECK-DAG: @c = common global i8 0, align 2
|
||||
// CHECK-DAG: @c = global i8 0, align 2
|
||||
|
||||
struct test s;
|
||||
// CHECK-DAG: @s = common global %struct.test zeroinitializer, align 2
|
||||
// CHECK-DAG: @s = global %struct.test zeroinitializer, align 2
|
||||
|
||||
extern char ec;
|
||||
// CHECK-DAG: @ec = external global i8, align 2
|
||||
|
@ -7,7 +7,7 @@ union {int a[4]; __attribute((aligned(16))) float b[4];} b;
|
||||
// CHECK: @b = {{.*}}zeroinitializer, align 16
|
||||
|
||||
long long int test5[1024];
|
||||
// CHECK-DAG: @test5 = common global [1024 x i64] zeroinitializer, align 8
|
||||
// CHECK-DAG: @test5 = global [1024 x i64] zeroinitializer, align 8
|
||||
|
||||
// PR5279 - Reduced alignment on typedef.
|
||||
typedef int myint __attribute__((aligned(1)));
|
||||
|
@ -11,9 +11,9 @@ int *test(void) {
|
||||
}
|
||||
|
||||
// LINUX: @bar = internal global i32 0
|
||||
// LINUX: @foo = common global i32 0
|
||||
// LINUX: @foo = global i32 0
|
||||
// LINUX: declare i8* @alias(i32)
|
||||
|
||||
// DARWIN: @"\01bar" = internal global i32 0
|
||||
// DARWIN: @"\01foo" = common global i32 0
|
||||
// DARWIN: @"\01foo" = global i32 0
|
||||
// DARWIN: declare i8* @"\01alias"(i32)
|
||||
|
@ -20,7 +20,7 @@ extern int E __attribute__((weak_import));
|
||||
|
||||
// CHECK: @A = global i32
|
||||
// CHECK-NOT: @B =
|
||||
// CHECK: @C = common global i32
|
||||
// CHECK: @C = global i32
|
||||
// CHECK: @D = global i32
|
||||
// CHECK: @E = global i32
|
||||
|
||||
|
@ -8,7 +8,7 @@ int test1_h(void) {
|
||||
return test1_g;
|
||||
}
|
||||
|
||||
// CHECK: @test2_f = common global i32 0, align 4
|
||||
// CHECK: @test2_f = global i32 0, align 4
|
||||
int test2_f;
|
||||
static int test2_g __attribute__((weakref("test2_f")));
|
||||
int test2_h(void) {
|
||||
@ -25,7 +25,7 @@ int test3_h(void) {
|
||||
return test3_g;
|
||||
}
|
||||
|
||||
// CHECK: @test4_f = common global i32 0, align 4
|
||||
// CHECK: @test4_f = global i32 0, align 4
|
||||
extern int test4_f;
|
||||
static int test4_g __attribute__((weakref("test4_f")));
|
||||
int test4_h(void) {
|
||||
|
@ -20,7 +20,7 @@ int t18 = 1;
|
||||
// CHECK: @t16 = extern_weak global i32
|
||||
extern int t16 __attribute__((weak_import));
|
||||
|
||||
// CHECK: @t6 = common protected global i32 0
|
||||
// CHECK: @t6 = protected global i32 0
|
||||
int t6 __attribute__((visibility("protected")));
|
||||
|
||||
// CHECK: @t12 = global i32 0, section "SECT"
|
||||
|
@ -68,7 +68,7 @@ int (*g(void))(void) {
|
||||
}
|
||||
|
||||
// CHECK-BLOCKS-IN-BLOCKS-DECL: @_NSConcreteStackBlock = external dso_local dllexport global i8*
|
||||
// CHECK-BLOCKS-IN-BLOCKS-DEFN: @_NSConcreteStackBlock = common dso_local dllexport global [5 x i32]
|
||||
// CHECK-BLOCKS-IN-BLOCKS-DEFN: @_NSConcreteStackBlock = 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*
|
||||
|
@ -2,16 +2,16 @@
|
||||
// All of these should uses the memory representation of _Bool
|
||||
|
||||
// CHECK-LABEL: %struct.teststruct1 = type { i8, i8 }
|
||||
// CHECK-LABEL: @test1 = common global %struct.teststruct1
|
||||
// CHECK-LABEL: @test1 = global %struct.teststruct1
|
||||
struct teststruct1 {_Bool a, b;} test1;
|
||||
|
||||
// CHECK-LABEL: @test2 = common global i8* null
|
||||
// CHECK-LABEL: @test2 = global i8* null
|
||||
_Bool* test2;
|
||||
|
||||
// CHECK-LABEL: @test3 = common global [10 x i8]
|
||||
// CHECK-LABEL: @test3 = global [10 x i8]
|
||||
_Bool test3[10];
|
||||
|
||||
// CHECK-LABEL: @test4 = common global [0 x i8]* null
|
||||
// CHECK-LABEL: @test4 = global [0 x i8]* null
|
||||
_Bool (*test4)[];
|
||||
|
||||
// CHECK-LABEL: define void @f(i32 %x)
|
||||
|
@ -25,7 +25,7 @@ struct elem {
|
||||
// CHECK-DAG: %struct.elem = type { %struct.ptr }
|
||||
|
||||
struct ptr object;
|
||||
// CHECK-DAG: @object = common global %struct.ptr zeroinitializer
|
||||
// CHECK-DAG: @object = global %struct.ptr zeroinitializer
|
||||
|
||||
// CHECK-DAG: @testStructGlobal = global {{.*}} { i16 1, i16 2, i16 3, i16 4 }
|
||||
// CHECK-DAG: @testPromotedStructGlobal = global {{.*}} { %{{.*}} { i16 1, i16 2, i16 3 }, [2 x i8] zeroinitializer }
|
||||
|
@ -30,7 +30,7 @@ const CFStringRef string = (CFStringRef)__builtin___CFStringMakeConstantString("
|
||||
|
||||
|
||||
// CHECK-CF-IN-CF-DECL: @__CFConstantStringClassReference = external global [0 x i32]
|
||||
// CHECK-CF-IN-CF-DEFN: @__CFConstantStringClassReference = common global [32 x i64] zeroinitializer, align 16
|
||||
// CHECK-CF: @__CFConstantStringClassReference = common global [1 x i64] zeroinitializer, align 8
|
||||
// CHECK-CF-IN-CF-DEFN: @__CFConstantStringClassReference = global [32 x i64] zeroinitializer, align 16
|
||||
// CHECK-CF: @__CFConstantStringClassReference = global [1 x i64] zeroinitializer, align 8
|
||||
// CHECK-CF-EXTERN: @__CFConstantStringClassReference = external global [0 x i32]
|
||||
// CHECK-CF-EXTERN: @.str = private unnamed_addr constant [7 x i8] c"string\00", section ".rodata", align 1
|
||||
|
@ -32,7 +32,7 @@ typedef struct __CFString *CFStringRef;
|
||||
const CFStringRef string = (CFStringRef)__builtin___CFStringMakeConstantString("string");
|
||||
|
||||
// CHECK-CF-IN-CF-DECL: @__CFConstantStringClassReference = external dso_local dllexport global [0 x i32]
|
||||
// CHECK-CF-IN-CF-DEFN: @__CFConstantStringClassReference = common dso_local dllexport global [32 x i32]
|
||||
// CHECK-CF-IN-CF-DEFN: @__CFConstantStringClassReference = 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]
|
||||
|
@ -1,13 +1,13 @@
|
||||
// RUN: %clang_cc1 -triple amdgcn---amdgiz -emit-llvm < %s | FileCheck -check-prefixes=CHECK,COM %s
|
||||
|
||||
// CHECK-DAG: @foo = common addrspace(1) global i32 0
|
||||
// CHECK-DAG: @foo = addrspace(1) global i32 0
|
||||
int foo;
|
||||
|
||||
// CHECK-DAG: @ban = common addrspace(1) global [10 x i32] zeroinitializer
|
||||
// CHECK-DAG: @ban = addrspace(1) global [10 x i32] zeroinitializer
|
||||
int ban[10];
|
||||
|
||||
// CHECK-DAG: @A = common addrspace(1) global i32* null
|
||||
// CHECK-DAG: @B = common addrspace(1) global i32* null
|
||||
// CHECK-DAG: @A = addrspace(1) global i32* null
|
||||
// CHECK-DAG: @B = addrspace(1) global i32* null
|
||||
int *A;
|
||||
int *B;
|
||||
|
||||
|
@ -9,8 +9,8 @@
|
||||
// CHECK-MSVC: @z = dso_local constant i32 4, align 4
|
||||
// CHECK-LNX: @z = constant i32 4, align 4
|
||||
|
||||
// CHECK-MSVC: @y = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-LNX: @y = common global i32 0, align 4
|
||||
// CHECK-MSVC: @y = dso_local dllexport constant i32 0, align 4
|
||||
// CHECK-LNX: @y = constant i32 0, align 4
|
||||
|
||||
__declspec(dllexport) int const x = 3;
|
||||
__declspec(dllexport) const int y;
|
||||
|
@ -14,7 +14,7 @@
|
||||
__declspec(dllexport) extern int ExternGlobalDecl;
|
||||
|
||||
// dllexport implies a definition.
|
||||
// CHECK-DAG: @GlobalDef = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @GlobalDef = dso_local dllexport global i32 0, align 4
|
||||
__declspec(dllexport) int GlobalDef;
|
||||
|
||||
// Export definition.
|
||||
@ -27,11 +27,11 @@ __declspec(dllexport) extern int GlobalDeclInit;
|
||||
int GlobalDeclInit = 1;
|
||||
|
||||
// Redeclarations
|
||||
// CHECK-DAG: @GlobalRedecl1 = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @GlobalRedecl1 = dso_local dllexport global i32 0, align 4
|
||||
__declspec(dllexport) extern int GlobalRedecl1;
|
||||
__declspec(dllexport) int GlobalRedecl1;
|
||||
|
||||
// CHECK-DAG: @GlobalRedecl2 = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @GlobalRedecl2 = dso_local dllexport global i32 0, align 4
|
||||
__declspec(dllexport) extern int GlobalRedecl2;
|
||||
int GlobalRedecl2;
|
||||
|
||||
@ -70,13 +70,13 @@ __declspec(dllexport) void redecl2(void);
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// dllexport takes precedence over the dllimport if both are specified.
|
||||
// CHECK-DAG: @PrecedenceGlobal1A = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal1B = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal1A = dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal1B = dso_local dllexport global i32 0, align 4
|
||||
__attribute__((dllimport, dllexport)) int PrecedenceGlobal1A;
|
||||
__declspec(dllimport) __declspec(dllexport) int PrecedenceGlobal1B;
|
||||
|
||||
// CHECK-DAG: @PrecedenceGlobal2A = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal2B = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal2A = dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobal2B = dso_local dllexport global i32 0, align 4
|
||||
__attribute__((dllexport, dllimport)) int PrecedenceGlobal2A;
|
||||
__declspec(dllexport) __declspec(dllimport) int PrecedenceGlobal2B;
|
||||
|
||||
@ -84,7 +84,7 @@ __declspec(dllexport) __declspec(dllimport) int PrecedenceGlobal2B;
|
||||
__declspec(dllexport) extern int PrecedenceGlobalRedecl1;
|
||||
__declspec(dllimport) int PrecedenceGlobalRedecl1 = 0;
|
||||
|
||||
// CHECK-DAG: @PrecedenceGlobalRedecl2 = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobalRedecl2 = dso_local dllexport global i32 0, align 4
|
||||
__declspec(dllimport) extern int PrecedenceGlobalRedecl2;
|
||||
__declspec(dllexport) int PrecedenceGlobalRedecl2;
|
||||
|
||||
@ -92,7 +92,7 @@ __declspec(dllexport) int PrecedenceGlobalRedecl2;
|
||||
__attribute__((dllexport)) extern int PrecedenceGlobalMixed1;
|
||||
__declspec(dllimport) int PrecedenceGlobalMixed1 = 1;
|
||||
|
||||
// CHECK-DAG: @PrecedenceGlobalMixed2 = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK-DAG: @PrecedenceGlobalMixed2 = dso_local dllexport global i32 0, align 4
|
||||
__attribute__((dllimport)) extern int PrecedenceGlobalMixed2;
|
||||
__declspec(dllexport) int PrecedenceGlobalMixed2;
|
||||
|
||||
|
@ -46,8 +46,8 @@ __declspec(dllimport) extern int GlobalRedecl3;
|
||||
USEVAR(GlobalRedecl3)
|
||||
|
||||
// Make sure this works even if the decl has been used before it's defined (PR20792).
|
||||
// MS: @GlobalRedecl4 = common dso_local dllexport global i32
|
||||
// GNU: @GlobalRedecl4 = common dso_local global i32
|
||||
// MS: @GlobalRedecl4 = dso_local dllexport global i32
|
||||
// GNU: @GlobalRedecl4 = dso_local global i32
|
||||
__declspec(dllimport) extern int GlobalRedecl4;
|
||||
USEVAR(GlobalRedecl4)
|
||||
int GlobalRedecl4; // dllimport ignored
|
||||
|
@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -triple x86_64-windows-msvc -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple x86_64-windows-msvc -fcommon -emit-llvm -o - %s | FileCheck %s
|
||||
typedef float TooLargeAlignment __attribute__((__vector_size__(64)));
|
||||
typedef float NormalAlignment __attribute__((__vector_size__(4)));
|
||||
|
||||
|
@ -1,15 +1,16 @@
|
||||
// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-DEFAULT
|
||||
// RUN: %clang_cc1 %s -fno-common -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-NOCOMMON
|
||||
// RUN: %clang_cc1 %s -fno-common -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-DEFAULT
|
||||
// RUN: %clang_cc1 %s -fcommon -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-COMMON
|
||||
|
||||
// CHECK-DEFAULT: @x = common {{(dso_local )?}}global
|
||||
// CHECK-NOCOMMON: @x = {{(dso_local )?}}global
|
||||
// CHECK-COMMON: @x = common {{(dso_local )?}}global
|
||||
// CHECK-DEFAULT: @x = {{(dso_local )?}}global
|
||||
int x;
|
||||
|
||||
// CHECK-COMMON: @ABC = {{(dso_local )?}}global
|
||||
// CHECK-DEFAULT: @ABC = {{(dso_local )?}}global
|
||||
// CHECK-NOCOMMON: @ABC = {{(dso_local )?}}global
|
||||
typedef void* (*fn_t)(long a, long b, char *f, int c);
|
||||
fn_t ABC __attribute__ ((nocommon));
|
||||
|
||||
// CHECK-COMMON: @y = common {{(dso_local )?}}global
|
||||
// CHECK-DEFAULT: @y = common {{(dso_local )?}}global
|
||||
// CHECK-NOCOMMON: @y = common {{(dso_local )?}}global
|
||||
int y __attribute__((common));
|
||||
|
@ -4,8 +4,8 @@
|
||||
void (__attribute__((regparm(3), stdcall)) *pf) ();
|
||||
void (__attribute__((regparm(2), stdcall)) foo)(int a) {
|
||||
}
|
||||
// CHECK: @pf = common global void (...)* null
|
||||
// CHECK: @pf = global void (...)* null
|
||||
// CHECK: define void @foo(i32 %a)
|
||||
|
||||
// CHECK-OK: @pf = common global void (...)* null
|
||||
// CHECK-OK: @pf = global void (...)* null
|
||||
// CHECK-OK: define x86_stdcallcc void @foo(i32 inreg %a)
|
||||
|
@ -64,5 +64,5 @@ struct S4
|
||||
// CHECK: %struct.S4 = type { [3 x i8], %struct.T4, i32 }
|
||||
// CHECK: %struct.T4 = type <{ i8, i32 }>
|
||||
|
||||
// CHECK: @refs = common global [[struct_ref]]
|
||||
// CHECK: @ss = common global [[struct_S]]
|
||||
// CHECK: @refs = global [[struct_ref]]
|
||||
// CHECK: @ss = global [[struct_S]]
|
||||
|
@ -1,7 +1,7 @@
|
||||
// RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -emit-llvm %s -o - -verify | FileCheck %s
|
||||
|
||||
// CHECK: @weakvar = weak global
|
||||
// CHECK: @__weakvar_alias = common global
|
||||
// CHECK: @__weakvar_alias = global
|
||||
// CHECK: @correct_linkage = weak global
|
||||
|
||||
|
||||
|
@ -34,6 +34,6 @@ void foo() {
|
||||
// CHECK: @M = hidden global
|
||||
// CHECK: @O = hidden global
|
||||
// CHECK: @I = external hidden
|
||||
// CHECK: @N = common hidden global
|
||||
// CHECK: @N = hidden global
|
||||
// CHECK-NOT: @P
|
||||
|
||||
|
@ -1,16 +1,16 @@
|
||||
// RUN: %clang_cc1 -emit-llvm -w -o - %s | FileCheck %s
|
||||
|
||||
// CHECK-DAG: @r = common {{(dso_local )?}}global [1 x {{.*}}] zeroinitializer
|
||||
// CHECK-DAG: @r = {{(dso_local )?}}global [1 x {{.*}}] zeroinitializer
|
||||
|
||||
int r[];
|
||||
int (*a)[] = &r;
|
||||
|
||||
struct s0;
|
||||
struct s0 x;
|
||||
// CHECK-DAG: @x = common {{(dso_local )?}}global %struct.s0 zeroinitializer
|
||||
// CHECK-DAG: @x = {{(dso_local )?}}global %struct.s0 zeroinitializer
|
||||
|
||||
struct s0 y;
|
||||
// CHECK-DAG: @y = common {{(dso_local )?}}global %struct.s0 zeroinitializer
|
||||
// CHECK-DAG: @y = {{(dso_local )?}}global %struct.s0 zeroinitializer
|
||||
struct s0 *f0() {
|
||||
return &y;
|
||||
}
|
||||
@ -19,14 +19,14 @@ struct s0 {
|
||||
int x;
|
||||
};
|
||||
|
||||
// CHECK-DAG: @b = common {{(dso_local )?}}global [1 x {{.*}}] zeroinitializer
|
||||
// CHECK-DAG: @b = {{(dso_local )?}}global [1 x {{.*}}] zeroinitializer
|
||||
int b[];
|
||||
int *f1() {
|
||||
return b;
|
||||
}
|
||||
|
||||
// Check that the most recent tentative definition wins.
|
||||
// CHECK-DAG: @c = common {{(dso_local )?}}global [4 x {{.*}}] zeroinitializer
|
||||
// CHECK-DAG: @c = {{(dso_local )?}}global [4 x {{.*}}] zeroinitializer
|
||||
int c[];
|
||||
int c[4];
|
||||
|
||||
|
@ -21,24 +21,24 @@ int __thread __attribute__((tls_model("initial-exec"))) z;
|
||||
|
||||
// CHECK-GD: @z1 = global i32 0
|
||||
// CHECK-GD: @f.y = internal thread_local global i32 0
|
||||
// CHECK-GD: @z2 = common global i32 0
|
||||
// CHECK-GD: @z2 = global i32 0
|
||||
// CHECK-GD: @x = thread_local global i32 0
|
||||
// CHECK-GD: @z = thread_local(initialexec) global i32 0
|
||||
|
||||
// CHECK-LD: @z1 = global i32 0
|
||||
// CHECK-LD: @f.y = internal thread_local(localdynamic) global i32 0
|
||||
// CHECK-LD: @z2 = common global i32 0
|
||||
// CHECK-LD: @z2 = global i32 0
|
||||
// CHECK-LD: @x = thread_local(localdynamic) global i32 0
|
||||
// CHECK-LD: @z = thread_local(initialexec) global i32 0
|
||||
|
||||
// CHECK-IE: @z1 = global i32 0
|
||||
// CHECK-IE: @f.y = internal thread_local(initialexec) global i32 0
|
||||
// CHECK-IE: @z2 = common global i32 0
|
||||
// CHECK-IE: @z2 = global i32 0
|
||||
// CHECK-IE: @x = thread_local(initialexec) global i32 0
|
||||
// CHECK-IE: @z = thread_local(initialexec) global i32 0
|
||||
|
||||
// CHECK-LE: @z1 = global i32 0
|
||||
// CHECK-LE: @f.y = internal thread_local(localexec) global i32 0
|
||||
// CHECK-LE: @z2 = common global i32 0
|
||||
// CHECK-LE: @z2 = global i32 0
|
||||
// CHECK-LE: @x = thread_local(localexec) global i32 0
|
||||
// CHECK-LE: @z = thread_local(initialexec) global i32 0
|
||||
|
@ -3,15 +3,15 @@
|
||||
// RUN: %clang_cc1 %s -triple i386-unknown-unknown -fvisibility hidden -emit-llvm -o - | FileCheck %s -check-prefix=CHECK-HIDDEN
|
||||
|
||||
// CHECK-DEFAULT: @g_def = global i32 0
|
||||
// CHECK-DEFAULT: @g_com = common global i32 0
|
||||
// CHECK-DEFAULT: @g_com = global i32 0
|
||||
// CHECK-DEFAULT: @g_ext = external global i32
|
||||
// CHECK-DEFAULT: @g_deferred = internal global
|
||||
// CHECK-PROTECTED: @g_def = protected global i32 0
|
||||
// CHECK-PROTECTED: @g_com = common protected global i32 0
|
||||
// CHECK-PROTECTED: @g_com = protected global i32 0
|
||||
// CHECK-PROTECTED: @g_ext = external global i32
|
||||
// CHECK-PROTECTED: @g_deferred = internal global
|
||||
// CHECK-HIDDEN: @g_def = hidden global i32 0
|
||||
// CHECK-HIDDEN: @g_com = common hidden global i32 0
|
||||
// CHECK-HIDDEN: @g_com = hidden global i32 0
|
||||
// CHECK-HIDDEN: @g_ext = external global i32
|
||||
// CHECK-HIDDEN: @g_deferred = internal global
|
||||
int g_com;
|
||||
|
@ -1,7 +1,7 @@
|
||||
// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
|
||||
|
||||
int c[1][3*2];
|
||||
// CHECK: @{{.+}} = {{.*}} global [1 x [6 x {{i[0-9]+}}]] zeroinitializer
|
||||
// CHECK: @{{.+}} = global [1 x [6 x {{i[0-9]+}}]] zeroinitializer
|
||||
|
||||
// CHECK-LABEL: @f
|
||||
int f(int * const m, int (**v)[*m * 2])
|
||||
|
@ -1,10 +1,10 @@
|
||||
// RUN: %clang_cc1 -Wno-return-type -Wno-unused-value -emit-llvm %s -w -o - | FileCheck %s
|
||||
|
||||
// CHECK: @i = common {{(dso_local )?}}global [[INT:i[0-9]+]] 0
|
||||
// CHECK: @i = {{(dso_local )?}}global [[INT:i[0-9]+]] 0
|
||||
volatile int i, j, k;
|
||||
volatile int ar[5];
|
||||
volatile char c;
|
||||
// CHECK: @ci = common {{(dso_local )?}}global [[CINT:.*]] zeroinitializer
|
||||
// CHECK: @ci = {{(dso_local )?}}global [[CINT:.*]] zeroinitializer
|
||||
volatile _Complex int ci;
|
||||
volatile struct S {
|
||||
#ifdef __cplusplus
|
||||
|
@ -1,3 +0,0 @@
|
||||
// RUN: %clang_cc1 -emit-llvm < %s | grep common
|
||||
|
||||
int i;
|
@ -17,7 +17,7 @@ void call_imported_function() {
|
||||
}
|
||||
|
||||
// CHECK: @import_int = external dllimport global i32
|
||||
// CHECK: @export_int = common dso_local dllexport global i32 0, align 4
|
||||
// CHECK: @export_int = dso_local dllexport global i32 0, align 4
|
||||
|
||||
// CHECK: define dso_local dllexport arm_aapcs_vfpcc void @export_implemented_function()
|
||||
|
||||
|
@ -30,7 +30,7 @@ const int cy; // .rodata.2
|
||||
|
||||
// CHECK: @x = global i32 0, align 4 #0
|
||||
// CHECK: @y = global i32 0, align 4 #1
|
||||
// CHECK: @z = common global i32 0, align 4
|
||||
// CHECK: @z = global i32 0, align 4
|
||||
// CHECK: @cx = constant i32 0, align 4 #2
|
||||
// CHECK: @cy = constant i32 0, align 4 #3
|
||||
// CHECK: @cz = constant i32 0, align 4 #1
|
||||
|
@ -30,6 +30,6 @@ int main () {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// CHECK-FRAGILE: @_FooClassReference = common global
|
||||
// CHECK-FRAGILE: @_FooClassReference = global
|
||||
// CHECK-NONFRAGILE: @"OBJC_CLASS_$_Object" = external global
|
||||
// CHECK-NONFRAGILE: "OBJC_CLASS_$_Foo" = global
|
||||
|
@ -31,7 +31,7 @@ static inline void _inlineFunction() {
|
||||
}
|
||||
@end
|
||||
|
||||
// CHECK: @__CFConstantStringClassReference = common global [24 x i32] zeroinitializer, align 16
|
||||
// CHECK: @__CFConstantStringClassReference = global [24 x i32] zeroinitializer, align 16
|
||||
// CHECK: @_unnamed_cfstring_{{.*}} = private global %struct.__NSConstantString_tag { i32* getelementptr inbounds ([24 x i32], [24 x i32]* @__CFConstantStringClassReference, i32 0, i32 0)
|
||||
|
||||
// CHECK-LABEL: define internal void @_inlineFunction()
|
||||
|
@ -53,10 +53,10 @@ void fc(constant int *arg) {}
|
||||
|
||||
#ifdef CL20
|
||||
int i;
|
||||
// CL20-DAG: @i = common {{(dso_local )?}}addrspace(1) global i32 0
|
||||
// CL20-DAG: @i = {{(dso_local )?}}addrspace(1) global i32 0
|
||||
int *ptr;
|
||||
// CL20SPIR-DAG: @ptr = {{(common )?}}{{(dso_local )?}}addrspace(1) global i32 addrspace(4)* null
|
||||
// CL20AMDGCN-DAG: @ptr = common {{(dso_local )?}}addrspace(1) global i32* null
|
||||
// CL20AMDGCN-DAG: @ptr = {{(dso_local )?}}addrspace(1) global i32* null
|
||||
#endif
|
||||
|
||||
// SPIR: i32* %arg
|
||||
|
@ -1,11 +1,11 @@
|
||||
// REQUIRES: amdgpu-registered-target
|
||||
// RUN: %clang_cc1 -cl-std=CL2.0 -triple amdgcn-unknown-unknown -S -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
// CHECK: @One = common local_unnamed_addr addrspace(1) global [6442450944 x i8] zeroinitializer, align 1
|
||||
// CHECK: @One = local_unnamed_addr addrspace(1) global [6442450944 x i8] zeroinitializer, align 1
|
||||
unsigned char One[6442450944];
|
||||
// CHECK: @Two = common local_unnamed_addr addrspace(1) global [6442450944 x i32] zeroinitializer, align 4
|
||||
// CHECK: @Two = local_unnamed_addr addrspace(1) global [6442450944 x i32] zeroinitializer, align 4
|
||||
global unsigned int Two[6442450944];
|
||||
|
||||
|
||||
kernel void large_globals(unsigned int id) {
|
||||
One[id] = id;
|
||||
Two[id + 1] = id + 1;
|
||||
|
@ -1,6 +1,7 @@
|
||||
// RUN: %clang_cc1 %s -cl-std=CL2.0 -include opencl-c.h -triple amdgcn -emit-llvm -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 %s -O0 -cl-std=CL2.0 -include opencl-c.h -triple amdgcn -emit-llvm -o - | FileCheck --check-prefix=NOOPT %s
|
||||
// RUN: %clang_cc1 %s -cl-std=CL2.0 -include opencl-c.h -triple amdgcn---opencl -emit-llvm -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 %s -cl-std=CL2.0 -include opencl-c.h -triple amdgcn -fcommon -emit-llvm -o - | FileCheck %s --check-prefix=COMMON
|
||||
|
||||
typedef struct {
|
||||
private char *p1;
|
||||
@ -16,9 +17,6 @@ typedef struct {
|
||||
generic char *p5;
|
||||
} StructTy2;
|
||||
|
||||
// LLVM requests global variable with common linkage to be initialized with zeroinitializer, therefore use -fno-common
|
||||
// to suppress common linkage for tentative definition.
|
||||
|
||||
// Test 0 as initializer.
|
||||
|
||||
// CHECK: @private_p = local_unnamed_addr addrspace(1) global i8 addrspace(5)* null, align 4
|
||||
@ -183,34 +181,39 @@ void test_func_scope_var_local(void) {
|
||||
// cannot have common linkage since common linkage requires zero initialization
|
||||
// and does not have explicit section.
|
||||
|
||||
// CHECK: @p1 = common local_unnamed_addr addrspace(1) global i8 addrspace(5)* null, align 4
|
||||
// CHECK: @p1 = local_unnamed_addr addrspace(1) global i8 addrspace(5)* null, align 4
|
||||
// COMMON: @p1 = common local_unnamed_addr addrspace(1) global i8 addrspace(5)* null, align 4
|
||||
private char *p1;
|
||||
|
||||
// CHECK: @p2 = weak local_unnamed_addr addrspace(1) global i8 addrspace(3)* addrspacecast (i8* null to i8 addrspace(3)*), align 4
|
||||
// CHECK: @p2 = local_unnamed_addr addrspace(1) global i8 addrspace(3)* addrspacecast (i8* null to i8 addrspace(3)*), align 4
|
||||
// COMMON: @p2 = weak local_unnamed_addr addrspace(1) global i8 addrspace(3)* addrspacecast (i8* null to i8 addrspace(3)*), align 4
|
||||
local char *p2;
|
||||
|
||||
// CHECK: @p3 = common local_unnamed_addr addrspace(1) global i8 addrspace(4)* null, align 8
|
||||
// CHECK: @p3 = local_unnamed_addr addrspace(1) global i8 addrspace(4)* null, align 8
|
||||
// COMMON: @p3 = common local_unnamed_addr addrspace(1) global i8 addrspace(4)* null, align 8
|
||||
constant char *p3;
|
||||
|
||||
// CHECK: @p4 = common local_unnamed_addr addrspace(1) global i8 addrspace(1)* null, align 8
|
||||
// CHECK: @p4 = local_unnamed_addr addrspace(1) global i8 addrspace(1)* null, align 8
|
||||
// COMMON: @p4 = common local_unnamed_addr addrspace(1) global i8 addrspace(1)* null, align 8
|
||||
global char *p4;
|
||||
|
||||
// CHECK: @p5 = common local_unnamed_addr addrspace(1) global i8* null, align 8
|
||||
// CHECK: @p5 = local_unnamed_addr addrspace(1) global i8* null, align 8
|
||||
// COMMON: @p5 = common local_unnamed_addr addrspace(1) global i8* null, align 8
|
||||
generic char *p5;
|
||||
|
||||
// Test default initialization of structure.
|
||||
|
||||
// CHECK: @S1 = weak local_unnamed_addr addrspace(1) global %struct.StructTy1 { i8 addrspace(5)* null, i8 addrspace(3)* addrspacecast (i8* null to i8 addrspace(3)*), i8 addrspace(4)* null, i8 addrspace(1)* null, i8* null }, align 8
|
||||
// CHECK: @S1 = local_unnamed_addr addrspace(1) global %struct.StructTy1 { i8 addrspace(5)* null, i8 addrspace(3)* addrspacecast (i8* null to i8 addrspace(3)*), i8 addrspace(4)* null, i8 addrspace(1)* null, i8* null }, align 8
|
||||
StructTy1 S1;
|
||||
|
||||
// CHECK: @S2 = common local_unnamed_addr addrspace(1) global %struct.StructTy2 zeroinitializer, align 8
|
||||
// CHECK: @S2 = local_unnamed_addr addrspace(1) global %struct.StructTy2 zeroinitializer, align 8
|
||||
StructTy2 S2;
|
||||
|
||||
// Test default initialization of array.
|
||||
// CHECK: @A1 = weak local_unnamed_addr addrspace(1) global [2 x %struct.StructTy1] [%struct.StructTy1 { i8 addrspace(5)* null, i8 addrspace(3)* addrspacecast (i8* null to i8 addrspace(3)*), i8 addrspace(4)* null, i8 addrspace(1)* null, i8* null }, %struct.StructTy1 { i8 addrspace(5)* null, i8 addrspace(3)* addrspacecast (i8* null to i8 addrspace(3)*), i8 addrspace(4)* null, i8 addrspace(1)* null, i8* null }], align 8
|
||||
// CHECK: @A1 = local_unnamed_addr addrspace(1) global [2 x %struct.StructTy1] [%struct.StructTy1 { i8 addrspace(5)* null, i8 addrspace(3)* addrspacecast (i8* null to i8 addrspace(3)*), i8 addrspace(4)* null, i8 addrspace(1)* null, i8* null }, %struct.StructTy1 { i8 addrspace(5)* null, i8 addrspace(3)* addrspacecast (i8* null to i8 addrspace(3)*), i8 addrspace(4)* null, i8 addrspace(1)* null, i8* null }], align 8
|
||||
StructTy1 A1[2];
|
||||
|
||||
// CHECK: @A2 = common local_unnamed_addr addrspace(1) global [2 x %struct.StructTy2] zeroinitializer, align 8
|
||||
// CHECK: @A2 = local_unnamed_addr addrspace(1) global [2 x %struct.StructTy2] zeroinitializer, align 8
|
||||
StructTy2 A2[2];
|
||||
|
||||
// Test comparison with 0.
|
||||
|
@ -4,7 +4,7 @@
|
||||
// CHECK-X86: "-disable-red-zone"
|
||||
// CHECK-X86: "-fno-builtin"
|
||||
// CHECK-X86: "-fno-rtti"
|
||||
// CHECK-X86: "-fno-common"
|
||||
// CHECK-X86-NOT: "-fcommon"
|
||||
|
||||
// RUN: %clang -target x86_64-apple-darwin10 -mkernel -### -fsyntax-only -fbuiltin -fcommon %s 2>&1 | FileCheck --check-prefix=CHECK-X86-2 %s
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
// CHECK-ARM-NOT: "-target-feature" "+strict-align"
|
||||
// CHECK-ARM: "-fno-builtin"
|
||||
// CHECK-ARM: "-fno-rtti"
|
||||
// CHECK-ARM: "-fno-common"
|
||||
// CHECK-ARM-NOT: "-fcommon"
|
||||
|
||||
// RUN: %clang -target x86_64-apple-darwin10 \
|
||||
// RUN: -Werror -fno-builtin -fno-exceptions -fno-common -fno-rtti \
|
||||
|
@ -12,7 +12,7 @@
|
||||
// CHECK-OPTIONS2: -fno-gnu-keywords
|
||||
// CHECK-OPTIONS2: -fno-builtin
|
||||
// CHECK-OPTIONS2: -fshort-enums
|
||||
// CHECK-OPTIONS2: -fno-common
|
||||
// CHECK-OPTIONS2-NOT: -fcommon
|
||||
// CHECK-OPTIONS2: -fno-show-source-location
|
||||
|
||||
// RUN: %clang -### -S -Wwrite-strings %s 2>&1 | FileCheck -check-prefix=WRITE-STRINGS1 %s
|
||||
|
@ -22,7 +22,7 @@
|
||||
// CHECK-AARCH64: "-fsanitize=shadow-call-stack"
|
||||
// CHECK-X86_64: "-fsanitize=safe-stack"
|
||||
// CHECK: "-stack-protector" "2"
|
||||
// CHECK: "-fno-common"
|
||||
// CHECK-NOT: "-fcommon"
|
||||
// CHECK: {{.*}}ld.lld{{.*}}" "-z" "now" "-z" "rodynamic" "-z" "separate-loadable-segments"
|
||||
// CHECK: "--sysroot=[[SYSROOT]]"
|
||||
// CHECK: "-pie"
|
||||
|
9
clang/test/Driver/no-common.c
Normal file
9
clang/test/Driver/no-common.c
Normal file
@ -0,0 +1,9 @@
|
||||
// RUN: %clang -target %itanium_abi_triple -### -c %s 2>&1 | \
|
||||
// RUN: FileCheck %s --check-prefix=DEFAULT
|
||||
// RUN: %clang -target %itanium_abi_triple -fno-common -### -c %s 2>&1 | \
|
||||
// RUN: FileCheck %s --check-prefix=DEFAULT
|
||||
// RUN: %clang -target %itanium_abi_triple -fno-common -fcommon -### -c %s 2>&1 | \
|
||||
// RUN: FileCheck %s --check-prefix=COMMON
|
||||
|
||||
// DEFAULT-NOT: "-fcommon"
|
||||
// COMMON: "-fcommon"
|
@ -9,7 +9,7 @@
|
||||
// CHECK: "-fno-use-cxa-atexit"
|
||||
// CHECK-NOT: "-fcxx-exceptions"
|
||||
// CHECK-NOT: "-fexceptions"
|
||||
// CHECK: "-fno-common"
|
||||
// CHECK-NOT: "-fcommon"
|
||||
// CHECK: xcc" "-o"
|
||||
// CHECK-NOT: "-fexceptions"
|
||||
// CHECK: "-c" "-v" "-g" "-fverbose-asm" "A1Arg" "A2Arg"
|
||||
@ -21,7 +21,7 @@
|
||||
// CHECK-EXCEP: "-fno-use-cxa-atexit"
|
||||
// CHECK-EXCEP: "-fcxx-exceptions"
|
||||
// CHECK-EXCEP: "-fexceptions"
|
||||
// CHECK-EXCEP: "-fno-common"
|
||||
// CHECK-EXCEP-NOT: "-fcommon"
|
||||
// CHECK-EXCEP: xcc" "-o"
|
||||
// CHECK-EXCEP-NOT: "-fexceptions"
|
||||
// CHECK-EXCEP: xcc" "-o"
|
||||
|
@ -5,7 +5,7 @@
|
||||
// CHECK: module asm "foo"
|
||||
__asm__("foo");
|
||||
|
||||
// CHECK: @g0 = common dso_local global i32 0, align 4
|
||||
// CHECK: @g0 = dso_local global i32 0, align 4
|
||||
int g0;
|
||||
|
||||
// CHECK: define dso_local i32 @f0()
|
||||
|
@ -7,7 +7,7 @@
|
||||
// REQUIRES: x86-registered-target
|
||||
#include <xmmintrin.h>
|
||||
|
||||
// CHECK: @c = common global i8 0, align 16
|
||||
// CHECK: @c = global i8 0, align 16
|
||||
_MM_ALIGN16 char c;
|
||||
|
||||
// Make sure the last step of _mm_cvtps_pi16 converts <4 x i32> to <4 x i16> by
|
||||
|
@ -16,11 +16,11 @@
|
||||
|
||||
// Z-NOT: @z
|
||||
|
||||
// XA: @x = common global i32 0
|
||||
// XA-NOT: @x = common global i32 0
|
||||
// XA: @x = global i32 0
|
||||
// XA-NOT: @x = global i32 0
|
||||
|
||||
// YA: @y = common global i32 0
|
||||
// YA-NOT: @y = common global i32 0
|
||||
// YA: @y = global i32 0
|
||||
// YA-NOT: @y = global i32 0
|
||||
|
||||
// XB: @x2 = global i32 19
|
||||
// XB-NOT: @x2 = global i32 19
|
||||
@ -29,17 +29,17 @@ int x2 = 19;
|
||||
// YB-NOT: @y2 = global i32 18
|
||||
int y2 = 18;
|
||||
|
||||
// AA: @incomplete_array = common global [1 x i32]
|
||||
// AA-NOT: @incomplete_array = common global [1 x i32]
|
||||
// AB: @incomplete_array2 = common global [17 x i32]
|
||||
// AB-NOT: @incomplete_array2 = common global [17 x i32]
|
||||
// AA: @incomplete_array = global [1 x i32]
|
||||
// AA-NOT: @incomplete_array = global [1 x i32]
|
||||
// AB: @incomplete_array2 = global [17 x i32]
|
||||
// AB-NOT: @incomplete_array2 = global [17 x i32]
|
||||
int incomplete_array2[17];
|
||||
// AC: @incomplete_array3 = common global [1 x i32]
|
||||
// AC-NOT: @incomplete_array3 = common global [1 x i32]
|
||||
// AC: @incomplete_array3 = global [1 x i32]
|
||||
// AC-NOT: @incomplete_array3 = global [1 x i32]
|
||||
int incomplete_array3[];
|
||||
|
||||
// S: @s = common global %struct.S
|
||||
// S-NOT: @s = common global %struct.S
|
||||
// S: @s = global %struct.S
|
||||
// S-NOT: @s = global %struct.S
|
||||
struct S {
|
||||
int x, y;
|
||||
};
|
||||
|
@ -3,16 +3,16 @@
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-pch -o %t.pch %S/external-defs.h
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -include-pch %t.pch -emit-llvm -o %t %s
|
||||
|
||||
// RUN: grep "@x = common global i32 0" %t | count 1
|
||||
// RUN: grep "@x = global i32 0" %t | count 1
|
||||
// RUN: not grep "@z" %t
|
||||
|
||||
// RUN: grep "@x2 = global i32 19" %t | count 1
|
||||
int x2 = 19;
|
||||
|
||||
// RUN: grep "@incomplete_array = common global .*1 x i32" %t | count 1
|
||||
// RUN: grep "@incomplete_array2 = common global .*17 x i32" %t | count 1
|
||||
// RUN: grep "@incomplete_array = global .*1 x i32" %t | count 1
|
||||
// RUN: grep "@incomplete_array2 = global .*17 x i32" %t | count 1
|
||||
int incomplete_array2[17];
|
||||
// RUN: grep "@incomplete_array3 = common global .*1 x i32" %t | count 1
|
||||
// RUN: grep "@incomplete_array3 = global .*1 x i32" %t | count 1
|
||||
int incomplete_array3[];
|
||||
|
||||
struct S {
|
||||
|
@ -1,6 +1,6 @@
|
||||
// Test with pch.
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -emit-pch -o %t.pch %S/tentative-defs.h
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -include-pch %t.pch -verify -emit-llvm -o %t %s
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -fcommon -emit-pch -o %t.pch %S/tentative-defs.h
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -fcommon -include-pch %t.pch -verify -emit-llvm -o %t %s
|
||||
// REQUIRES: x86-registered-target
|
||||
|
||||
// RUN: grep "@variable = common global i32 0" %t | count 1
|
||||
|
@ -6,14 +6,14 @@
|
||||
#pragma GCC visibility push(hidden)
|
||||
|
||||
int v1;
|
||||
// CHECK: @v1 = common hidden global i32 0, align 4
|
||||
// CHECK: @v1 = hidden global i32 0, align 4
|
||||
|
||||
#pragma GCC visibility pop
|
||||
|
||||
int v2;
|
||||
// CHECK: @v2 = common global i32 0, align 4
|
||||
// CHECK: @v2 = global i32 0, align 4
|
||||
|
||||
_Pragma("GCC visibility push(hidden)");
|
||||
|
||||
int v3;
|
||||
// CHECK: @v3 = common hidden global i32 0, align 4
|
||||
// CHECK: @v3 = hidden global i32 0, align 4
|
||||
|
@ -1,9 +1,9 @@
|
||||
// Test that we can properly report an ODR violation
|
||||
// between an instrumented global and a non-instrumented global.
|
||||
|
||||
// RUN: %clang_asan %s -fPIC -shared -o %dynamiclib1 -DFILE1
|
||||
// RUN: %clang_asan %s -fPIC -shared -o %dynamiclib2 -DFILE2
|
||||
// RUN: %clang_asan %s -fPIE %ld_flags_rpath_exe1 %ld_flags_rpath_exe2 -o %t
|
||||
// RUN: %clang_asan -fcommon %s -fPIC -shared -o %dynamiclib1 -DFILE1
|
||||
// RUN: %clang_asan -fcommon %s -fPIC -shared -o %dynamiclib2 -DFILE2
|
||||
// RUN: %clang_asan -fcommon %s -fPIE %ld_flags_rpath_exe1 %ld_flags_rpath_exe2 -o %t
|
||||
// RUN: not %run %t 2>&1 | FileCheck %s
|
||||
//
|
||||
// CHECK: The following global variable is not properly aligned.
|
||||
|
@ -21,13 +21,13 @@ void __asan_set_shadow_f3(size_t addr, size_t size);
|
||||
void __asan_set_shadow_f5(size_t addr, size_t size);
|
||||
void __asan_set_shadow_f8(size_t addr, size_t size);
|
||||
|
||||
char a __attribute__((aligned(8)));
|
||||
char* a;
|
||||
|
||||
void f(long arg) {
|
||||
size_t shadow_offset;
|
||||
size_t shadow_scale;
|
||||
__asan_get_shadow_mapping(&shadow_scale, &shadow_offset);
|
||||
size_t addr = (((size_t)&a) >> shadow_scale) + shadow_offset;
|
||||
size_t addr = (((size_t)a) >> shadow_scale) + shadow_offset;
|
||||
|
||||
switch (arg) {
|
||||
// X00-NOT: AddressSanitizer
|
||||
@ -61,9 +61,10 @@ void f(long arg) {
|
||||
int main(int argc, char **argv) {
|
||||
assert(argc > 1);
|
||||
|
||||
a = malloc(8);
|
||||
long arg = strtol(argv[1], 0, 16);
|
||||
f(arg);
|
||||
a = 1;
|
||||
*a = 1;
|
||||
printf("PASS\n");
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user