Author: erichkeane Date: Mon Sep 16 06:58:59 2019 New Revision: 371985 URL: http://llvm.org/viewvc/llvm-project?rev=371985&view=rev Log: Move some definitions from Sema to Basic to fix shared libs build
r371875 moved some functionality around to a Basic header file, but didn't move its definitions as well. This patch moves some things around so that shared library building can work. Modified: cfe/trunk/lib/Basic/Attributes.cpp cfe/trunk/lib/Sema/ParsedAttr.cpp cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp Modified: cfe/trunk/lib/Basic/Attributes.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Attributes.cpp?rev=371985&r1=371984&r2=371985&view=diff ============================================================================== --- cfe/trunk/lib/Basic/Attributes.cpp (original) +++ cfe/trunk/lib/Basic/Attributes.cpp Mon Sep 16 06:58:59 2019 @@ -1,5 +1,6 @@ #include "clang/Basic/Attributes.h" #include "clang/Basic/AttrSubjectMatchRules.h" +#include "clang/Basic/AttributeCommonInfo.h" #include "clang/Basic/IdentifierTable.h" #include "llvm/ADT/StringSwitch.h" using namespace clang; @@ -21,7 +22,7 @@ int clang::hasAttribute(AttrSyntax Synta #include "clang/Basic/AttrHasAttributeImpl.inc" - return 0; + return 0; } const char *attr::getSubjectMatchRuleSpelling(attr::SubjectMatchRule Rule) { @@ -33,3 +34,75 @@ const char *attr::getSubjectMatchRuleSpe } llvm_unreachable("Invalid subject match rule"); } + +static StringRef +normalizeAttrScopeName(StringRef ScopeName, + AttributeCommonInfo::Syntax SyntaxUsed) { + // Normalize the "__gnu__" scope name to be "gnu" and the "_Clang" scope name + // to be "clang". + if (SyntaxUsed == AttributeCommonInfo::AS_CXX11 || + SyntaxUsed == AttributeCommonInfo::AS_C2x) { + if (ScopeName == "__gnu__") + ScopeName = "gnu"; + else if (ScopeName == "_Clang") + ScopeName = "clang"; + } + return ScopeName; +} + +static StringRef normalizeAttrName(StringRef AttrName, + StringRef NormalizedScopeName, + AttributeCommonInfo::Syntax SyntaxUsed) { + // Normalize the attribute name, __foo__ becomes foo. This is only allowable + // for GNU attributes, and attributes using the double square bracket syntax. + bool ShouldNormalize = + SyntaxUsed == AttributeCommonInfo::AS_GNU || + ((SyntaxUsed == AttributeCommonInfo::AS_CXX11 || + SyntaxUsed == AttributeCommonInfo::AS_C2x) && + (NormalizedScopeName.empty() || NormalizedScopeName == "gnu" || + NormalizedScopeName == "clang")); + if (ShouldNormalize && AttrName.size() >= 4 && AttrName.startswith("__") && + AttrName.endswith("__")) + AttrName = AttrName.slice(2, AttrName.size() - 2); + + return AttrName; +} + +bool AttributeCommonInfo::isGNUScope() const { + return ScopeName && (ScopeName->isStr("gnu") || ScopeName->isStr("__gnu__")); +} + +#include "clang/Sema/AttrParsedAttrKinds.inc" + +AttributeCommonInfo::Kind +AttributeCommonInfo::getParsedKind(const IdentifierInfo *Name, + const IdentifierInfo *ScopeName, + Syntax SyntaxUsed) { + StringRef AttrName = Name->getName(); + + SmallString<64> FullName; + if (ScopeName) + FullName += normalizeAttrScopeName(ScopeName->getName(), SyntaxUsed); + + AttrName = normalizeAttrName(AttrName, FullName, SyntaxUsed); + + // Ensure that in the case of C++11 attributes, we look for '::foo' if it is + // unscoped. + if (ScopeName || SyntaxUsed == AS_CXX11 || SyntaxUsed == AS_C2x) + FullName += "::"; + FullName += AttrName; + + return ::getAttrKind(FullName, SyntaxUsed); +} + +unsigned AttributeCommonInfo::calculateAttributeSpellingListIndex() const { + // Both variables will be used in tablegen generated + // attribute spell list index matching code. + auto Syntax = static_cast<AttributeCommonInfo::Syntax>(getSyntax()); + StringRef Scope = + getScopeName() ? normalizeAttrScopeName(getScopeName()->getName(), Syntax) + : ""; + StringRef Name = normalizeAttrName(getAttrName()->getName(), Scope, Syntax); + +#include "clang/Sema/AttrSpellingListIndex.inc" +} Modified: cfe/trunk/lib/Sema/ParsedAttr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/ParsedAttr.cpp?rev=371985&r1=371984&r2=371985&view=diff ============================================================================== --- cfe/trunk/lib/Sema/ParsedAttr.cpp (original) +++ cfe/trunk/lib/Sema/ParsedAttr.cpp Mon Sep 16 06:58:59 2019 @@ -100,76 +100,6 @@ void AttributePool::takePool(AttributePo pool.Attrs.clear(); } -#include "clang/Sema/AttrParsedAttrKinds.inc" - -static StringRef normalizeAttrScopeName(StringRef ScopeName, - ParsedAttr::Syntax SyntaxUsed) { - // Normalize the "__gnu__" scope name to be "gnu" and the "_Clang" scope name - // to be "clang". - if (SyntaxUsed == ParsedAttr::AS_CXX11 || - SyntaxUsed == ParsedAttr::AS_C2x) { - if (ScopeName == "__gnu__") - ScopeName = "gnu"; - else if (ScopeName == "_Clang") - ScopeName = "clang"; - } - return ScopeName; -} - -static StringRef normalizeAttrName(StringRef AttrName, - StringRef NormalizedScopeName, - ParsedAttr::Syntax SyntaxUsed) { - // Normalize the attribute name, __foo__ becomes foo. This is only allowable - // for GNU attributes, and attributes using the double square bracket syntax. - bool ShouldNormalize = - SyntaxUsed == ParsedAttr::AS_GNU || - ((SyntaxUsed == ParsedAttr::AS_CXX11 || - SyntaxUsed == ParsedAttr::AS_C2x) && - (NormalizedScopeName.empty() || NormalizedScopeName == "gnu" || - NormalizedScopeName == "clang")); - if (ShouldNormalize && AttrName.size() >= 4 && AttrName.startswith("__") && - AttrName.endswith("__")) - AttrName = AttrName.slice(2, AttrName.size() - 2); - - return AttrName; -} - -bool AttributeCommonInfo::isGNUScope() const { - return ScopeName && (ScopeName->isStr("gnu") || ScopeName->isStr("__gnu__")); -} -AttributeCommonInfo::Kind -AttributeCommonInfo::getParsedKind(const IdentifierInfo *Name, - const IdentifierInfo *ScopeName, - Syntax SyntaxUsed) { - StringRef AttrName = Name->getName(); - - SmallString<64> FullName; - if (ScopeName) - FullName += normalizeAttrScopeName(ScopeName->getName(), SyntaxUsed); - - AttrName = normalizeAttrName(AttrName, FullName, SyntaxUsed); - - // Ensure that in the case of C++11 attributes, we look for '::foo' if it is - // unscoped. - if (ScopeName || SyntaxUsed == AS_CXX11 || SyntaxUsed == AS_C2x) - FullName += "::"; - FullName += AttrName; - - return ::getAttrKind(FullName, SyntaxUsed); -} - -unsigned AttributeCommonInfo::calculateAttributeSpellingListIndex() const { - // Both variables will be used in tablegen generated - // attribute spell list index matching code. - auto Syntax = static_cast<ParsedAttr::Syntax>(getSyntax()); - StringRef Scope = - getScopeName() ? normalizeAttrScopeName(getScopeName()->getName(), Syntax) - : ""; - StringRef Name = normalizeAttrName(getAttrName()->getName(), Scope, Syntax); - -#include "clang/Sema/AttrSpellingListIndex.inc" -} - struct ParsedAttrInfo { unsigned NumArgs : 4; unsigned OptArgs : 4; Modified: cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp?rev=371985&r1=371984&r2=371985&view=diff ============================================================================== --- cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp (original) +++ cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp Mon Sep 16 06:58:59 2019 @@ -3725,10 +3725,10 @@ void EmitClangAttrParsedAttrKinds(Record // specific attribute, or MSP430-specific attribute. Additionally, an // attribute can be spelled GNU<"dllexport"> and Declspec<"dllexport"> // for the same semantic attribute. Ultimately, we need to map each of - // these to a single ParsedAttr::Kind value, but the StringMatcher - // class cannot handle duplicate match strings. So we generate a list of - // string to match based on the syntax, and emit multiple string matchers - // depending on the syntax used. + // these to a single AttributeCommonInfo::Kind value, but the + // StringMatcher class cannot handle duplicate match strings. So we + // generate a list of string to match based on the syntax, and emit + // multiple string matchers depending on the syntax used. std::string AttrName; if (Attr.isSubClassOf("TargetSpecificAttr") && !Attr.isValueUnset("ParseKind")) { @@ -3773,33 +3773,33 @@ void EmitClangAttrParsedAttrKinds(Record if (SemaHandler) Matches->push_back(StringMatcher::StringPair( - Spelling, "return ParsedAttr::AT_" + AttrName + ";")); + Spelling, "return AttributeCommonInfo::AT_" + AttrName + ";")); else Matches->push_back(StringMatcher::StringPair( - Spelling, "return ParsedAttr::IgnoredAttribute;")); + Spelling, "return AttributeCommonInfo::IgnoredAttribute;")); } } } - OS << "static ParsedAttr::Kind getAttrKind(StringRef Name, "; - OS << "ParsedAttr::Syntax Syntax) {\n"; - OS << " if (ParsedAttr::AS_GNU == Syntax) {\n"; + OS << "static AttributeCommonInfo::Kind getAttrKind(StringRef Name, "; + OS << "AttributeCommonInfo::Syntax Syntax) {\n"; + OS << " if (AttributeCommonInfo::AS_GNU == Syntax) {\n"; StringMatcher("Name", GNU, OS).Emit(); - OS << " } else if (ParsedAttr::AS_Declspec == Syntax) {\n"; + OS << " } else if (AttributeCommonInfo::AS_Declspec == Syntax) {\n"; StringMatcher("Name", Declspec, OS).Emit(); - OS << " } else if (ParsedAttr::AS_Microsoft == Syntax) {\n"; + OS << " } else if (AttributeCommonInfo::AS_Microsoft == Syntax) {\n"; StringMatcher("Name", Microsoft, OS).Emit(); - OS << " } else if (ParsedAttr::AS_CXX11 == Syntax) {\n"; + OS << " } else if (AttributeCommonInfo::AS_CXX11 == Syntax) {\n"; StringMatcher("Name", CXX11, OS).Emit(); - OS << " } else if (ParsedAttr::AS_C2x == Syntax) {\n"; + OS << " } else if (AttributeCommonInfo::AS_C2x == Syntax) {\n"; StringMatcher("Name", C2x, OS).Emit(); - OS << " } else if (ParsedAttr::AS_Keyword == Syntax || "; - OS << "ParsedAttr::AS_ContextSensitiveKeyword == Syntax) {\n"; + OS << " } else if (AttributeCommonInfo::AS_Keyword == Syntax || "; + OS << "AttributeCommonInfo::AS_ContextSensitiveKeyword == Syntax) {\n"; StringMatcher("Name", Keywords, OS).Emit(); - OS << " } else if (ParsedAttr::AS_Pragma == Syntax) {\n"; + OS << " } else if (AttributeCommonInfo::AS_Pragma == Syntax) {\n"; StringMatcher("Name", Pragma, OS).Emit(); OS << " }\n"; - OS << " return ParsedAttr::UnknownAttribute;\n" + OS << " return AttributeCommonInfo::UnknownAttribute;\n" << "}\n"; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits