diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index f717ca3ed84922..9a172dbd057e47 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -969,6 +969,10 @@ void tools::gnutools::Assembler::ConstructJob(Compilation &C, for (const auto &II : Inputs) CmdArgs.push_back(II.getFilename()); + if (Arg *A = Args.getLastArg(options::OPT_g_Flag, options::OPT_gN_Group)) + if (!A->getOption().matches(options::OPT_g0)) + Args.AddLastArg(CmdArgs, options::OPT_g_Flag); + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath(DefaultAssembler)); C.addCommand(std::make_unique(JA, *this, diff --git a/clang/test/Driver/as-options.s b/clang/test/Driver/as-options.s index 64269683ec34ef..f76b213eeba7bf 100644 --- a/clang/test/Driver/as-options.s +++ b/clang/test/Driver/as-options.s @@ -116,3 +116,13 @@ // RUN: %clang -mrelax-all -fno-integrated-as -x c++ %s -S -o /dev/null 2>&1 \ // RUN: | FileCheck --check-prefix=WARN --allow-empty %s // WARN: unused + +// Test that -g is passed through to GAS. +// RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -g %s -### 2>&1 | \ +// RUN: FileCheck --check-prefix=DEBUG %s +// RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -g0 -g %s -### 2>&1 | \ +// RUN: FileCheck --check-prefix=DEBUG %s +// DEBUG: "-g" +// RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -g -g0 %s -### 2>&1 | \ +// RUN: FileCheck --check-prefix=NODEBUG %s +// NODEBUG-NOT: "-g" diff --git a/clang/test/Driver/gcc_forward.c b/clang/test/Driver/gcc_forward.c index 9e512d134b3e7e..491750f5eedfd3 100644 --- a/clang/test/Driver/gcc_forward.c +++ b/clang/test/Driver/gcc_forward.c @@ -34,9 +34,3 @@ // CHECK-NOT: "-Wall" // CHECK-NOT: "-Wdocumentation" // CHECK: "-o" "a.out" - -// Check that we're not forwarding -g options to the assembler -// RUN: %clang -g -target x86_64-unknown-linux-gnu -no-integrated-as -c %s -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-ASM %s -// CHECK-ASM: as -// CHECK-ASM-NOT: "-g"