r280575 - Add plumbing for new attribute type "Microsoft".

Diana Picus via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 7 03:08:02 PDT 2016


Scratch that, apparently it fixed itself after I removed the build
directory and restarted the bot.
Sorry about the noise.

Diana

On 7 September 2016 at 11:10, Diana Picus <diana.picus at linaro.org> wrote:
> 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