r274991 - [clang-cl] Add support for /Zd

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 28 18:03:31 PDT 2016


Sorry, I was supposed to chime in here.

I don't have a strong opinion on this, but I don't think it's a
problem for us to allow the -gline-tables-only spelling in addition to
/Zd.

It just doesn't seem like a big deal to me.

On Mon, Jul 11, 2016 at 5:50 PM, Saleem Abdulrasool via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> On Mon, Jul 11, 2016 at 12:29 PM, David Majnemer via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
>>
>>
>>
>> On Mon, Jul 11, 2016 at 12:18 PM, Nico Weber <thakis at chromium.org> wrote:
>>>
>>> On Mon, Jul 11, 2016 at 12:19 PM, David Majnemer
>>> <david.majnemer at gmail.com> wrote:
>>>>
>>>>
>>>>
>>>> On Mon, Jul 11, 2016 at 9:03 AM, Nico Weber <thakis at chromium.org> wrote:
>>>>>
>>>>> On Mon, Jul 11, 2016 at 11:51 AM, David Majnemer
>>>>> <david.majnemer at gmail.com> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Jul 11, 2016 at 8:42 AM, Nico Weber <thakis at chromium.org>
>>>>>> wrote:
>>>>>>>
>>>>>>> On Mon, Jul 11, 2016 at 11:36 AM, David Majnemer
>>>>>>> <david.majnemer at gmail.com> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mon, Jul 11, 2016 at 7:18 AM, Nico Weber <thakis at chromium.org>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> VS2013's cl.exe doesn't understand /Zd, 2015's doesn't either. This
>>>>>>>>> means people who want to ask clang-cl for line tables only will have to add
>>>>>>>>> this flag in some if(is_clang) block in their build file anyways. What's the
>>>>>>>>> advantage of giving this flag a spelling that's different from both cl and
>>>>>>>>> clang? With -gline-tables-only, an if(is_clang) works on Linux, Mac,
>>>>>>>>> Windows.
>>>>>>>>>
>>>>>>>>> (Even if there's a good case for /Zd, I don't think we should
>>>>>>>>> remove user-exposed flags without a strong reason, so even if we keep /Zd I
>>>>>>>>> think we should also keep exposing -gline-tables-only.)
>>>>>>>>
>>>>>>>>
>>>>>>>> Existing users of -gline-tables-only?  I'd imagine any responsible
>>>>>>>> users of -gline-tables-only would probably use their build system to verify
>>>>>>>> that the flag exists.  We have never released an official LLVM which
>>>>>>>> supported it (LLVM 3.8 came out in early March and -gline-tables-only was
>>>>>>>> exposed via clang-cl in mid March).
>>>>>>>
>>>>>>>
>>>>>>> Ok, but why is /Zd better than -gline-tables-only?
>>>>>>
>>>>>>
>>>>>> I see a few reasons:
>>>>>> - It is less surprising for a debug flag in the cl world to be called
>>>>>> /Zsomething instead of -gsomething.
>>>>>
>>>>>
>>>>> Eh, you'll have to look it up either way to find the flag.
>>>>
>>>>
>>>> I agree.
>>>>
>>>>>
>>>>> And when seeing the flag, the -g flag is more self-explanatory.
>>>>
>>>>
>>>> I disagree, I had no idea what that flag did until I started working on
>>>> debug info.
>>>>
>>>>>
>>>>> Also, it is surprising that a clang-cl /-style flag doesn't work with
>>>>> cl, so it just moves the surprise around a bit.
>>>>
>>>>
>>>> It is surprising when that happens in either direction.  If this is
>>>> considered a bug, we will never "fix" it.
>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> - I think that avoiding invasion of their namespace, when possible, is
>>>>>> a good thing.  It makes it less likely that we will conflict with a flag
>>>>>> they want to add in the future.
>>>>>
>>>>>
>>>>> I don't understand this point. Doesn't invading their namespace make
>>>>> collisions _more_ likely?
>>>>>
>>>>>>
>>>>>> - I imagine that if they wanted to add support back for
>>>>>> -gline-tables-only, they'd name it /Zd.
>>>>>
>>>>>
>>>>> Given they had this flag and removed it, they probably didn't like it
>>>>> very much :-)
>>>>>
>>>>>>
>>>>>> I'm sympathetic to the argument that "-gline-tables-only" is more
>>>>>> familiar to Linux/Mac OS X folks and that /Zd won't work across all
>>>>>> platforms.
>>>>>>
>>>>>> Here why I think that's ok:
>>>>>> - This is not really a new problem.  If you want to select c++1z you
>>>>>> get to spell it /std:c++latest for clang-cl and -std=c++14.
>>>>>
>>>>>
>>>>> Sure, but these are flags that clang/gcc and cl interpret. So if you
>>>>> have a gcc build and a visual studio build, it's fairly easy to get each
>>>>> going with clang / clang-cl.
>>>>>
>>>>> With /Zd, we're needlessly inventing a new spelling for an existing
>>>>> clang flag.
>>>>
>>>>
>>>> icl also supports /Zd.
>>>
>>>
>>> That's a big point in favor of this change, I think. Thanks for pointing
>>> it out.
>>>
>>>>>
>>>>> As far as I can see, the new name creates a (small) problem without
>>>>> solving one.
>>>>
>>>>
>>>> This is an attempt to reduce unneeded diversity.
>>>
>>>
>>> From my point of view, it increased diversity: Before, this feature had
>>> one name, now it has two, and the second name is our own invention. (But if
>>> icl also uses that flag, then it's less bad.)
>>
>>
>> It's not out invention, it's Microsoft's.  icl (and now clang-cl) both
>> happen to still support it.  If a build system wanted just line table debug
>> info for a cl-like driver, they just need /Zd.
>>
>>>
>>>
>>>>>
>>>>> So far, when we wanted to add a flag that cl doesn't have and that
>>>>> clang has, we've always gone for the clang spelling of that flag. That seems
>>>>> like a good guideline to me.
>>>>
>>>>
>>>> Often but not always.  For example, we have /Qvec instead of -fvectorize
>>>> because icl has the flag.
>>>
>>>
>>> Hm, I'd (weakly) argue that that's not ideal either :-)
>>
>>
>> Why? MSVC has picked up flags from icl. See /Qvec-report.
>>
>>>
>>>
>>> Anyhow, I think this isn't a good change, and it sounds like you disagree
>>> with that. So I guess the next step here is that Hans gets to make a
>>> decision once he's back?
>>
>>
>> More opinions are always better.
>
>
> Well, in that case, my opinion, which arguably may be worthless, is to keep
> the /Zd spelling.
>
> /Zd is meant to only produce line number information (aka, line tables).
> Yes, this is different from the clang driver, but if you want to use GCC
> style arguments, why are you using the clang-cl frontend?
>
>>>
>>>>
>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> - People who want harmony between Mac OS X, Linux and Windows on the
>>>>>> driver side can just use clang++.
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> I'd consider it in poor form for users to take a hard dependency on
>>>>>>>> a flag which only exists in a compiler which has never been released.
>>>>>>>>
>>>>>>>> I'd agree with you if -gline-tables-only had made its way to an
>>>>>>>> actual release.
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Mon, Jul 11, 2016 at 10:08 AM, Nico Weber <thakis at chromium.org>
>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>> This breaks existing users of -gline-tables-only. What's the
>>>>>>>>>> motivation for this change?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sat, Jul 9, 2016 at 5:49 PM, David Majnemer via cfe-commits
>>>>>>>>>> <cfe-commits at lists.llvm.org> wrote:
>>>>>>>>>>>
>>>>>>>>>>> Author: majnemer
>>>>>>>>>>> Date: Sat Jul  9 16:49:16 2016
>>>>>>>>>>> New Revision: 274991
>>>>>>>>>>>
>>>>>>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=274991&view=rev
>>>>>>>>>>> Log:
>>>>>>>>>>> [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.
>>>>>>>>>>>
>>>>>>>>>>> Modified:
>>>>>>>>>>>     cfe/trunk/include/clang/Driver/CLCompatOptions.td
>>>>>>>>>>>     cfe/trunk/include/clang/Driver/Options.td
>>>>>>>>>>>     cfe/trunk/lib/Driver/Tools.cpp
>>>>>>>>>>>     cfe/trunk/test/Driver/cl-options.c
>>>>>>>>>>>
>>>>>>>>>>> Modified: cfe/trunk/include/clang/Driver/CLCompatOptions.td
>>>>>>>>>>> URL:
>>>>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CLCompatOptions.td?rev=274991&r1=274990&r2=274991&view=diff
>>>>>>>>>>>
>>>>>>>>>>> ==============================================================================
>>>>>>>>>>> --- cfe/trunk/include/clang/Driver/CLCompatOptions.td (original)
>>>>>>>>>>> +++ cfe/trunk/include/clang/Driver/CLCompatOptions.td Sat Jul  9
>>>>>>>>>>> 16:49:16 2016
>>>>>>>>>>> @@ -166,6 +166,8 @@ def _SLASH_Zc_trigraphs_off : CLFlag<"Zc
>>>>>>>>>>>    HelpText<"Disable trigraphs (default)">, Alias<fno_trigraphs>;
>>>>>>>>>>>  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">,
>>>>>>>>>>>
>>>>>>>>>>> Modified: cfe/trunk/include/clang/Driver/Options.td
>>>>>>>>>>> URL:
>>>>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=274991&r1=274990&r2=274991&view=diff
>>>>>>>>>>>
>>>>>>>>>>> ==============================================================================
>>>>>>>>>>> --- cfe/trunk/include/clang/Driver/Options.td (original)
>>>>>>>>>>> +++ cfe/trunk/include/clang/Driver/Options.td Sat Jul  9 16:49:16
>>>>>>>>>>> 2016
>>>>>>>>>>> @@ -1229,7 +1229,7 @@ def fdebug_prefix_map_EQ
>>>>>>>>>>>  def g_Flag : Flag<["-"], "g">, Group<g_Group>,
>>>>>>>>>>>    HelpText<"Generate source-level debug information">;
>>>>>>>>>>>  def gline_tables_only : Flag<["-"], "gline-tables-only">,
>>>>>>>>>>> Group<gN_Group>,
>>>>>>>>>>> -  Flags<[CoreOption]>, HelpText<"Emit debug line number tables
>>>>>>>>>>> only">;
>>>>>>>>>>> +  HelpText<"Emit debug line number tables only">;
>>>>>>>>>>>  def gmlt : Flag<["-"], "gmlt">, Alias<gline_tables_only>;
>>>>>>>>>>>  def g0 : Flag<["-"], "g0">, Group<gN_Group>;
>>>>>>>>>>>  def g1 : Flag<["-"], "g1">, Group<gN_Group>,
>>>>>>>>>>> Alias<gline_tables_only>;
>>>>>>>>>>>
>>>>>>>>>>> Modified: cfe/trunk/lib/Driver/Tools.cpp
>>>>>>>>>>> URL:
>>>>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=274991&r1=274990&r2=274991&view=diff
>>>>>>>>>>>
>>>>>>>>>>> ==============================================================================
>>>>>>>>>>> --- cfe/trunk/lib/Driver/Tools.cpp (original)
>>>>>>>>>>> +++ cfe/trunk/lib/Driver/Tools.cpp Sat Jul  9 16:49:16 2016
>>>>>>>>>>> @@ -6269,12 +6269,18 @@ void Clang::AddClangCLArgs(const ArgList
>>>>>>>>>>>
>>>>>>>>>>> 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(
>>>>>>>>>>>
>>>>>>>>>>>    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,
>>>>>>>>>>>
>>>>>>>>>>> Modified: cfe/trunk/test/Driver/cl-options.c
>>>>>>>>>>> URL:
>>>>>>>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-options.c?rev=274991&r1=274990&r2=274991&view=diff
>>>>>>>>>>>
>>>>>>>>>>> ==============================================================================
>>>>>>>>>>> --- cfe/trunk/test/Driver/cl-options.c (original)
>>>>>>>>>>> +++ cfe/trunk/test/Driver/cl-options.c Sat Jul  9 16:49:16 2016
>>>>>>>>>>> @@ -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"
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> cfe-commits mailing list
>>>>>>>>>>> cfe-commits at lists.llvm.org
>>>>>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
>
>
> --
> Saleem Abdulrasool
> compnerd (at) compnerd (dot) org
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>


More information about the cfe-commits mailing list