[PATCH] D36473: Fix broken getAttributeSpellingListIndex for pragma attributes

2017-08-09 Thread Erich Keane via Phabricator via cfe-commits
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

2017-08-09 Thread Aaron Ballman via Phabricator via cfe-commits
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

2017-08-08 Thread Mike Rice via Phabricator via cfe-commits
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