<div dir="ltr">That seemed reasonable - but given that wasn't the case before I didn't want to change behavior there.<br><br>Could you please check what is happening with this indexed name qualification code? Why it breaking didn't regress Apple debug info situations & what might happen if we started qualifying the names in Objective C++?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Oct 2, 2019 at 8:50 AM Adrian Prantl <<a href="mailto:aprantl@apple.com">aprantl@apple.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
<br>
> On Oct 1, 2019, at 6:39 PM, David Blaikie via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
> <br>
> Author: dblaikie<br>
> Date: Tue Oct  1 18:39:48 2019<br>
> New Revision: 373420<br>
> <br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=373420&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=373420&view=rev</a><br>
> Log:<br>
> DebugInfo: Update support for detecting C++ language variants in debug info emission<br>
> <br>
> Modified:<br>
>    llvm/trunk/include/llvm/BinaryFormat/Dwarf.h<br>
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br>
>    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp<br>
>    llvm/trunk/test/DebugInfo/X86/gnu-public-names.ll<br>
> <br>
> Modified: llvm/trunk/include/llvm/BinaryFormat/Dwarf.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BinaryFormat/Dwarf.h?rev=373420&r1=373419&r2=373420&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/BinaryFormat/Dwarf.h?rev=373420&r1=373419&r2=373420&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/include/llvm/BinaryFormat/Dwarf.h (original)<br>
> +++ llvm/trunk/include/llvm/BinaryFormat/Dwarf.h Tue Oct  1 18:39:48 2019<br>
> @@ -180,6 +180,58 @@ enum SourceLanguage {<br>
>   DW_LANG_hi_user = 0xffff<br>
> };<br>
> <br>
> +inline bool isCPlusPlus(SourceLanguage S) {<br>
> +  // Deliberately enumerate all the language options so we get a warning when<br>
> +  // new language options are added (-Wswitch) that'll hopefully help keep this<br>
> +  // switch up-to-date when new C++ versions are added.<br>
> +  switch (S) {<br>
> +  case DW_LANG_C_plus_plus:<br>
> +  case DW_LANG_C_plus_plus_03:<br>
> +  case DW_LANG_C_plus_plus_11:<br>
> +  case DW_LANG_C_plus_plus_14:<br>
<br>
DW_LANG_ObjC_plus_plus should be considered C++, too, since Objective-C++ ought to be a superset of C++.<br>
<br>
-- adrian<br>
<br>
> +    return true;<br>
> +  case DW_LANG_C89:<br>
> +  case DW_LANG_C:<br>
> +  case DW_LANG_Ada83:<br>
> +  case DW_LANG_Cobol74:<br>
> +  case DW_LANG_Cobol85:<br>
> +  case DW_LANG_Fortran77:<br>
> +  case DW_LANG_Fortran90:<br>
> +  case DW_LANG_Pascal83:<br>
> +  case DW_LANG_Modula2:<br>
> +  case DW_LANG_Java:<br>
> +  case DW_LANG_C99:<br>
> +  case DW_LANG_Ada95:<br>
> +  case DW_LANG_Fortran95:<br>
> +  case DW_LANG_PLI:<br>
> +  case DW_LANG_ObjC:<br>
> +  case DW_LANG_ObjC_plus_plus:<br>
> +  case DW_LANG_UPC:<br>
> +  case DW_LANG_D:<br>
> +  case DW_LANG_Python:<br>
> +  case DW_LANG_OpenCL:<br>
> +  case DW_LANG_Go:<br>
> +  case DW_LANG_Modula3:<br>
> +  case DW_LANG_Haskell:<br>
> +  case DW_LANG_OCaml:<br>
> +  case DW_LANG_Rust:<br>
> +  case DW_LANG_C11:<br>
> +  case DW_LANG_Swift:<br>
> +  case DW_LANG_Julia:<br>
> +  case DW_LANG_Dylan:<br>
> +  case DW_LANG_Fortran03:<br>
> +  case DW_LANG_Fortran08:<br>
> +  case DW_LANG_RenderScript:<br>
> +  case DW_LANG_BLISS:<br>
> +  case DW_LANG_Mips_Assembler:<br>
> +  case DW_LANG_GOOGLE_RenderScript:<br>
> +  case DW_LANG_BORLAND_Delphi:<br>
> +  case DW_LANG_lo_user:<br>
> +  case DW_LANG_hi_user:<br>
> +    return false;<br>
> +  }<br>
> +}<br>
> +<br>
> enum CaseSensitivity {<br>
>   // Identifier case codes<br>
>   DW_ID_case_sensitive = 0x00,<br>
> <br>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=373420&r1=373419&r2=373420&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=373420&r1=373419&r2=373420&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)<br>
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Tue Oct  1 18:39:48 2019<br>
> @@ -1989,9 +1989,10 @@ static dwarf::PubIndexEntryDescriptor co<br>
>   case dwarf::DW_TAG_union_type:<br>
>   case dwarf::DW_TAG_enumeration_type:<br>
>     return dwarf::PubIndexEntryDescriptor(<br>
> -        dwarf::GIEK_TYPE, CU->getLanguage() != dwarf::DW_LANG_C_plus_plus<br>
> -                              ? dwarf::GIEL_STATIC<br>
> -                              : dwarf::GIEL_EXTERNAL);<br>
> +        dwarf::GIEK_TYPE,<br>
> +        dwarf::isCPlusPlus((dwarf::SourceLanguage)CU->getLanguage())<br>
> +            ? dwarf::GIEL_EXTERNAL<br>
> +            : dwarf::GIEL_STATIC);<br>
>   case dwarf::DW_TAG_typedef:<br>
>   case dwarf::DW_TAG_base_type:<br>
>   case dwarf::DW_TAG_subrange_type:<br>
> <br>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=373420&r1=373419&r2=373420&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=373420&r1=373419&r2=373420&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)<br>
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Tue Oct  1 18:39:48 2019<br>
> @@ -722,7 +722,7 @@ std::string DwarfUnit::getParentContextS<br>
>     return "";<br>
> <br>
>   // FIXME: Decide whether to implement this for non-C++ languages.<br>
> -  if (getLanguage() != dwarf::DW_LANG_C_plus_plus)<br>
> +  if (!dwarf::isCPlusPlus((dwarf::SourceLanguage)getLanguage()))<br>
>     return "";<br>
> <br>
>   std::string CS;<br>
> <br>
> Modified: llvm/trunk/test/DebugInfo/X86/gnu-public-names.ll<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/gnu-public-names.ll?rev=373420&r1=373419&r2=373420&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/gnu-public-names.ll?rev=373420&r1=373419&r2=373420&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/DebugInfo/X86/gnu-public-names.ll (original)<br>
> +++ llvm/trunk/test/DebugInfo/X86/gnu-public-names.ll Tue Oct  1 18:39:48 2019<br>
> @@ -354,7 +354,7 @@ attributes #1 = { nounwind readnone spec<br>
> <br>
> !0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())<br>
> !1 = distinct !DIGlobalVariable(name: "static_member_variable", linkageName: "_ZN1C22static_member_variableE", scope: !2, file: !3, line: 7, type: !13, isLocal: false, isDefinition: true, declaration: !22)<br>
> -!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !3, producer: "clang version 9.0.0 (trunk 363288) (llvm/trunk 363294)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, retainedTypes: !16, globals: !17, imports: !54, nameTableKind: GNU)<br>
> +!2 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_03, file: !3, producer: "clang version 9.0.0 (trunk 363288) (llvm/trunk 363294)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, retainedTypes: !16, globals: !17, imports: !54, nameTableKind: GNU)<br>
> !3 = !DIFile(filename: "names.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch")<br>
> !4 = !{!5, !9, !12}<br>
> !5 = !DICompositeType(tag: DW_TAG_enumeration_type, file: !3, line: 49, baseType: !6, size: 32, elements: !7)<br>
> <br>
> <br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
<br>
</blockquote></div>