r280575 - Add plumbing for new attribute type "Microsoft".
Diana Picus via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 7 01:10:37 PDT 2016
Hi Nico,
One of our thumb bots [1] is having issues building lately and it
looks like it might be related to one of the commits in this series.
Could you please have a look?
Thanks,
Diana
[1] http://lab.llvm.org:8011/builders/clang-cmake-thumbv7-a15/builds/15286/steps/build%20stage%201/logs/stdio
On 3 September 2016 at 05:55, Nico Weber via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: nico
> Date: Fri Sep 2 21:55:10 2016
> New Revision: 280575
>
> URL: http://llvm.org/viewvc/llvm-project?rev=280575&view=rev
> Log:
> Add plumbing for new attribute type "Microsoft".
>
> This is for attributes in []-delimited lists preceding a class, like e.g.
> `[uuid("...")] class Foo {};` Not used by anything yet, so no behavior change.
> Part of https://reviews.llvm.org/D23895
>
> Modified:
> cfe/trunk/include/clang/Basic/Attributes.h
> cfe/trunk/include/clang/Sema/AttributeList.h
> cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp
>
> Modified: cfe/trunk/include/clang/Basic/Attributes.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attributes.h?rev=280575&r1=280574&r2=280575&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/Attributes.h (original)
> +++ cfe/trunk/include/clang/Basic/Attributes.h Fri Sep 2 21:55:10 2016
> @@ -22,6 +22,8 @@ enum class AttrSyntax {
> GNU,
> /// Is the identifier known as a __declspec-style attribute?
> Declspec,
> + /// Is the identifier known as a [] Microsoft-style attribute?
> + Microsoft,
> // Is the identifier known as a C++-style attribute?
> CXX,
> // Is the identifier known as a pragma attribute?
>
> Modified: cfe/trunk/include/clang/Sema/AttributeList.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/AttributeList.h?rev=280575&r1=280574&r2=280575&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Sema/AttributeList.h (original)
> +++ cfe/trunk/include/clang/Sema/AttributeList.h Fri Sep 2 21:55:10 2016
> @@ -101,12 +101,14 @@ public:
> AS_CXX11,
> /// __declspec(...)
> AS_Declspec,
> + /// [uuid("...")] class Foo
> + AS_Microsoft,
> /// __ptr16, alignas(...), etc.
> AS_Keyword,
> /// Context-sensitive version of a keyword attribute.
> AS_ContextSensitiveKeyword,
> /// #pragma ...
> - AS_Pragma
> + AS_Pragma,
> };
>
> private:
> @@ -369,6 +371,7 @@ public:
> }
>
> bool isDeclspecAttribute() const { return SyntaxUsed == AS_Declspec; }
> + bool isMicrosoftAttribute() const { return SyntaxUsed == AS_Microsoft; }
> bool isCXX11Attribute() const {
> return SyntaxUsed == AS_CXX11 || isAlignasAttribute();
> }
>
> Modified: cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp?rev=280575&r1=280574&r2=280575&view=diff
> ==============================================================================
> --- cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp (original)
> +++ cfe/trunk/utils/TableGen/ClangAttrEmitter.cpp Fri Sep 2 21:55:10 2016
> @@ -1312,6 +1312,9 @@ writePrettyPrintFunction(Record &R,
> } else if (Variety == "Declspec") {
> Prefix = " __declspec(";
> Suffix = ")";
> + } else if (Variety == "Microsoft") {
> + Prefix = "[";
> + Suffix = "]";
> } else if (Variety == "Keyword") {
> Prefix = " ";
> Suffix = "";
> @@ -2295,7 +2298,7 @@ void EmitClangAttrHasAttrImpl(RecordKeep
> // Separate all of the attributes out into four group: generic, C++11, GNU,
> // and declspecs. Then generate a big switch statement for each of them.
> std::vector<Record *> Attrs = Records.getAllDerivedDefinitions("Attr");
> - std::vector<Record *> Declspec, GNU, Pragma;
> + std::vector<Record *> Declspec, Microsoft, GNU, Pragma;
> std::map<std::string, std::vector<Record *>> CXX;
>
> // Walk over the list of all attributes, and split them out based on the
> @@ -2308,6 +2311,8 @@ void EmitClangAttrHasAttrImpl(RecordKeep
> GNU.push_back(R);
> else if (Variety == "Declspec")
> Declspec.push_back(R);
> + else if (Variety == "Microsoft")
> + Microsoft.push_back(R);
> else if (Variety == "CXX11")
> CXX[SI.nameSpace()].push_back(R);
> else if (Variety == "Pragma")
> @@ -2323,6 +2328,9 @@ void EmitClangAttrHasAttrImpl(RecordKeep
> OS << "case AttrSyntax::Declspec:\n";
> OS << " return llvm::StringSwitch<int>(Name)\n";
> GenerateHasAttrSpellingStringSwitch(Declspec, OS, "Declspec");
> + OS << "case AttrSyntax::Microsoft:\n";
> + OS << " return llvm::StringSwitch<int>(Name)\n";
> + GenerateHasAttrSpellingStringSwitch(Microsoft, OS, "Microsoft");
> OS << "case AttrSyntax::Pragma:\n";
> OS << " return llvm::StringSwitch<int>(Name)\n";
> GenerateHasAttrSpellingStringSwitch(Pragma, OS, "Pragma");
> @@ -2361,8 +2369,9 @@ void EmitClangAttrSpellingListIndex(Reco
> .Case("GNU", 0)
> .Case("CXX11", 1)
> .Case("Declspec", 2)
> - .Case("Keyword", 3)
> - .Case("Pragma", 4)
> + .Case("Microsoft", 3)
> + .Case("Keyword", 4)
> + .Case("Pragma", 5)
> .Default(0)
> << " && Scope == \"" << Spellings[I].nameSpace() << "\")\n"
> << " return " << I << ";\n";
> @@ -2984,7 +2993,8 @@ void EmitClangAttrParsedAttrKinds(Record
> emitSourceFileHeader("Attribute name matcher", OS);
>
> std::vector<Record *> Attrs = Records.getAllDerivedDefinitions("Attr");
> - std::vector<StringMatcher::StringPair> GNU, Declspec, CXX11, Keywords, Pragma;
> + std::vector<StringMatcher::StringPair> GNU, Declspec, Microsoft, CXX11,
> + Keywords, Pragma;
> std::set<std::string> Seen;
> for (const auto *A : Attrs) {
> const Record &Attr = *A;
> @@ -3026,6 +3036,8 @@ void EmitClangAttrParsedAttrKinds(Record
> Matches = &GNU;
> else if (Variety == "Declspec")
> Matches = &Declspec;
> + else if (Variety == "Microsoft")
> + Matches = &Microsoft;
> else if (Variety == "Keyword")
> Matches = &Keywords;
> else if (Variety == "Pragma")
> @@ -3050,6 +3062,8 @@ void EmitClangAttrParsedAttrKinds(Record
> StringMatcher("Name", GNU, OS).Emit();
> OS << " } else if (AttributeList::AS_Declspec == Syntax) {\n";
> StringMatcher("Name", Declspec, OS).Emit();
> + OS << " } else if (AttributeList::AS_Microsoft == Syntax) {\n";
> + StringMatcher("Name", Microsoft, OS).Emit();
> OS << " } else if (AttributeList::AS_CXX11 == Syntax) {\n";
> StringMatcher("Name", CXX11, OS).Emit();
> OS << " } else if (AttributeList::AS_Keyword == Syntax || ";
> @@ -3133,8 +3147,9 @@ enum SpellingKind {
> GNU = 1 << 0,
> CXX11 = 1 << 1,
> Declspec = 1 << 2,
> - Keyword = 1 << 3,
> - Pragma = 1 << 4
> + Microsoft = 1 << 3,
> + Keyword = 1 << 4,
> + Pragma = 1 << 5
> };
>
> static void WriteDocumentation(const DocumentationData &Doc,
> @@ -3182,6 +3197,7 @@ static void WriteDocumentation(const Doc
> .Case("GNU", GNU)
> .Case("CXX11", CXX11)
> .Case("Declspec", Declspec)
> + .Case("Microsoft", Microsoft)
> .Case("Keyword", Keyword)
> .Case("Pragma", Pragma);
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list