<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Hi Greg,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">You are correct. I am including the section ‘Comparing toolchains’ from the llvm-dva<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">documentation, for a specific debug information issue detected in Clang.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">See:
<a href="https://bugs.llvm.org/show_bug.cgi?id=44884">https://bugs.llvm.org/show_bug.cgi?id=44884</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">-Carlos<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">Comparing toolchains<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">--------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">In the previous section, we compared GCC and Clang. The current implementation<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">of llvm-dva have sufficient support for CodeView format, making possible the<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">comparison between MSVC and Clang compilers.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">-----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">pr_44884.cpp<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">-----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">1  int bar(float Input) { return (int)Input; }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">2 
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"> 3  unsigned foo(char Param) {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">4    typedef int INT;                      // ** Definition for INT **<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">5    INT Value = Param;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">6    {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">7      typedef float FLOAT;                // ** Definition for FLOAT **<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">8      {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">9        FLOAT Added = Value + Param;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">10        Value = bar(Added);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">11      }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">12    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">13    return Value + Param;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">14  }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">The above test (from PR44884) is used to illustrates a scope issue found in<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">the Clang compiler.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">See:
<a href="https://bugs.llvm.org/show_bug.cgi?id=44884">https://bugs.llvm.org/show_bug.cgi?id=44884</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">The lines 4 and 7 contains 2 typedefs, defined at different lexical scopes.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">4    typedef int INT;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">7      typedef float FLOAT;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">These are the logical views that llvm-dva generates for 3 different compilers<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">(MSVC, Clang and GCC), emitting different debug info formats (CodeView, DWARF)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">on different platforms.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">-----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">pr_44884_dw.o - Compiled with Clang (DWARF format).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">-----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">Logical View:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[000]           {File} 'pr_44884_dw.o' -> elf64-x86-64<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[001]             {CompileUnit} 'pr_44884.cpp'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]               {Producer} 'clang version 11.0.0<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]     7         {Function} extern not_inlined 'bar' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]     7           {Parameter} 'Input' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]     9         {Function} extern not_inlined 'foo' -> 'unsigned int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {Block}
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[004]    15             {Variable} 'Added' -> 'FLOAT'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]     9           {Parameter} 'Param' -> 'char'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]    13           {TypeAlias} 'FLOAT' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]    10           {TypeAlias} 'INT' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]    11           {Variable} 'Value' -> 'INT'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">-----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">pr_44884_gc.o - Compiled with GCC (DWARF Format).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">-----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">Logical View:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[000]           {File} 'pr_44884_gc.o' -> elf64-x86-64<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[001]             {CompileUnit} 'pr_44884.cpp'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]               {Producer} 'GNU C++ 5.5.0 20171010'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]     7         {Function} extern not_inlined 'bar' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]     7           {Parameter} 'Input' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]     9         {Function} extern not_inlined 'foo' -> 'unsigned int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {Block}
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[004]                   {Block}
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[005]    15               {Variable} 'Added' -> 'FLOAT'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[004]    13             {TypeAlias} 'FLOAT' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]     9           {Parameter} 'Param' -> 'char'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]    10           {TypeAlias} 'INT' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]    11           {Variable} 'Value' -> 'INT'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">-----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">pr_44884_cv.o - Compiled with Clang (CodeView format).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">-----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">Logical View:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[000]           {File} 'pr_44884_cv.o' -> COFF-x86-64<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[001]             {CompileUnit} 'pr_44884.cpp'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]               {Producer} 'clang version 11.0.0<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]               {Function} extern not_inlined 'bar' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {Parameter} 'Input' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]               {Function} extern not_inlined 'foo' -> 'unsigned'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {Block}
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[004]                   {Variable} 'Added' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {Parameter} 'Param' -> 'char'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {TypeAlias} 'FLOAT' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {TypeAlias} 'INT' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {Variable} 'Value' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">-----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">pr_44884_ms.o - Compiled with MSVC (CodeView Format).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">-----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">Logical View:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[000]           {File} 'pr_44884_ms.o' -> COFF-i386<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[001]             {CompileUnit} 'pr_44884.cpp'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]               {Producer} 'Microsoft (R) Optimizing Compiler'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]               {Function} extern not_inlined 'bar' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {Parameter} 'Input' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[002]               {Function} extern not_inlined 'foo' -> 'unsigned'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {Block}
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[004]                   {Block}
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[005]                     {Variable} 'Added' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[004]                   {TypeAlias} 'FLOAT' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {Parameter} 'Param' -> 'char'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {TypeAlias} 'INT' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">[003]                 {Variable} 'Value' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">From the previous logical views, we can see that the Clang compiler emits both<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">typedefs at the same lexical scope (3), which is wrong, while GCC and MSVC emit<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">correct lexical scope for both typedefs.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">---------+----------+----------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">Compiler | Format   | Lexical Scope<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">---------|----------|----------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">Clang    | DWARF    | [003]    13           {TypeAlias} 'FLOAT' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">         |          | [003]    10           {TypeAlias} 'INT' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">---------|----------+----------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">GCC      | DWARF    | [004]    13             {TypeAlias} 'FLOAT' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">         |          | [003]    10           {TypeAlias} 'INT' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">---------|----------|----------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">Clang    | CodeView | [003]                 {TypeAlias} 'FLOAT' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">         |          | [003]                 {TypeAlias} 'INT' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">---------|----------|----------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">MSVC     | CodeView | [004]                   {TypeAlias} 'FLOAT' -> 'float'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">         |          | [003]                 {TypeAlias} 'INT' -> 'int'<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">---------+----------+----------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">Note: One of the main limitations while processing CodeView debug info, is the<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">reduced line information emitted for types and symbols, making difficult to use<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">the comparison feature within llvm-dva, as the line numbers are one of the<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">criteria for logical element match. In the meantime, any graphical comparison<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">tool is able to compare and show the logical view differences.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US">The above table shows the omitted line numbers for the referenced typedefs.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:Consolas;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Greg Bedwell <gregbedwell@gmail.com>
<br>
<b>Sent:</b> 10 March 2021 20:48<br>
<b>To:</b> Alexandre Ganea <alexandre.ganea@ubisoft.com><br>
<b>Cc:</b> Adrian McCarthy <amccarth@google.com>; Enciso, Carlos <Carlos.Enciso@sony.com>; James Henderson <jh7370.2008@my.bristol.ac.uk>; Tobias Hieta <tobias@plexapp.com>; llvm-dev@lists.llvm.org<br>
<b>Subject:</b> Re: [llvm-dev] Debug information with clang-cl on Windows<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">llvm-dva (not yet in tree but see <o:p></o:p></p>
<div>
<p class="MsoNormal"><a href="https://reviews.llvm.org/D88661" target="_blank">https://reviews.llvm.org/D88661</a> ) might also be useful here depending on how mature the codeview support is (cc Carlos - please correct me if anything I said is wrong!). <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I think, in theory it should allow us to do a direct comparison between the debug info generated by clang-cl, and that generated by cl.exe for the same code (and also with clang's DWARF output if that's possible to generate too) so we can
 see exactly what the differences are and what's missing.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">When I previously looked into some of this stuff using dexter I found a few examples like <o:p></o:p></p>
