From 7dfefa9c285f67a548a1f114f96c3871a10f7a6f Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sat, 9 Jul 2016 21:49:16 +0000 Subject: [PATCH] [clang-cl] Add support for /Zd MASM (ML.exe and ML64.exe) and older versions of MSVC (CL.exe) support a flag called /Zd which is more-or-less -gline-tables-only. It seems nicer to support this flag instead of exposing -gline-tables-only. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274991 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Driver/CLCompatOptions.td | 2 ++ include/clang/Driver/Options.td | 2 +- lib/Driver/Tools.cpp | 19 +++++++++++++------ test/Driver/cl-options.c | 2 +- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/include/clang/Driver/CLCompatOptions.td b/include/clang/Driver/CLCompatOptions.td index 98d3f992f6..b1d2459f71 100644 --- a/include/clang/Driver/CLCompatOptions.td +++ b/include/clang/Driver/CLCompatOptions.td @@ -166,6 +166,8 @@ def _SLASH_Zc_trigraphs_off : CLFlag<"Zc:trigraphs-">, HelpText<"Disable trigraphs (default)">, Alias; def _SLASH_Z7 : CLFlag<"Z7">, HelpText<"Enable CodeView debug information in object files">; +def _SLASH_Zd : CLFlag<"Zd">, + HelpText<"Emit debug line number tables only">; def _SLASH_Zi : CLFlag<"Zi">, Alias<_SLASH_Z7>, HelpText<"Alias for /Z7. Does not produce PDBs.">; def _SLASH_Zp : CLJoined<"Zp">, diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td index bee1aaddd5..06c5739cac 100644 --- a/include/clang/Driver/Options.td +++ b/include/clang/Driver/Options.td @@ -1229,7 +1229,7 @@ def fdebug_prefix_map_EQ def g_Flag : Flag<["-"], "g">, Group, HelpText<"Generate source-level debug information">; def gline_tables_only : Flag<["-"], "gline-tables-only">, Group, - Flags<[CoreOption]>, HelpText<"Emit debug line number tables only">; + HelpText<"Emit debug line number tables only">; def gmlt : Flag<["-"], "gmlt">, Alias; def g0 : Flag<["-"], "g0">, Group; def g1 : Flag<["-"], "g1">, Group, Alias; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 71440c4306..d3844dd912 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -6269,12 +6269,18 @@ void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, CmdArgs.push_back(Args.MakeArgString(Twine(LangOptions::SSPStrong))); } - // Emit CodeView if -Z7 is present. - *EmitCodeView = Args.hasArg(options::OPT__SLASH_Z7); - if (*EmitCodeView) - *DebugInfoKind = codegenoptions::LimitedDebugInfo; - if (*EmitCodeView) + // Emit CodeView if -Z7 or -Zd are present. + if (Arg *DebugInfoArg = + Args.getLastArg(options::OPT__SLASH_Z7, options::OPT__SLASH_Zd)) { + *EmitCodeView = true; + if (DebugInfoArg->getOption().matches(options::OPT__SLASH_Z7)) + *DebugInfoKind = codegenoptions::LimitedDebugInfo; + else + *DebugInfoKind = codegenoptions::DebugLineTablesOnly; CmdArgs.push_back("-gcodeview"); + } else { + *EmitCodeView = false; + } const Driver &D = getToolChain().getDriver(); EHFlags EH = parseClangCLEHFlags(D, Args); @@ -9964,7 +9970,8 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-nologo"); - if (Args.hasArg(options::OPT_g_Group, options::OPT__SLASH_Z7)) + if (Args.hasArg(options::OPT_g_Group, options::OPT__SLASH_Z7, + options::OPT__SLASH_Zd)) CmdArgs.push_back("-debug"); bool DLL = Args.hasArg(options::OPT__SLASH_LD, options::OPT__SLASH_LDd, diff --git a/test/Driver/cl-options.c b/test/Driver/cl-options.c index cd8d0c0cc5..223d37e5f4 100644 --- a/test/Driver/cl-options.c +++ b/test/Driver/cl-options.c @@ -420,7 +420,7 @@ // Z7: "-gcodeview" // Z7: "-debug-info-kind=limited" -// RUN: %clang_cl -gline-tables-only /Z7 /c -### -- %s 2>&1 | FileCheck -check-prefix=Z7GMLT %s +// RUN: %clang_cl /Zd /c -### -- %s 2>&1 | FileCheck -check-prefix=Z7GMLT %s // Z7GMLT: "-gcodeview" // Z7GMLT: "-debug-info-kind=line-tables-only" -- 2.50.1