[compiler-rt] 3d9a044 - Recommit #2 "[Driver] Default to -fno-common for all targets"

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 9 14:29:49 PDT 2020


Done
https://github.com/google/fuzzer-test-suite/blob/master/libssh-2017-1272/build.sh

On Mon, 9 Mar 2020 at 13:57, Sjoerd Meijer <Sjoerd.Meijer at arm.com> wrote:

> With this change this bot starting failing:
> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fuzzer
>
> with this error trying to build libssh:
>
> /usr/bin/ld: error: CMakeFiles/ssh_shared.dir/external/ge25519.c.o:
> multiple definition of 'crypto_sign_ed25519_ref_ge25519_base'
> /usr/bin/ld: CMakeFiles/ssh_shared.dir/external/ed25519.c.o: previous
> definition here
>
> This is the usual error when apps need porting changing from -fcommon to
> -fno-common.
>
> @Vitaly Buka: as buildbot maintainer, can you please add -fcommon to the
> CFLAGS for libssh?
>
> Thanks,
> Sjoerd.
>
>
>
> ------------------------------
> *From:* llvm-commits <llvm-commits-bounces at lists.llvm.org> on behalf of
> Sjoerd Meijer via llvm-commits <llvm-commits at lists.llvm.org>
> *Sent:* 09 March 2020 19:57
> *To:* llvm-commits at lists.llvm.org <llvm-commits at lists.llvm.org>
> *Subject:* [compiler-rt] 3d9a044 - Recommit #2 "[Driver] Default to
> -fno-common for all targets"
>
>
> Author: Sjoerd Meijer
> Date: 2020-03-09T19:57:03Z
> New Revision: 3d9a0445cce368b55dc3a573bc91fe902bbb977f
>
> URL:
> https://github.com/llvm/llvm-project/commit/3d9a0445cce368b55dc3a573bc91fe902bbb977f
> DIFF:
> https://github.com/llvm/llvm-project/commit/3d9a0445cce368b55dc3a573bc91fe902bbb977f.diff
>
> LOG: 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
>
> Added:
>     clang/test/Driver/no-common.c
>
> Modified:
>     clang/docs/ClangCommandLineReference.rst
>     clang/docs/ReleaseNotes.rst
>     clang/include/clang/Driver/Options.td
>     clang/lib/Driver/ToolChains/Clang.cpp
>     clang/lib/Frontend/CompilerInvocation.cpp
>     clang/test/CodeGen/2008-07-21-mixed-var-fn-decl.c
>     clang/test/CodeGen/2009-10-20-GlobalDebug.c
>     clang/test/CodeGen/aarch64-sve.c
>     clang/test/CodeGen/address-space.c
>     clang/test/CodeGen/alias.c
>     clang/test/CodeGen/align-systemz.c
>     clang/test/CodeGen/alignment.c
>     clang/test/CodeGen/asm-label.c
>     clang/test/CodeGen/attr-weak-import.c
>     clang/test/CodeGen/attr-weakref2.c
>     clang/test/CodeGen/attributes.c
>     clang/test/CodeGen/blocks-windows.c
>     clang/test/CodeGen/bool-convert.c
>     clang/test/CodeGen/c11atomics.c
>     clang/test/CodeGen/cfstring-elf-cfbuild-x86_64.c
>     clang/test/CodeGen/cfstring-windows.c
>     clang/test/CodeGen/default-address-space.c
>     clang/test/CodeGen/dllexport-1.c
>     clang/test/CodeGen/dllexport.c
>     clang/test/CodeGen/dllimport.c
>     clang/test/CodeGen/microsoft-no-common-align.c
>     clang/test/CodeGen/no-common.c
>     clang/test/CodeGen/pr25786.c
>     clang/test/CodeGen/pragma-pack-1.c
>     clang/test/CodeGen/pragma-weak.c
>     clang/test/CodeGen/private-extern-redef.c
>     clang/test/CodeGen/tentative-decls.c
>     clang/test/CodeGen/tls-model.c
>     clang/test/CodeGen/visibility.c
>     clang/test/CodeGen/vlt_to_pointer.c
>     clang/test/CodeGen/volatile-1.c
>     clang/test/CodeGen/windows-on-arm-dllimport-dllexport.c
>     clang/test/CodeGenCXX/clang-sections-tentative.c
>     clang/test/CodeGenObjC/constant-string-class.m
>     clang/test/CodeGenObjC/tentative-cfconstantstring.m
>     clang/test/CodeGenOpenCL/address-spaces.cl
>     clang/test/CodeGenOpenCL/amdgcn-large-globals.cl
>     clang/test/CodeGenOpenCL/amdgpu-nullptr.cl
>     clang/test/Driver/apple-kext-mkernel.c
>     clang/test/Driver/clang_f_opts.c
>     clang/test/Driver/fuchsia.c
>     clang/test/Driver/xcore-opts.c
>     clang/test/Frontend/ast-codegen.c
>     clang/test/Headers/xmmintrin.c
>     clang/test/PCH/chain-external-defs.c
>     clang/test/PCH/external-defs.c
>     clang/test/PCH/tentative-defs.c
>     clang/test/Parser/pragma-visibility2.c
>     compiler-rt/test/asan/TestCases/Linux/odr_c_test.c
>     compiler-rt/test/asan/TestCases/set_shadow_test.c
>
> Removed:
>     clang/test/CodeGen/weak-global.c
>
>
>
> ################################################################################
> diff  --git a/clang/docs/ClangCommandLineReference.rst
> b/clang/docs/ClangCommandLineReference.rst
> index 609e7fa66c00..5af9d64ae0fc 100644
> --- a/clang/docs/ClangCommandLineReference.rst
> +++ b/clang/docs/ClangCommandLineReference.rst
> @@ -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
>
> diff  --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
> index ce121ebe6055..664ae4e4167c 100644
> --- a/clang/docs/ReleaseNotes.rst
> +++ b/clang/docs/ReleaseNotes.rst
> @@ -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
>  --------------------
>
> diff  --git a/clang/include/clang/Driver/Options.td
> b/clang/include/clang/Driver/Options.td
> index 0d5cba8d682a..bdcd771ff713 100644
> --- a/clang/include/clang/Driver/Options.td
> +++ b/clang/include/clang/Driver/Options.td
> @@ -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]>,
>
> diff  --git a/clang/lib/Driver/ToolChains/Clang.cpp
> b/clang/lib/Driver/ToolChains/Clang.cpp
> index 99faae396be3..5b85a5197f58 100644
> --- a/clang/lib/Driver/ToolChains/Clang.cpp
> +++ b/clang/lib/Driver/ToolChains/Clang.cpp
> @@ -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.
>
> diff  --git a/clang/lib/Frontend/CompilerInvocation.cpp
> b/clang/lib/Frontend/CompilerInvocation.cpp
> index cd8776e7976f..08a0b9831e0c 100644
> --- a/clang/lib/Frontend/CompilerInvocation.cpp
> +++ b/clang/lib/Frontend/CompilerInvocation.cpp
> @@ -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);
>
> diff  --git a/clang/test/CodeGen/2008-07-21-mixed-var-fn-decl.c
> b/clang/test/CodeGen/2008-07-21-mixed-var-fn-decl.c
> index 3c9591e2945e..89ec60282f88 100644
> --- a/clang/test/CodeGen/2008-07-21-mixed-var-fn-decl.c
> +++ b/clang/test/CodeGen/2008-07-21-mixed-var-fn-decl.c
> @@ -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
>
>
> diff  --git a/clang/test/CodeGen/2009-10-20-GlobalDebug.c
> b/clang/test/CodeGen/2009-10-20-GlobalDebug.c
> index c8c247f6b041..14b832013630 100644
> --- a/clang/test/CodeGen/2009-10-20-GlobalDebug.c
> +++ b/clang/test/CodeGen/2009-10-20-GlobalDebug.c
> @@ -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;
>  }
>
> diff  --git a/clang/test/CodeGen/aarch64-sve.c
> b/clang/test/CodeGen/aarch64-sve.c
> index bb4512d5ed93..790b3a176182 100644
> --- a/clang/test/CodeGen/aarch64-sve.c
> +++ b/clang/test/CodeGen/aarch64-sve.c
> @@ -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
>
> diff  --git a/clang/test/CodeGen/address-space.c
> b/clang/test/CodeGen/address-space.c
> index a76d2e743e6e..c66dfc87c0c0 100644
> --- a/clang/test/CodeGen/address-space.c
> +++ b/clang/test/CodeGen/address-space.c
> @@ -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()
>
> diff  --git a/clang/test/CodeGen/alias.c b/clang/test/CodeGen/alias.c
> index f5bdf3c0587e..21483cfb950b 100644
> --- a/clang/test/CodeGen/alias.c
> +++ b/clang/test/CodeGen/alias.c
> @@ -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
>
> diff  --git a/clang/test/CodeGen/align-systemz.c
> b/clang/test/CodeGen/align-systemz.c
> index eaa1de64d344..9a6c22238327 100644
> --- a/clang/test/CodeGen/align-systemz.c
> +++ b/clang/test/CodeGen/align-systemz.c
> @@ -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
>
> diff  --git a/clang/test/CodeGen/alignment.c
> b/clang/test/CodeGen/alignment.c
> index c9f58136e38a..ce0c58bee4bb 100644
> --- a/clang/test/CodeGen/alignment.c
> +++ b/clang/test/CodeGen/alignment.c
> @@ -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)));
>
> diff  --git a/clang/test/CodeGen/asm-label.c
> b/clang/test/CodeGen/asm-label.c
> index c06f11fd2d24..7c7383fa41fc 100644
> --- a/clang/test/CodeGen/asm-label.c
> +++ b/clang/test/CodeGen/asm-label.c
> @@ -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)
>
> diff  --git a/clang/test/CodeGen/attr-weak-import.c
> b/clang/test/CodeGen/attr-weak-import.c
> index 0707f59a608b..f02d09e81509 100644
> --- a/clang/test/CodeGen/attr-weak-import.c
> +++ b/clang/test/CodeGen/attr-weak-import.c
> @@ -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
>
>
> diff  --git a/clang/test/CodeGen/attr-weakref2.c
> b/clang/test/CodeGen/attr-weakref2.c
> index 99760635581d..114f048a8518 100644
> --- a/clang/test/CodeGen/attr-weakref2.c
> +++ b/clang/test/CodeGen/attr-weakref2.c
> @@ -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) {
>
> diff  --git a/clang/test/CodeGen/attributes.c
> b/clang/test/CodeGen/attributes.c
> index 4be38b6367dc..f6323e9be548 100644
> --- a/clang/test/CodeGen/attributes.c
> +++ b/clang/test/CodeGen/attributes.c
> @@ -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"
>
> diff  --git a/clang/test/CodeGen/blocks-windows.c
> b/clang/test/CodeGen/blocks-windows.c
> index 2dd97ffdd2f3..44e5f66525b2 100644
> --- a/clang/test/CodeGen/blocks-windows.c
> +++ b/clang/test/CodeGen/blocks-windows.c
> @@ -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*
>
> diff  --git a/clang/test/CodeGen/bool-convert.c
> b/clang/test/CodeGen/bool-convert.c
> index 344fb6bb994a..745971446e61 100644
> --- a/clang/test/CodeGen/bool-convert.c
> +++ b/clang/test/CodeGen/bool-convert.c
> @@ -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)
>
> diff  --git a/clang/test/CodeGen/c11atomics.c
> b/clang/test/CodeGen/c11atomics.c
> index cf251738be55..0a32ebcc724e 100644
> --- a/clang/test/CodeGen/c11atomics.c
> +++ b/clang/test/CodeGen/c11atomics.c
> @@ -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 }
>
> diff  --git a/clang/test/CodeGen/cfstring-elf-cfbuild-x86_64.c
> b/clang/test/CodeGen/cfstring-elf-cfbuild-x86_64.c
> index 8b90d7c0c1d8..e330624ead96 100644
> --- a/clang/test/CodeGen/cfstring-elf-cfbuild-x86_64.c
> +++ b/clang/test/CodeGen/cfstring-elf-cfbuild-x86_64.c
> @@ -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
>
> diff  --git a/clang/test/CodeGen/cfstring-windows.c
> b/clang/test/CodeGen/cfstring-windows.c
> index fe7511eae141..7c17f31d3dd4 100644
> --- a/clang/test/CodeGen/cfstring-windows.c
> +++ b/clang/test/CodeGen/cfstring-windows.c
> @@ -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]
>
> diff  --git a/clang/test/CodeGen/default-address-space.c
> b/clang/test/CodeGen/default-address-space.c
> index 5450609e06bb..21ba2b3269c2 100644
> --- a/clang/test/CodeGen/default-address-space.c
> +++ b/clang/test/CodeGen/default-address-space.c
> @@ -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;
>
>
> diff  --git a/clang/test/CodeGen/dllexport-1.c
> b/clang/test/CodeGen/dllexport-1.c
> index 5860591c83c7..b24324b0a96e 100644
> --- a/clang/test/CodeGen/dllexport-1.c
> +++ b/clang/test/CodeGen/dllexport-1.c
> @@ -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;
>
> diff  --git a/clang/test/CodeGen/dllexport.c
> b/clang/test/CodeGen/dllexport.c
> index f27012ec2355..4c1143cf5ca4 100644
> --- a/clang/test/CodeGen/dllexport.c
> +++ b/clang/test/CodeGen/dllexport.c
> @@ -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;
>
>
> diff  --git a/clang/test/CodeGen/dllimport.c
> b/clang/test/CodeGen/dllimport.c
> index 319770232a28..8a67716fd9cf 100644
> --- a/clang/test/CodeGen/dllimport.c
> +++ b/clang/test/CodeGen/dllimport.c
> @@ -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
>
> diff  --git a/clang/test/CodeGen/microsoft-no-common-align.c
> b/clang/test/CodeGen/microsoft-no-common-align.c
> index a7a27a062704..7b7d91037fe4 100644
> --- a/clang/test/CodeGen/microsoft-no-common-align.c
> +++ b/clang/test/CodeGen/microsoft-no-common-align.c
> @@ -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)));
>
>
> diff  --git a/clang/test/CodeGen/no-common.c
> b/clang/test/CodeGen/no-common.c
> index f3a6a334e6f5..11de0f23396e 100644
> --- a/clang/test/CodeGen/no-common.c
> +++ b/clang/test/CodeGen/no-common.c
> @@ -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));
>
> diff  --git a/clang/test/CodeGen/pr25786.c b/clang/test/CodeGen/pr25786.c
> index 612da7e8a369..d24ab1ba41eb 100644
> --- a/clang/test/CodeGen/pr25786.c
> +++ b/clang/test/CodeGen/pr25786.c
> @@ -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)
>
> diff  --git a/clang/test/CodeGen/pragma-pack-1.c
> b/clang/test/CodeGen/pragma-pack-1.c
> index 773318c79f7c..3a9e391c4ef3 100644
> --- a/clang/test/CodeGen/pragma-pack-1.c
> +++ b/clang/test/CodeGen/pragma-pack-1.c
> @@ -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]]
>
> diff  --git a/clang/test/CodeGen/pragma-weak.c
> b/clang/test/CodeGen/pragma-weak.c
> index d1f7ab6c3ebe..28354dc031c6 100644
> --- a/clang/test/CodeGen/pragma-weak.c
> +++ b/clang/test/CodeGen/pragma-weak.c
> @@ -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
>
>
>
> diff  --git a/clang/test/CodeGen/private-extern-redef.c
> b/clang/test/CodeGen/private-extern-redef.c
> index 580ce9bd4a08..e0d51b67e228 100644
> --- a/clang/test/CodeGen/private-extern-redef.c
> +++ b/clang/test/CodeGen/private-extern-redef.c
> @@ -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
>
>
> diff  --git a/clang/test/CodeGen/tentative-decls.c
> b/clang/test/CodeGen/tentative-decls.c
> index 321778720587..e24c3fcee740 100644
> --- a/clang/test/CodeGen/tentative-decls.c
> +++ b/clang/test/CodeGen/tentative-decls.c
> @@ -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];
>
>
> diff  --git a/clang/test/CodeGen/tls-model.c
> b/clang/test/CodeGen/tls-model.c
> index 41c8de0b0e89..313c3b1dfd41 100644
> --- a/clang/test/CodeGen/tls-model.c
> +++ b/clang/test/CodeGen/tls-model.c
> @@ -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
>
> diff  --git a/clang/test/CodeGen/visibility.c
> b/clang/test/CodeGen/visibility.c
> index 8e153b893a3f..f5606a508a1e 100644
> --- a/clang/test/CodeGen/visibility.c
> +++ b/clang/test/CodeGen/visibility.c
> @@ -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;
>
> diff  --git a/clang/test/CodeGen/vlt_to_pointer.c
> b/clang/test/CodeGen/vlt_to_pointer.c
> index 22c620aa6429..12aaaa9a1df3 100644
> --- a/clang/test/CodeGen/vlt_to_pointer.c
> +++ b/clang/test/CodeGen/vlt_to_pointer.c
> @@ -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])
>
> diff  --git a/clang/test/CodeGen/volatile-1.c
> b/clang/test/CodeGen/volatile-1.c
> index c62a8fd4cd3d..a0c7093363d7 100644
> --- a/clang/test/CodeGen/volatile-1.c
> +++ b/clang/test/CodeGen/volatile-1.c
> @@ -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
>
> diff  --git a/clang/test/CodeGen/weak-global.c
> b/clang/test/CodeGen/weak-global.c
> deleted file mode 100644
> index f972cea91200..000000000000
> --- a/clang/test/CodeGen/weak-global.c
> +++ /dev/null
> @@ -1,3 +0,0 @@
> -// RUN: %clang_cc1 -emit-llvm < %s | grep common
> -
> -int i;
>
> diff  --git a/clang/test/CodeGen/windows-on-arm-dllimport-dllexport.c
> b/clang/test/CodeGen/windows-on-arm-dllimport-dllexport.c
> index a2ebbf195f79..f2c5ff94ffae 100644
> --- a/clang/test/CodeGen/windows-on-arm-dllimport-dllexport.c
> +++ b/clang/test/CodeGen/windows-on-arm-dllimport-dllexport.c
> @@ -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()
>
>
> diff  --git a/clang/test/CodeGenCXX/clang-sections-tentative.c
> b/clang/test/CodeGenCXX/clang-sections-tentative.c
> index e663079b9aa4..2e3d3410bd36 100644
> --- a/clang/test/CodeGenCXX/clang-sections-tentative.c
> +++ b/clang/test/CodeGenCXX/clang-sections-tentative.c
> @@ -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
>
> diff  --git a/clang/test/CodeGenObjC/constant-string-class.m
> b/clang/test/CodeGenObjC/constant-string-class.m
> index adad6b012623..47184050056b 100644
> --- a/clang/test/CodeGenObjC/constant-string-class.m
> +++ b/clang/test/CodeGenObjC/constant-string-class.m
> @@ -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
>
> diff  --git a/clang/test/CodeGenObjC/tentative-cfconstantstring.m
> b/clang/test/CodeGenObjC/tentative-cfconstantstring.m
> index bb76b033cf5f..978bcba6122b 100644
> --- a/clang/test/CodeGenObjC/tentative-cfconstantstring.m
> +++ b/clang/test/CodeGenObjC/tentative-cfconstantstring.m
> @@ -31,7 +31,7 @@ -(void)someMethod {
>  }
>  @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()
>
> diff  --git a/clang/test/CodeGenOpenCL/address-spaces.cl
> b/clang/test/CodeGenOpenCL/address-spaces.cl
> index 3c8fea2a80bc..144466a690b3 100644
> --- a/clang/test/CodeGenOpenCL/address-spaces.cl
> +++ b/clang/test/CodeGenOpenCL/address-spaces.cl
> @@ -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
>
> diff  --git a/clang/test/CodeGenOpenCL/amdgcn-large-globals.cl
> b/clang/test/CodeGenOpenCL/amdgcn-large-globals.cl
> index ea9ea618a488..cf7db165f46b 100644
> --- a/clang/test/CodeGenOpenCL/amdgcn-large-globals.cl
> +++ b/clang/test/CodeGenOpenCL/amdgcn-large-globals.cl
> @@ -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;
>
> diff  --git a/clang/test/CodeGenOpenCL/amdgpu-nullptr.cl
> b/clang/test/CodeGenOpenCL/amdgpu-nullptr.cl
> index c7c77920b775..ba34d168bf79 100644
> --- a/clang/test/CodeGenOpenCL/amdgpu-nullptr.cl
> +++ b/clang/test/CodeGenOpenCL/amdgpu-nullptr.cl
> @@ -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.
>
> diff  --git a/clang/test/Driver/apple-kext-mkernel.c
> b/clang/test/Driver/apple-kext-mkernel.c
> index 9c60c24e36c8..f056ec898d4d 100644
> --- a/clang/test/Driver/apple-kext-mkernel.c
> +++ b/clang/test/Driver/apple-kext-mkernel.c
> @@ -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 \
>
> diff  --git a/clang/test/Driver/clang_f_opts.c
> b/clang/test/Driver/clang_f_opts.c
> index f628f5f40de3..bda026715c36 100644
> --- a/clang/test/Driver/clang_f_opts.c
> +++ b/clang/test/Driver/clang_f_opts.c
> @@ -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
>
> diff  --git a/clang/test/Driver/fuchsia.c b/clang/test/Driver/fuchsia.c
> index 185289defccd..5c1c00061d3a 100644
> --- a/clang/test/Driver/fuchsia.c
> +++ b/clang/test/Driver/fuchsia.c
> @@ -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"
>
> diff  --git a/clang/test/Driver/no-common.c b/clang/test/Driver/no-common.c
> new file mode 100644
> index 000000000000..675de4fee8dc
> --- /dev/null
> +++ b/clang/test/Driver/no-common.c
> @@ -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"
>
> diff  --git a/clang/test/Driver/xcore-opts.c
> b/clang/test/Driver/xcore-opts.c
> index 2bf57967092a..8885974ec84a 100644
> --- a/clang/test/Driver/xcore-opts.c
> +++ b/clang/test/Driver/xcore-opts.c
> @@ -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"
>
> diff  --git a/clang/test/Frontend/ast-codegen.c
> b/clang/test/Frontend/ast-codegen.c
> index e1140fdd8b27..b45377850a23 100644
> --- a/clang/test/Frontend/ast-codegen.c
> +++ b/clang/test/Frontend/ast-codegen.c
> @@ -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()
>
> diff  --git a/clang/test/Headers/xmmintrin.c
> b/clang/test/Headers/xmmintrin.c
> index 9b8993e6bb67..f0f832f81511 100644
> --- a/clang/test/Headers/xmmintrin.c
> +++ b/clang/test/Headers/xmmintrin.c
> @@ -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
>
> diff  --git a/clang/test/PCH/chain-external-defs.c
> b/clang/test/PCH/chain-external-defs.c
> index f7c723338996..a58c82c59c83 100644
> --- a/clang/test/PCH/chain-external-defs.c
> +++ b/clang/test/PCH/chain-external-defs.c
> @@ -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;
>  };
>
> diff  --git a/clang/test/PCH/external-defs.c
> b/clang/test/PCH/external-defs.c
> index 5e906b246bc7..e78125d61fdc 100644
> --- a/clang/test/PCH/external-defs.c
> +++ b/clang/test/PCH/external-defs.c
> @@ -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 {
>
> diff  --git a/clang/test/PCH/tentative-defs.c
> b/clang/test/PCH/tentative-defs.c
> index 7163316a93de..f9fee0ca932e 100644
> --- a/clang/test/PCH/tentative-defs.c
> +++ b/clang/test/PCH/tentative-defs.c
> @@ -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
>
> diff  --git a/clang/test/Parser/pragma-visibility2.c
> b/clang/test/Parser/pragma-visibility2.c
> index bcef09ff2b99..272294ca16ef 100644
> --- a/clang/test/Parser/pragma-visibility2.c
> +++ b/clang/test/Parser/pragma-visibility2.c
> @@ -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
>
> diff  --git a/compiler-rt/test/asan/TestCases/Linux/odr_c_test.c
> b/compiler-rt/test/asan/TestCases/Linux/odr_c_test.c
> index c1423ed30b1b..b9273e49f4c3 100644
> --- a/compiler-rt/test/asan/TestCases/Linux/odr_c_test.c
> +++ b/compiler-rt/test/asan/TestCases/Linux/odr_c_test.c
> @@ -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.
>
> diff  --git a/compiler-rt/test/asan/TestCases/set_shadow_test.c
> b/compiler-rt/test/asan/TestCases/set_shadow_test.c
> index 95bbd829ba85..c20e867967ea 100644
> --- a/compiler-rt/test/asan/TestCases/set_shadow_test.c
> +++ b/compiler-rt/test/asan/TestCases/set_shadow_test.c
> @@ -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;
>  }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200309/132ad7f4/attachment-0001.html>


More information about the llvm-commits mailing list