[PATCH] D36473: Fix broken getAttributeSpellingListIndex for pragma attributes
This revision was automatically updated to reflect the committed changes. Closed by commit rL310483: Fix broken getAttributeSpellingListIndex for pragma attributes (authored by erichkeane). Changed prior to commit: https://reviews.llvm.org/D36473?vs=110217&id=110404#toc Repository: rL LLVM https://reviews.llvm.org/D36473 Files: cfe/trunk/include/clang/Sema/AttributeList.h cfe/trunk/lib/Sema/SemaStmtAttr.cpp Index: cfe/trunk/include/clang/Sema/AttributeList.h === --- cfe/trunk/include/clang/Sema/AttributeList.h +++ cfe/trunk/include/clang/Sema/AttributeList.h @@ -106,10 +106,12 @@ AS_Microsoft, /// __ptr16, alignas(...), etc. AS_Keyword, -/// Context-sensitive version of a keyword attribute. -AS_ContextSensitiveKeyword, /// #pragma ... AS_Pragma, +// Note TableGen depends on the order above. Do not add or change the order +// without adding related code to TableGen/ClangAttrEmitter.cpp. +/// Context-sensitive version of a keyword attribute. +AS_ContextSensitiveKeyword, }; private: Index: cfe/trunk/lib/Sema/SemaStmtAttr.cpp === --- cfe/trunk/lib/Sema/SemaStmtAttr.cpp +++ cfe/trunk/lib/Sema/SemaStmtAttr.cpp @@ -100,16 +100,15 @@ return nullptr; } - LoopHintAttr::Spelling Spelling; + LoopHintAttr::Spelling Spelling = + LoopHintAttr::Spelling(A.getAttributeSpellingListIndex()); LoopHintAttr::OptionType Option; LoopHintAttr::LoopHintState State; if (PragmaNoUnroll) { // #pragma nounroll -Spelling = LoopHintAttr::Pragma_nounroll; Option = LoopHintAttr::Unroll; State = LoopHintAttr::Disable; } else if (PragmaUnroll) { -Spelling = LoopHintAttr::Pragma_unroll; if (ValueExpr) { // #pragma unroll N Option = LoopHintAttr::UnrollCount; @@ -121,7 +120,6 @@ } } else { // #pragma clang loop ... -Spelling = LoopHintAttr::Pragma_clang_loop; assert(OptionLoc && OptionLoc->Ident && "Attribute must have valid option info."); Option = llvm::StringSwitch( Index: cfe/trunk/include/clang/Sema/AttributeList.h === --- cfe/trunk/include/clang/Sema/AttributeList.h +++ cfe/trunk/include/clang/Sema/AttributeList.h @@ -106,10 +106,12 @@ AS_Microsoft, /// __ptr16, alignas(...), etc. AS_Keyword, -/// Context-sensitive version of a keyword attribute. -AS_ContextSensitiveKeyword, /// #pragma ... AS_Pragma, +// Note TableGen depends on the order above. Do not add or change the order +// without adding related code to TableGen/ClangAttrEmitter.cpp. +/// Context-sensitive version of a keyword attribute. +AS_ContextSensitiveKeyword, }; private: Index: cfe/trunk/lib/Sema/SemaStmtAttr.cpp === --- cfe/trunk/lib/Sema/SemaStmtAttr.cpp +++ cfe/trunk/lib/Sema/SemaStmtAttr.cpp @@ -100,16 +100,15 @@ return nullptr; } - LoopHintAttr::Spelling Spelling; + LoopHintAttr::Spelling Spelling = + LoopHintAttr::Spelling(A.getAttributeSpellingListIndex()); LoopHintAttr::OptionType Option; LoopHintAttr::LoopHintState State; if (PragmaNoUnroll) { // #pragma nounroll -Spelling = LoopHintAttr::Pragma_nounroll; Option = LoopHintAttr::Unroll; State = LoopHintAttr::Disable; } else if (PragmaUnroll) { -Spelling = LoopHintAttr::Pragma_unroll; if (ValueExpr) { // #pragma unroll N Option = LoopHintAttr::UnrollCount; @@ -121,7 +120,6 @@ } } else { // #pragma clang loop ... -Spelling = LoopHintAttr::Pragma_clang_loop; assert(OptionLoc && OptionLoc->Ident && "Attribute must have valid option info."); Option = llvm::StringSwitch( ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D36473: Fix broken getAttributeSpellingListIndex for pragma attributes
aaron.ballman accepted this revision. aaron.ballman added a comment. This revision is now accepted and ready to land. LGTM, good catch! https://reviews.llvm.org/D36473 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D36473: Fix broken getAttributeSpellingListIndex for pragma attributes
mikerice created this revision. We noticed when implementing a new pragma that the TableGen-generated function getAttributeSpellingListIndex() did not work for pragma attributes. It relies on the values in the enum AttributeList::Syntax and a new value AS_ContextSensitiveKeyword was added changing the value for AS_Pragma. Apparently no tests failed since no pragmas currently make use of the generated function. To fix this we can move AS_Pragma back to the value that TableGen code expects. Also to prevent changes in the enum from breaking that routine again I added calls to getAttributeSpellingListIndex() in the unroll pragma code. That will cause some lit test failures if the order is changed. I added a comment to remind of this issue in the future. This assumes we don’t need/want full TableGen support for AS_ContextSensitiveKeyword. It currently only appears in getAttrKind and no other TableGen-generated routines. https://reviews.llvm.org/D36473 Files: include/clang/Sema/AttributeList.h lib/Sema/SemaStmtAttr.cpp Index: lib/Sema/SemaStmtAttr.cpp === --- lib/Sema/SemaStmtAttr.cpp +++ lib/Sema/SemaStmtAttr.cpp @@ -100,16 +100,15 @@ return nullptr; } - LoopHintAttr::Spelling Spelling; + LoopHintAttr::Spelling Spelling = + LoopHintAttr::Spelling(A.getAttributeSpellingListIndex()); LoopHintAttr::OptionType Option; LoopHintAttr::LoopHintState State; if (PragmaNoUnroll) { // #pragma nounroll -Spelling = LoopHintAttr::Pragma_nounroll; Option = LoopHintAttr::Unroll; State = LoopHintAttr::Disable; } else if (PragmaUnroll) { -Spelling = LoopHintAttr::Pragma_unroll; if (ValueExpr) { // #pragma unroll N Option = LoopHintAttr::UnrollCount; @@ -121,7 +120,6 @@ } } else { // #pragma clang loop ... -Spelling = LoopHintAttr::Pragma_clang_loop; assert(OptionLoc && OptionLoc->Ident && "Attribute must have valid option info."); Option = llvm::StringSwitch( Index: include/clang/Sema/AttributeList.h === --- include/clang/Sema/AttributeList.h +++ include/clang/Sema/AttributeList.h @@ -106,10 +106,12 @@ AS_Microsoft, /// __ptr16, alignas(...), etc. AS_Keyword, -/// Context-sensitive version of a keyword attribute. -AS_ContextSensitiveKeyword, /// #pragma ... AS_Pragma, +// Note TableGen depends on the order above. Do not add or change the order +// without adding related code to TableGen/ClangAttrEmitter.cpp. +/// Context-sensitive version of a keyword attribute. +AS_ContextSensitiveKeyword, }; private: Index: lib/Sema/SemaStmtAttr.cpp === --- lib/Sema/SemaStmtAttr.cpp +++ lib/Sema/SemaStmtAttr.cpp @@ -100,16 +100,15 @@ return nullptr; } - LoopHintAttr::Spelling Spelling; + LoopHintAttr::Spelling Spelling = + LoopHintAttr::Spelling(A.getAttributeSpellingListIndex()); LoopHintAttr::OptionType Option; LoopHintAttr::LoopHintState State; if (PragmaNoUnroll) { // #pragma nounroll -Spelling = LoopHintAttr::Pragma_nounroll; Option = LoopHintAttr::Unroll; State = LoopHintAttr::Disable; } else if (PragmaUnroll) { -Spelling = LoopHintAttr::Pragma_unroll; if (ValueExpr) { // #pragma unroll N Option = LoopHintAttr::UnrollCount; @@ -121,7 +120,6 @@ } } else { // #pragma clang loop ... -Spelling = LoopHintAttr::Pragma_clang_loop; assert(OptionLoc && OptionLoc->Ident && "Attribute must have valid option info."); Option = llvm::StringSwitch( Index: include/clang/Sema/AttributeList.h === --- include/clang/Sema/AttributeList.h +++ include/clang/Sema/AttributeList.h @@ -106,10 +106,12 @@ AS_Microsoft, /// __ptr16, alignas(...), etc. AS_Keyword, -/// Context-sensitive version of a keyword attribute. -AS_ContextSensitiveKeyword, /// #pragma ... AS_Pragma, +// Note TableGen depends on the order above. Do not add or change the order +// without adding related code to TableGen/ClangAttrEmitter.cpp. +/// Context-sensitive version of a keyword attribute. +AS_ContextSensitiveKeyword, }; private: ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits