diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -401,6 +401,9 @@ /// Whether to emit the .debug$H section containing hashes of CodeView types. CODEGENOPT(CodeViewGHash, 1, 0) +/// Whether to emit the compiler path and command line into the CodeView debug information. +CODEGENOPT(CodeViewCommandLine, 1, 0) + /// The kind of inlining to perform. ENUM_CODEGENOPT(Inlining, InliningMethod, 2, NormalInlining) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -3185,6 +3185,10 @@ CodeGenOpts<"CodeViewGHash">, DefaultFalse, PosFlag, NegFlag, BothFlags<[CoreOption]>>; +defm codeview_command_line : BoolOption<"g", "codeview-command-line", + CodeGenOpts<"CodeViewCommandLine">, DefaultFalse, + PosFlag, + NegFlag, BothFlags<[CoreOption]>>; defm inline_line_tables : BoolGOption<"inline-line-tables", CodeGenOpts<"NoInlineLineTables">, DefaultFalse, NegFlag, diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4350,6 +4350,12 @@ options::OPT_gno_codeview_ghash, false)) { CmdArgs.push_back("-gcodeview-ghash"); } + + // Emit codeview command line if requested. + if (Args.hasFlag(options::OPT_gcodeview_command_line, + options::OPT_gno_codeview_command_line, true)) { + CmdArgs.push_back("-gcodeview-command-line"); + } } // Omit inline line tables if requested. diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -4542,8 +4542,10 @@ } // Store the command-line for using in the CodeView backend. - Res.getCodeGenOpts().Argv0 = Argv0; - append_range(Res.getCodeGenOpts().CommandLineArgs, CommandLineArgs); + if (Res.getCodeGenOpts().CodeViewCommandLine) { + Res.getCodeGenOpts().Argv0 = Argv0; + append_range(Res.getCodeGenOpts().CommandLineArgs, CommandLineArgs); + } FixupInvocation(Res, Diags, Args, DashX); diff --git a/clang/test/CodeGen/debug-info-codeview-buildinfo.c b/clang/test/CodeGen/debug-info-codeview-buildinfo.c --- a/clang/test/CodeGen/debug-info-codeview-buildinfo.c +++ b/clang/test/CodeGen/debug-info-codeview-buildinfo.c @@ -1,8 +1,12 @@ // REQUIRES: x86-registered-target // RUN: %clang_cl --target=i686-windows-msvc /c /Z7 /Fo%t.obj -- %s // RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s +// RUN: %clang_cl -gno-codeview-command-line -gcodeview-command-line --target=i686-windows-msvc /c /Z7 /Fo%t.obj -- %s +// RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s // RUN: %clang_cl --target=i686-windows-msvc /c /Z7 /Fo%t.obj -fdebug-compilation-dir=. -- %s // RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s --check-prefix RELATIVE +// RUN: %clang_cl -gno-codeview-command-line --target=i686-windows-msvc /c /Z7 /Fo%t.obj -- %s +// RUN: llvm-pdbutil dump --types %t.obj | FileCheck %s --check-prefix DISABLE int main(void) { return 42; } @@ -14,13 +18,21 @@ // CHECK: 0x[[TOOL:.+]] | LF_STRING_ID [size = {{.+}}] ID: , String: [[TOOLVAL:.+[\\/]clang.*]] // CHECK: 0x[[CMDLINE:.+]] | LF_STRING_ID [size = {{.+}}] ID: , String: "-cc1 // CHECK: 0x{{.+}} | LF_BUILDINFO [size = {{.+}}] -// CHECK: 0x[[PWD]]: `[[PWDVAL]]` -// CHECK: 0x[[TOOL]]: `[[TOOLVAL]]` -// CHECK: 0x[[FILEPATH]]: `[[FILEPATHVAL]]` -// CHECK: 0x[[ZIPDB]]: `` -// CHECK: 0x[[CMDLINE]]: `"-cc1 +// CHECK-NEXT: 0x[[PWD]]: `[[PWDVAL]]` +// CHECK-NEXT: 0x[[TOOL]]: `[[TOOLVAL]]` +// CHECK-NEXT: 0x[[FILEPATH]]: `[[FILEPATHVAL]]` +// CHECK-NEXT: 0x[[ZIPDB]]: `` +// CHECK-NEXT: 0x[[CMDLINE]]: `"-cc1 // RELATIVE: Types (.debug$T) // RELATIVE: ============================================================ // RELATIVE: 0x{{.+}} | LF_BUILDINFO [size = {{.+}}] // RELATIVE: 0x{{.+}}: `.` + +// DISABLE-NOT: cc1 +// DISABLE: 0x{{.+}} | LF_BUILDINFO [size = {{.+}}] +// DISABLE-NEXT: 0x{{.+}}: `{{.*}}` +// DISABLE-NEXT: : `` +// DISABLE-NEXT: 0x{{.+}}: `{{.*}}` +// DISABLE-NEXT: 0x{{.+}}: `` +// DISABLE-NEXT: : ``