r372681 - Support for DWARF-5 C++ language tags.
David Blaikie via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 1 18:40:21 PDT 2019
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)
On Mon, Sep 23, 2019 at 5:36 PM Adrian Prantl via cfe-commits <
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
> 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
>
> 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
>
> ==============================================================================
> --- 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
>
> ==============================================================================
> --- 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
>
> ==============================================================================
> --- 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
>
> ==============================================================================
> --- 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
>
> ==============================================================================
> --- 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
>
> ==============================================================================
> --- 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
>
> ==============================================================================
> --- 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
>
> ==============================================================================
> --- 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
>
> ==============================================================================
> --- 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
> 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/20191001/7074b589/attachment.html>
More information about the cfe-commits
mailing list