r279765 - Omit column info for CodeView by default

Adrian Prantl via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 29 14:10:47 PDT 2016


> On Aug 25, 2016, at 11:24 AM, Adrian McCarthy via cfe-commits <cfe-commits at lists.llvm.org> wrote:
> 
> Author: amccarth
> Date: Thu Aug 25 13:24:35 2016
> New Revision: 279765
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=279765&view=rev
> Log:
> Omit column info for CodeView by default
> 
> Clang tracks only start columns, not start-end ranges. CodeView allows for that, but the VS debugger doesn't handle anything less than a complete range well--it either highlights the wrong part of a statement or truncates source lines in the assembly view. It's better to have no column information at all.

Do you have any plans on implementing this? I'd be very interested in having full start-end ranges (perhaps encoded as start line/column+length) available in DWARF, too.

-- adrian

> 
> So by default, we'll omit the column information for CodeView targeting Windows.
> 
> Since the column info is still useful for sanitizers, I've promoted -gcolumn-info (and -gno-column-info) to a CoreOption and added a couple tests to make sure that works for clang-cl.
> 
> Differential Revision: https://reviews.llvm.org/D23720
> 
> Modified:
>    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/Options.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=279765&r1=279764&r2=279765&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Driver/Options.td (original)
> +++ cfe/trunk/include/clang/Driver/Options.td Thu Aug 25 13:24:35 2016
> @@ -1305,8 +1305,8 @@ def gno_record_gcc_switches : Flag<["-"]
>   Group<g_flags_Group>;
> def gstrict_dwarf : Flag<["-"], "gstrict-dwarf">, Group<g_flags_Group>;
> def gno_strict_dwarf : Flag<["-"], "gno-strict-dwarf">, Group<g_flags_Group>;
> -def gcolumn_info : Flag<["-"], "gcolumn-info">, Group<g_flags_Group>;
> -def gno_column_info : Flag<["-"], "gno-column-info">, Group<g_flags_Group>;
> +def gcolumn_info : Flag<["-"], "gcolumn-info">, Group<g_flags_Group>, Flags<[CoreOption]>;
> +def gno_column_info : Flag<["-"], "gno-column-info">, Group<g_flags_Group>, Flags<[CoreOption]>;
> def gsplit_dwarf : Flag<["-"], "gsplit-dwarf">, Group<g_flags_Group>;
> def ggnu_pubnames : Flag<["-"], "ggnu-pubnames">, Group<g_flags_Group>;
> def gdwarf_aranges : Flag<["-"], "gdwarf-aranges">, Group<g_flags_Group>;
> 
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=279765&r1=279764&r2=279765&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Thu Aug 25 13:24:35 2016
> @@ -2574,7 +2574,7 @@ static void getTargetFeatures(const Tool
>   case llvm::Triple::wasm32:
>   case llvm::Triple::wasm64:
>     getWebAssemblyTargetFeatures(Args, Features);
> -    break; 
> +    break;
>   case llvm::Triple::sparc:
>   case llvm::Triple::sparcel:
>   case llvm::Triple::sparcv9:
> @@ -4656,9 +4656,13 @@ void Clang::ConstructJob(Compilation &C,
>   // We ignore flags -gstrict-dwarf and -grecord-gcc-switches for now.
>   Args.ClaimAllArgs(options::OPT_g_flags_Group);
> 
> -  // PS4 defaults to no column info
> +  // Column info is included by default for everything except PS4 and CodeView.
> +  // Clang doesn't track end columns, just starting columns, which, in theory,
> +  // is fine for CodeView (and PDB).  In practice, however, the Microsoft
> +  // debuggers don't handle missing end columns well, so it's better not to
> +  // include any column info.
>   if (Args.hasFlag(options::OPT_gcolumn_info, options::OPT_gno_column_info,
> -                   /*Default=*/ !IsPS4CPU))
> +                   /*Default=*/ !IsPS4CPU && !(IsWindowsMSVC && EmitCodeView)))
>     CmdArgs.push_back("-dwarf-column-info");
> 
>   // FIXME: Move backend command line options to the module.
> @@ -6712,7 +6716,7 @@ void ClangAs::ConstructJob(Compilation &
>   case llvm::Triple::mips64el:
>     AddMIPSTargetArgs(Args, CmdArgs);
>     break;
> -    
> +
>   case llvm::Triple::x86:
>   case llvm::Triple::x86_64:
>     AddX86TargetArgs(Args, CmdArgs);
> 
> Modified: cfe/trunk/test/Driver/cl-options.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-options.c?rev=279765&r1=279764&r2=279765&view=diff
> ==============================================================================
> --- cfe/trunk/test/Driver/cl-options.c (original)
> +++ cfe/trunk/test/Driver/cl-options.c Thu Aug 25 13:24:35 2016
> @@ -50,6 +50,15 @@
> // fpstrict-NOT: -menable-unsafe-fp-math
> // fpstrict-NOT: -ffast-math
> 
> +// RUN: %clang_cl /Z7 -gcolumn-info -### -- %s 2>&1 | FileCheck -check-prefix=gcolumn %s
> +// gcolumn: -dwarf-column-info
> +
> +// RUN: %clang_cl /Z7 -gno-column-info -### -- %s 2>&1 | FileCheck -check-prefix=gnocolumn %s
> +// gnocolumn-NOT: -dwarf-column-info
> +
> +// RUN: %clang_cl /Z7 -### -- %s 2>&1 | FileCheck -check-prefix=gdefcolumn %s
> +// gdefcolumn-NOT: -dwarf-column-info
> +
> // RUN: %clang_cl /GA -### -- %s 2>&1 | FileCheck -check-prefix=GA %s
> // GA: -ftls-model=local-exec
> 
> 
> 
> _______________________________________________
> 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