mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-02 15:16:03 +00:00
[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
This commit is contained in:
parent
7b957ddc98
commit
c63f1b160e
@ -585,8 +585,6 @@ public:
|
||||
LinkageLabel = "extern \"C\" {}";
|
||||
break;
|
||||
case LinkageSpecDecl::lang_cxx:
|
||||
case LinkageSpecDecl::lang_cxx_11:
|
||||
case LinkageSpecDecl::lang_cxx_14:
|
||||
LinkageLabel = "extern \"C++\" {}";
|
||||
break;
|
||||
}
|
||||
|
@ -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 @@ public:
|
||||
/// 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.
|
||||
|
@ -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 << "\" ";
|
||||
|
@ -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());
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user