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@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@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits