r372681 - Support for DWARF-5 C++ language tags.

Adrian Prantl via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 2 08:29:40 PDT 2019



> On Oct 1, 2019, at 6:40 PM, David Blaikie <dblaikie at gmail.com> wrote:
> 
> This broke gnu_pubnames and other forms of DWARF index of C++ code - fixed in r373420 (feel free to post-comimt review, etc, of course)
> 

Thanks!

-- adrian

> On Mon, Sep 23, 2019 at 5:36 PM Adrian Prantl via cfe-commits <cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>> wrote:
> Author: adrian
> Date: Mon Sep 23 17:38:49 2019
> New Revision: 372681
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=372681&view=rev <http://llvm.org/viewvc/llvm-project?rev=372681&view=rev>
> Log:
> Support for DWARF-5 C++ language tags.
> 
> This patch provides support for DW_LANG_C_plus_plus_11,
> DW_LANG_C_plus_plus_14 tags in the Clang C++ frontend.
> 
> Patch by Sourabh Singh Tomar!
> Differential Revision: https://reviews.llvm.org/D67613 <https://reviews.llvm.org/D67613>
> 
> Reapplies r372663 after adapting a failing test in the LLDB testsuite.
> 
> Modified:
>     cfe/trunk/include/clang/AST/DeclCXX.h
>     cfe/trunk/lib/AST/DeclPrinter.cpp
>     cfe/trunk/lib/AST/JSONNodeDumper.cpp
>     cfe/trunk/lib/AST/TextNodeDumper.cpp
>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>     cfe/trunk/lib/CodeGen/CodeGenModule.cpp
>     cfe/trunk/lib/Sema/SemaDeclCXX.cpp
>     cfe/trunk/lib/Sema/SemaModule.cpp
>     cfe/trunk/test/Modules/ModuleDebugInfo.cpp
> 
> Modified: cfe/trunk/include/clang/AST/DeclCXX.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclCXX.h?rev=372681&r1=372680&r2=372681&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclCXX.h?rev=372681&r1=372680&r2=372681&view=diff>
> ==============================================================================
> --- cfe/trunk/include/clang/AST/DeclCXX.h (original)
> +++ cfe/trunk/include/clang/AST/DeclCXX.h Mon Sep 23 17:38:49 2019
> @@ -42,6 +42,7 @@
>  #include "llvm/ADT/PointerUnion.h"
>  #include "llvm/ADT/STLExtras.h"
>  #include "llvm/ADT/iterator_range.h"
> +#include "llvm/BinaryFormat/Dwarf.h"
>  #include "llvm/Support/Casting.h"
>  #include "llvm/Support/Compiler.h"
>  #include "llvm/Support/PointerLikeTypeTraits.h"
> @@ -2941,8 +2942,10 @@ public:
>    /// ensure a stable ABI for this, we choose the DW_LANG_ encodings
>    /// from the dwarf standard.
>    enum LanguageIDs {
> -    lang_c = /* DW_LANG_C */ 0x0002,
> -    lang_cxx = /* DW_LANG_C_plus_plus */ 0x0004
> +    lang_c = llvm::dwarf::DW_LANG_C,
> +    lang_cxx = llvm::dwarf::DW_LANG_C_plus_plus,
> +    lang_cxx_11 = llvm::dwarf::DW_LANG_C_plus_plus_11,
> +    lang_cxx_14 = llvm::dwarf::DW_LANG_C_plus_plus_14
>    };
> 
>  private:
> 
> Modified: cfe/trunk/lib/AST/DeclPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclPrinter.cpp?rev=372681&r1=372680&r2=372681&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclPrinter.cpp?rev=372681&r1=372680&r2=372681&view=diff>
> ==============================================================================
> --- cfe/trunk/lib/AST/DeclPrinter.cpp (original)
> +++ cfe/trunk/lib/AST/DeclPrinter.cpp Mon Sep 23 17:38:49 2019
> @@ -1001,12 +1001,19 @@ void DeclPrinter::VisitCXXRecordDecl(CXX
> 
>  void DeclPrinter::VisitLinkageSpecDecl(LinkageSpecDecl *D) {
>    const char *l;
> -  if (D->getLanguage() == LinkageSpecDecl::lang_c)
> +  switch (D->getLanguage()) {
> +  case LinkageSpecDecl::lang_c:
>      l = "C";
> -  else {
> -    assert(D->getLanguage() == LinkageSpecDecl::lang_cxx &&
> -           "unknown language in linkage specification");
> +    break;
> +  case LinkageSpecDecl::lang_cxx_14:
> +    l = "C++14";
> +    break;
> +  case LinkageSpecDecl::lang_cxx_11:
> +    l = "C++11";
> +    break;
> +  case LinkageSpecDecl::lang_cxx:
>      l = "C++";
> +    break;
>    }
> 
>    Out << "extern \"" << l << "\" ";
> 
> Modified: cfe/trunk/lib/AST/JSONNodeDumper.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/JSONNodeDumper.cpp?rev=372681&r1=372680&r2=372681&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/JSONNodeDumper.cpp?rev=372681&r1=372680&r2=372681&view=diff>
> ==============================================================================
> --- cfe/trunk/lib/AST/JSONNodeDumper.cpp (original)
> +++ cfe/trunk/lib/AST/JSONNodeDumper.cpp Mon Sep 23 17:38:49 2019
> @@ -850,6 +850,12 @@ void JSONNodeDumper::VisitLinkageSpecDec
>    switch (LSD->getLanguage()) {
>    case LinkageSpecDecl::lang_c: Lang = "C"; break;
>    case LinkageSpecDecl::lang_cxx: Lang = "C++"; break;
> +  case LinkageSpecDecl::lang_cxx_11:
> +    Lang = "C++11";
> +    break;
> +  case LinkageSpecDecl::lang_cxx_14:
> +    Lang = "C++14";
> +    break;
>    }
>    JOS.attribute("language", Lang);
>    attributeOnlyIfTrue("hasBraces", LSD->hasBraces());
> 
> Modified: cfe/trunk/lib/AST/TextNodeDumper.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/TextNodeDumper.cpp?rev=372681&r1=372680&r2=372681&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/TextNodeDumper.cpp?rev=372681&r1=372680&r2=372681&view=diff>
> ==============================================================================
> --- cfe/trunk/lib/AST/TextNodeDumper.cpp (original)
> +++ cfe/trunk/lib/AST/TextNodeDumper.cpp Mon Sep 23 17:38:49 2019
> @@ -1766,6 +1766,12 @@ void TextNodeDumper::VisitLinkageSpecDec
>    case LinkageSpecDecl::lang_cxx:
>      OS << " C++";
>      break;
> +  case LinkageSpecDecl::lang_cxx_11:
> +    OS << " C++11";
> +    break;
> +  case LinkageSpecDecl::lang_cxx_14:
> +    OS << " C++14";
> +    break;
>    }
>  }
> 
> 
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=372681&r1=372680&r2=372681&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=372681&r1=372680&r2=372681&view=diff>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Mon Sep 23 17:38:49 2019
> @@ -561,6 +561,10 @@ void CGDebugInfo::CreateCompileUnit() {
>    if (LO.CPlusPlus) {
>      if (LO.ObjC)
>        LangTag = llvm::dwarf::DW_LANG_ObjC_plus_plus;
> +    else if (LO.CPlusPlus14)
> +      LangTag = llvm::dwarf::DW_LANG_C_plus_plus_14;
> +    else if (LO.CPlusPlus11)
> +      LangTag = llvm::dwarf::DW_LANG_C_plus_plus_11;
>      else
>        LangTag = llvm::dwarf::DW_LANG_C_plus_plus;
>    } else if (LO.ObjC) {
> @@ -878,6 +882,8 @@ llvm::DIType *CGDebugInfo::CreateType(co
>  static bool hasCXXMangling(const TagDecl *TD, llvm::DICompileUnit *TheCU) {
>    switch (TheCU->getSourceLanguage()) {
>    case llvm::dwarf::DW_LANG_C_plus_plus:
> +  case llvm::dwarf::DW_LANG_C_plus_plus_11:
> +  case llvm::dwarf::DW_LANG_C_plus_plus_14:
>      return true;
>    case llvm::dwarf::DW_LANG_ObjC_plus_plus:
>      return isa<CXXRecordDecl>(TD) || isa<EnumDecl>(TD);
> 
> Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=372681&r1=372680&r2=372681&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=372681&r1=372680&r2=372681&view=diff>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Mon Sep 23 17:38:49 2019
> @@ -5132,7 +5132,9 @@ void CodeGenModule::EmitObjCIvarInitiali
>  // EmitLinkageSpec - Emit all declarations in a linkage spec.
>  void CodeGenModule::EmitLinkageSpec(const LinkageSpecDecl *LSD) {
>    if (LSD->getLanguage() != LinkageSpecDecl::lang_c &&
> -      LSD->getLanguage() != LinkageSpecDecl::lang_cxx) {
> +      LSD->getLanguage() != LinkageSpecDecl::lang_cxx &&
> +      LSD->getLanguage() != LinkageSpecDecl::lang_cxx_11 &&
> +      LSD->getLanguage() != LinkageSpecDecl::lang_cxx_14) {
>      ErrorUnsupported(LSD, "linkage spec");
>      return;
>    }
> 
> Modified: cfe/trunk/lib/Sema/SemaDeclCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=372681&r1=372680&r2=372681&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclCXX.cpp?rev=372681&r1=372680&r2=372681&view=diff>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDeclCXX.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp Mon Sep 23 17:38:49 2019
> @@ -13982,6 +13982,10 @@ Decl *Sema::ActOnStartLinkageSpecificati
>      Language = LinkageSpecDecl::lang_c;
>    else if (Lang == "C++")
>      Language = LinkageSpecDecl::lang_cxx;
> +  else if (Lang == "C++11")
> +    Language = LinkageSpecDecl::lang_cxx_11;
> +  else if (Lang == "C++14")
> +    Language = LinkageSpecDecl::lang_cxx_14;
>    else {
>      Diag(LangStr->getExprLoc(), diag::err_language_linkage_spec_unknown)
>        << LangStr->getSourceRange();
> 
> Modified: cfe/trunk/lib/Sema/SemaModule.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaModule.cpp?rev=372681&r1=372680&r2=372681&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaModule.cpp?rev=372681&r1=372680&r2=372681&view=diff>
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaModule.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaModule.cpp Mon Sep 23 17:38:49 2019
> @@ -31,6 +31,8 @@ static void checkModuleImportContext(Sem
>          ExternCLoc = LSD->getBeginLoc();
>        break;
>      case LinkageSpecDecl::lang_cxx:
> +    case LinkageSpecDecl::lang_cxx_11:
> +    case LinkageSpecDecl::lang_cxx_14:
>        break;
>      }
>      DC = LSD->getParent();
> 
> Modified: cfe/trunk/test/Modules/ModuleDebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/ModuleDebugInfo.cpp?rev=372681&r1=372680&r2=372681&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/ModuleDebugInfo.cpp?rev=372681&r1=372680&r2=372681&view=diff>
> ==============================================================================
> --- cfe/trunk/test/Modules/ModuleDebugInfo.cpp (original)
> +++ cfe/trunk/test/Modules/ModuleDebugInfo.cpp Mon Sep 23 17:38:49 2019
> @@ -12,7 +12,7 @@
> 
>  // PCH:
>  // RUN: %clang_cc1 -triple %itanium_abi_triple -x c++ -std=c++11  -debugger-tuning=lldb -emit-pch -fmodule-format=obj -I %S/Inputs -o %t.pch %S/Inputs/DebugCXX.h -mllvm -debug-only=pchcontainer &>%t-pch.ll
> -// RUN: cat %t-pch.ll | FileCheck %s
> +// RUN: cat %t-pch.ll | FileCheck --check-prefix=CHECK-CXX %s
>  // RUN: cat %t-pch.ll | FileCheck --check-prefix=CHECK-NEG %s
> 
>  #ifdef MODULES
> @@ -23,6 +23,7 @@
>  // CHECK-MOD: distinct !DICompileUnit(language: DW_LANG_{{.*}}C_plus_plus,
> 
>  // CHECK: distinct !DICompileUnit(language: DW_LANG_{{.*}}C_plus_plus,
> +// CHECK-CXX: distinct !DICompileUnit(language: DW_LANG_C_plus_plus_11,
>  // CHECK-SAME:                    isOptimized: false,
>  // CHECK-NOT:                     splitDebugFilename:
>  // CHECK-SAME:                    dwoId:
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits <https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20191002/23bfead5/attachment-0001.html>


More information about the cfe-commits mailing list