<div>
<p class="MsoNormal"><a href="https://bugs.llvm.org/show_bug.cgi?id=37682">https://bugs.llvm.org/show_bug.cgi?id=37682</a> where clang was comparing unfavorably with MSVC because it was doing more aggressive loop optimizations. I don't know how widespread it
 is or whether it's still the case in more recent versions, but I certainly ran into it on more than one occasion where MSVC was doing things like leaving stores in loops whereas clang would hoist it instead for better codegen but an unfortunately worse debugging
 experience. <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">-Greg<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Wed, 10 Mar 2021 at 20:02, Alexandre Ganea via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="FR-CA"> </span><span lang="EN-CA"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="FR-CA"> </span><span lang="EN-CA"><o:p></o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span lang="FR">De :</span></b><span lang="FR"> Alexandre Ganea
<br>
<b>Envoyé :</b> March 10, 2021 3:02 PM<br>
<b>À :</b> 'Tobias Hieta' <<a href="mailto:tobias@plexapp.com" target="_blank">tobias@plexapp.com</a>>; Adrian McCarthy <<a href="mailto:amccarth@google.com" target="_blank">amccarth@google.com</a>>; 'James Henderson' <<a href="mailto:jh7370.2008@my.bristol.ac.uk" target="_blank">jh7370.2008@my.bristol.ac.uk</a>><br>
<b>Objet :</b> RE: [llvm-dev] Debug information with clang-cl on Windows</span><span lang="EN-CA"><o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">DExTer can probably help bisecting to the specific optimization pass(es) that cause the debug infos to be omitted?
<a href="https://lists.llvm.org/pipermail/llvm-dev/2018-August/125780.html" target="_blank">
https://lists.llvm.org/pipermail/llvm-dev/2018-August/125780.html</a><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">+James.<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><b><span lang="FR">De :</span></b><span lang="FR"> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>>
<b>De la part de</b> Tobias Hieta via llvm-dev<br>
<b>Envoyé :</b> March 10, 2021 2:26 PM<br>
<b>À :</b> Adrian McCarthy <<a href="mailto:amccarth@google.com" target="_blank">amccarth@google.com</a>><br>
<b>Cc :</b> llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Objet :</b> Re: [llvm-dev] Debug information with clang-cl on Windows</span><span lang="EN-CA"><o:p></o:p></span></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">Hello,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">Thanks for your reply!<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">Is it possible to disable optimisations with clang-cl and see if that makes a difference?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">I will also try to build with clang 12 instead and see if there is any improvement. <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">Happy to try to reproduce or fix the issue - but I am unfamiliar with this debug info on windows and how to even start looking into it, any pointers are appreciated. <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">Thanks,<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">Tobias. <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">On Wed, 10 Mar 2021 at 00:45, Adrian McCarthy <<a href="mailto:amccarth@google.com" target="_blank">amccarth@google.com</a>> wrote:<o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">I believe that, even with `/Od` (that's Microsoft for "disable optimizations"), clang-cl applies some optimizations.<o:p></o:p></span></p>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">People on my team have been fixing debug info quality bugs for Windows for a while.  I don't have specific knowledge of these issues, but it's possible newer
 versions (like 12 or head) may have solved this.  We're somewhat more focused on 64-bit than 32-bit builds, so you might encounter some differences there.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">If you can reproduce the problem with a reduced code sample, please file a bug with all the deets.  If you do some debugging yourself, please let us know what
 you find.<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">On Tue, Mar 9, 2021 at 2:46 PM David Blaikie via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">I would guess there's no one bug here - debug info quality (specifically/especially the location of variables when compiling with optimizations enabled) is a
 long tail/sliding scale of issues. LLVM is, on the whole, not spectacular at this - a matter of bugs to fix, some small/simple, others more systemic/representational.<br>
