[clang-tools-extra] c63f1b1 - [DeclCXX] Remove unknown external linkage specifications
Ehud Katz via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 21 05:24:56 PST 2019
Author: Ehud Katz
Date: 2019-11-21T15:23:05+02:00
New Revision: c63f1b160eb68cfac30113f259abae508d8be798
URL: https://github.com/llvm/llvm-project/commit/c63f1b160eb68cfac30113f259abae508d8be798
DIFF: https://github.com/llvm/llvm-project/commit/c63f1b160eb68cfac30113f259abae508d8be798.diff
LOG: [DeclCXX] Remove unknown external linkage specifications
Partial revert of r372681 "Support for DWARF-5 C++ language tags".
The change introduced new external linkage languages ("C++11" and
"C++14") which not supported in C++.
It also changed the definition of the existing enum to use the DWARF
constants. The problem is that "LinkageSpecDeclBits.Language" (the field
that reserves this enum) is actually defined as 3 bits length
(bitfield), which cannot contain the new DWARF constants. Defining the
enum as integer literals is more appropriate for maintaining valid
values.
Differential Revision: https://reviews.llvm.org/D69935
Added:
Modified:
clang-tools-extra/modularize/Modularize.cpp
clang/include/clang/AST/DeclCXX.h
clang/lib/AST/DeclPrinter.cpp
clang/lib/AST/JSONNodeDumper.cpp
clang/lib/AST/TextNodeDumper.cpp
clang/lib/CodeGen/CodeGenModule.cpp
clang/lib/Sema/SemaDeclCXX.cpp
clang/lib/Sema/SemaModule.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/modularize/Modularize.cpp b/clang-tools-extra/modularize/Modularize.cpp
index 8d48324700e2..1905fdf4e2aa 100644
--- a/clang-tools-extra/modularize/Modularize.cpp
+++ b/clang-tools-extra/modularize/Modularize.cpp
@@ -585,8 +585,6 @@ class CollectEntitiesVisitor
LinkageLabel = "extern \"C\" {}";
break;
case LinkageSpecDecl::lang_cxx:
- case LinkageSpecDecl::lang_cxx_11:
- case LinkageSpecDecl::lang_cxx_14:
LinkageLabel = "extern \"C++\" {}";
break;
}
diff --git a/clang/include/clang/AST/DeclCXX.h b/clang/include/clang/AST/DeclCXX.h
index 19a62acd9051..ce9f0467735d 100644
--- a/clang/include/clang/AST/DeclCXX.h
+++ b/clang/include/clang/AST/DeclCXX.h
@@ -42,7 +42,6 @@
#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"
@@ -2758,15 +2757,8 @@ class LinkageSpecDecl : public Decl, public DeclContext {
/// Represents the language in a linkage specification.
///
/// The values are part of the serialization ABI for
- /// ASTs and cannot be changed without altering that ABI. To help
- /// ensure a stable ABI for this, we choose the DW_LANG_ encodings
- /// from the dwarf standard.
- enum LanguageIDs {
- 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
- };
+ /// ASTs and cannot be changed without altering that ABI.
+ enum LanguageIDs { lang_c = 1, lang_cxx = 2 };
private:
/// The source location for the extern keyword.
diff --git a/clang/lib/AST/DeclPrinter.cpp b/clang/lib/AST/DeclPrinter.cpp
index e59792710e75..6b17dd4dde75 100644
--- a/clang/lib/AST/DeclPrinter.cpp
+++ b/clang/lib/AST/DeclPrinter.cpp
@@ -1011,19 +1011,12 @@ void DeclPrinter::VisitCXXRecordDecl(CXXRecordDecl *D) {
void DeclPrinter::VisitLinkageSpecDecl(LinkageSpecDecl *D) {
const char *l;
- switch (D->getLanguage()) {
- case LinkageSpecDecl::lang_c:
+ if (D->getLanguage() == LinkageSpecDecl::lang_c)
l = "C";
- break;
- case LinkageSpecDecl::lang_cxx_14:
- l = "C++14";
- break;
- case LinkageSpecDecl::lang_cxx_11:
- l = "C++11";
- break;
- case LinkageSpecDecl::lang_cxx:
+ else {
+ assert(D->getLanguage() == LinkageSpecDecl::lang_cxx &&
+ "unknown language in linkage specification");
l = "C++";
- break;
}
Out << "extern \"" << l << "\" ";
diff --git a/clang/lib/AST/JSONNodeDumper.cpp b/clang/lib/AST/JSONNodeDumper.cpp
index 6d5912e5a07c..274cc25b8bb8 100644
--- a/clang/lib/AST/JSONNodeDumper.cpp
+++ b/clang/lib/AST/JSONNodeDumper.cpp
@@ -878,12 +878,6 @@ void JSONNodeDumper::VisitLinkageSpecDecl(const LinkageSpecDecl *LSD) {
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());
diff --git a/clang/lib/AST/TextNodeDumper.cpp b/clang/lib/AST/TextNodeDumper.cpp
index 987910da24a9..0ff95213118f 100644
--- a/clang/lib/AST/TextNodeDumper.cpp
+++ b/clang/lib/AST/TextNodeDumper.cpp
@@ -1769,12 +1769,6 @@ void TextNodeDumper::VisitLinkageSpecDecl(const LinkageSpecDecl *D) {
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;
}
}
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 768361d548db..0e561693f20c 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -5192,9 +5192,7 @@ void CodeGenModule::EmitObjCIvarInitializations(ObjCImplementationDecl *D) {
// 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_11 &&
- LSD->getLanguage() != LinkageSpecDecl::lang_cxx_14) {
+ LSD->getLanguage() != LinkageSpecDecl::lang_cxx) {
ErrorUnsupported(LSD, "linkage spec");
return;
}
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index e3f57e347268..14989cd9b424 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -14205,10 +14205,6 @@ Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
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();
diff --git a/clang/lib/Sema/SemaModule.cpp b/clang/lib/Sema/SemaModule.cpp
index 1fca351bfb09..10de0ca91221 100644
--- a/clang/lib/Sema/SemaModule.cpp
+++ b/clang/lib/Sema/SemaModule.cpp
@@ -31,8 +31,6 @@ static void checkModuleImportContext(Sema &S, Module *M,
ExternCLoc = LSD->getBeginLoc();
break;
case LinkageSpecDecl::lang_cxx:
- case LinkageSpecDecl::lang_cxx_11:
- case LinkageSpecDecl::lang_cxx_14:
break;
}
DC = LSD->getParent();
More information about the cfe-commits
mailing list