Skip to content

Commit c63f1b1

Browse files
committed
[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
1 parent 7b957dd commit c63f1b1

File tree

8 files changed

+7
-44
lines changed

8 files changed

+7
-44
lines changed

clang-tools-extra/modularize/Modularize.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -585,8 +585,6 @@ class CollectEntitiesVisitor
585585
LinkageLabel = "extern \"C\" {}";
586586
break;
587587
case LinkageSpecDecl::lang_cxx:
588-
case LinkageSpecDecl::lang_cxx_11:
589-
case LinkageSpecDecl::lang_cxx_14:
590588
LinkageLabel = "extern \"C++\" {}";
591589
break;
592590
}

clang/include/clang/AST/DeclCXX.h

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
#include "llvm/ADT/PointerUnion.h"
4343
#include "llvm/ADT/STLExtras.h"
4444
#include "llvm/ADT/iterator_range.h"
45-
#include "llvm/BinaryFormat/Dwarf.h"
4645
#include "llvm/Support/Casting.h"
4746
#include "llvm/Support/Compiler.h"
4847
#include "llvm/Support/PointerLikeTypeTraits.h"
@@ -2758,15 +2757,8 @@ class LinkageSpecDecl : public Decl, public DeclContext {
27582757
/// Represents the language in a linkage specification.
27592758
///
27602759
/// The values are part of the serialization ABI for
2761-
/// ASTs and cannot be changed without altering that ABI. To help
2762-
/// ensure a stable ABI for this, we choose the DW_LANG_ encodings
2763-
/// from the dwarf standard.
2764-
enum LanguageIDs {
2765-
lang_c = llvm::dwarf::DW_LANG_C,
2766-
lang_cxx = llvm::dwarf::DW_LANG_C_plus_plus,
2767-
lang_cxx_11 = llvm::dwarf::DW_LANG_C_plus_plus_11,
2768-
lang_cxx_14 = llvm::dwarf::DW_LANG_C_plus_plus_14
2769-
};
2760+
/// ASTs and cannot be changed without altering that ABI.
2761+
enum LanguageIDs { lang_c = 1, lang_cxx = 2 };
27702762

27712763
private:
27722764
/// The source location for the extern keyword.

clang/lib/AST/DeclPrinter.cpp

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,19 +1011,12 @@ void DeclPrinter::VisitCXXRecordDecl(CXXRecordDecl *D) {
10111011

10121012
void DeclPrinter::VisitLinkageSpecDecl(LinkageSpecDecl *D) {
10131013
const char *l;
1014-
switch (D->getLanguage()) {
1015-
case LinkageSpecDecl::lang_c:
1014+
if (D->getLanguage() == LinkageSpecDecl::lang_c)
10161015
l = "C";
1017-
break;
1018-
case LinkageSpecDecl::lang_cxx_14:
1019-
l = "C++14";
1020-
break;
1021-
case LinkageSpecDecl::lang_cxx_11:
1022-
l = "C++11";
1023-
break;
1024-
case LinkageSpecDecl::lang_cxx:
1016+
else {
1017+
assert(D->getLanguage() == LinkageSpecDecl::lang_cxx &&
1018+
"unknown language in linkage specification");
10251019
l = "C++";
1026-
break;
10271020
}
10281021

10291022
Out << "extern \"" << l << "\" ";

clang/lib/AST/JSONNodeDumper.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -878,12 +878,6 @@ void JSONNodeDumper::VisitLinkageSpecDecl(const LinkageSpecDecl *LSD) {
878878
switch (LSD->getLanguage()) {
879879
case LinkageSpecDecl::lang_c: Lang = "C"; break;
880880
case LinkageSpecDecl::lang_cxx: Lang = "C++"; break;
881-
case LinkageSpecDecl::lang_cxx_11:
882-
Lang = "C++11";
883-
break;
884-
case LinkageSpecDecl::lang_cxx_14:
885-
Lang = "C++14";
886-
break;
887881
}
888882
JOS.attribute("language", Lang);
889883
attributeOnlyIfTrue("hasBraces", LSD->hasBraces());

clang/lib/AST/TextNodeDumper.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1769,12 +1769,6 @@ void TextNodeDumper::VisitLinkageSpecDecl(const LinkageSpecDecl *D) {
17691769
case LinkageSpecDecl::lang_cxx:
17701770
OS << " C++";
17711771
break;
1772-
case LinkageSpecDecl::lang_cxx_11:
1773-
OS << " C++11";
1774-
break;
1775-
case LinkageSpecDecl::lang_cxx_14:
1776-
OS << " C++14";
1777-
break;
17781772
}
17791773
}
17801774

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5192,9 +5192,7 @@ void CodeGenModule::EmitObjCIvarInitializations(ObjCImplementationDecl *D) {
51925192
// EmitLinkageSpec - Emit all declarations in a linkage spec.
51935193
void CodeGenModule::EmitLinkageSpec(const LinkageSpecDecl *LSD) {
51945194
if (LSD->getLanguage() != LinkageSpecDecl::lang_c &&
5195-
LSD->getLanguage() != LinkageSpecDecl::lang_cxx &&
5196-
LSD->getLanguage() != LinkageSpecDecl::lang_cxx_11 &&
5197-
LSD->getLanguage() != LinkageSpecDecl::lang_cxx_14) {
5195+
LSD->getLanguage() != LinkageSpecDecl::lang_cxx) {
51985196
ErrorUnsupported(LSD, "linkage spec");
51995197
return;
52005198
}

clang/lib/Sema/SemaDeclCXX.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14205,10 +14205,6 @@ Decl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc,
1420514205
Language = LinkageSpecDecl::lang_c;
1420614206
else if (Lang == "C++")
1420714207
Language = LinkageSpecDecl::lang_cxx;
14208-
else if (Lang == "C++11")
14209-
Language = LinkageSpecDecl::lang_cxx_11;
14210-
else if (Lang == "C++14")
14211-
Language = LinkageSpecDecl::lang_cxx_14;
1421214208
else {
1421314209
Diag(LangStr->getExprLoc(), diag::err_language_linkage_spec_unknown)
1421414210
<< LangStr->getSourceRange();

clang/lib/Sema/SemaModule.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ static void checkModuleImportContext(Sema &S, Module *M,
3131
ExternCLoc = LSD->getBeginLoc();
3232
break;
3333
case LinkageSpecDecl::lang_cxx:
34-
case LinkageSpecDecl::lang_cxx_11:
35-
case LinkageSpecDecl::lang_cxx_14:
3634
break;
3735
}
3836
DC = LSD->getParent();

0 commit comments

Comments
 (0)