<br>
If you're interested in contributing to this work - generally the first step is to isolate the problem - first thing you can do is if you have some experience dumping/examining debug info in object files, you can dump/examine the relevant object files then
 try to reduce/remove code from the relevant objects, etc, to see what the minimal example is that'll make it easier to figure out how to fix.<o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA"> <o:p></o:p></span></p>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">On Tue, Mar 9, 2021 at 12:37 AM Tobias Hieta via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">Hello,<br>
<br>
We recently switched our windows builds from the CL compiler to<br>
clang-cl. This was a pretty big jump in terms of code generation and<br>
having a uniform compiler across all the major platforms.<br>
<br>
Our setup is that our Windows developer use MSVC as the IDE and<br>
compile with our own build of clang-cl and link with lld-link.<br>
<br>
Some of the developers noticed that some of the debug information are<br>
not as good as with CL. Or rather some variables seems to be optimized<br>
out, this is what the IDE says, see attached screenshot. I have tried<br>
to figure out if there is a rhyme and reason to what variables are<br>
gone - but I have not been able to see any pattern.<br>
<br>
Our command line is:<br>
<br>
clang-cl.exe /nologo -DUNICODE -DUSE_BREAKPAD -DWIN32<br>
-DWIN32_LEAN_AND_MEAN -DWINVER=0x0601 -D_CRT_NONSTDC_NO_DEPRECATE<br>
-D_CRT_SECURE_NO_WARNINGS -D_LEGACY_NAT_TRAVERSAL_ -D_REENTRANT<br>
-D_SCL_SECURE_NO_WARNINGS -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS<br>
-D_UNICODE -D_WIN32_WINNT=0x0601 -D_WINSOCK_DEPRECATED_NO_WARNINGS<br>
-Iincludes -m32 -fdiagnostics-absolute-paths<br>
--target=i686-windows-msvc -m32 /DWIN32 /D_WINDOWS /GR /EHsc /Zi /Ob0<br>
/Od /RTC1 -MDd /Zm512 /EHsc /bigobj /W3 -Werror -Wsign-compare<br>
-Wno-reorder-ctor -Wno-delete-non-virtual-dtor -Wunused-variable<br>
-Wuninitialized -std:c++14<br>
<br>
Is there any good way to debug this or is it a known limitation with<br>
clang-cl or 32 bit (we don't do 64 yet - but with clang-cl we hope to<br>
move towards that soon). Or am I missing some flags?<br>
<br>
Thanks,<br>
Tobias<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><o:p></o:p></span></p>
</blockquote>
</div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-CA">_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><o:p></o:p></span></p>
</blockquote>
</div>
</blockquote>
</div>
</div>
</div>
</div>
<p class="MsoNormal">_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><o:p></o:p></p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
<style type="text/css">.style1 {font-family: "Times New Roman";}</style><mc type="body"><br>
<br>
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:10.0pt;font-family:"><br>
********************************************************************** <br>
This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify
</span><a href="mailto:siee.postmaster@sony.com" target="_blank"><span style="font-size:10.0pt;font-family:">siee.postmaster@sony.com</span></a><span style="font-size:10.0pt;font-family:"><br>
This footnote also confirms that this email message has been checked for all known viruses.<br>
Sony Interactive Entertainment Europe Limited<br>
Registered Office: 10 Great Marlborough Street, London W1F 7LP, United Kingdom<br>
Registered in England: 3277793<br>
**********************************************************************<br>
</span><span style="font-size:18.0pt;font-family:Webdings;color:green"><br>
P</span><b><i><span style="font-size:10.0pt;font-family:"> Please consider the environment before printing this e-mail</span></i></b>
</p>
</div>
</body>
</html>