[llvm] r230095 - AsmParser: Use do{}while(false) in macros, NFC

Duncan P. N. Exon Smith dexonsmith at apple.com
Fri Feb 20 15:49:24 PST 2015


Author: dexonsmith
Date: Fri Feb 20 17:49:24 2015
New Revision: 230095

URL: http://llvm.org/viewvc/llvm-project?rev=230095&view=rev
Log:
AsmParser: Use do{}while(false) in macros, NFC

`do { ... } while (false)` is standard macro etiquette for forcing
instantiations into a single statement and requiring a `;` afterwards,
making statement-like macros easier to reason about (and harder to use
incorrectly).

I'm about to modify the macros in `LexIdentifier()`.  I noticed that the
`KEYWORD` macro *does* follow the rule, so I thought I'd clean up the
other macros to match (otherwise might not be worth changing, since the
benefits of this pattern are fairly irrelevant here).

Modified:
    llvm/trunk/lib/AsmParser/LLLexer.cpp

Modified: llvm/trunk/lib/AsmParser/LLLexer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLLexer.cpp?rev=230095&r1=230094&r2=230095&view=diff
==============================================================================
--- llvm/trunk/lib/AsmParser/LLLexer.cpp (original)
+++ llvm/trunk/lib/AsmParser/LLLexer.cpp Fri Feb 20 17:49:24 2015
@@ -668,9 +668,13 @@ lltok::Kind LLLexer::LexIdentifier() {
 #undef KEYWORD
 
   // Keywords for types.
-#define TYPEKEYWORD(STR, LLVMTY) \
-  if (Len == strlen(STR) && !memcmp(StartChar, STR, strlen(STR))) { \
-    TyVal = LLVMTY; return lltok::Type; }
+#define TYPEKEYWORD(STR, LLVMTY)                                               \
+  do {                                                                         \
+    if (Len == strlen(STR) && !memcmp(StartChar, STR, strlen(STR))) {          \
+      TyVal = LLVMTY;                                                          \
+      return lltok::Type;                                                      \
+    }                                                                          \
+  } while (false)
   TYPEKEYWORD("void",      Type::getVoidTy(Context));
   TYPEKEYWORD("half",      Type::getHalfTy(Context));
   TYPEKEYWORD("float",     Type::getFloatTy(Context));
@@ -684,9 +688,13 @@ lltok::Kind LLLexer::LexIdentifier() {
 #undef TYPEKEYWORD
 
   // Keywords for instructions.
-#define INSTKEYWORD(STR, Enum) \
-  if (Len == strlen(#STR) && !memcmp(StartChar, #STR, strlen(#STR))) { \
-    UIntVal = Instruction::Enum; return lltok::kw_##STR; }
+#define INSTKEYWORD(STR, Enum)                                                 \
+  do {                                                                         \
+    if (Len == strlen(#STR) && !memcmp(StartChar, #STR, strlen(#STR))) {       \
+      UIntVal = Instruction::Enum;                                             \
+      return lltok::kw_##STR;                                                  \
+    }                                                                          \
+  } while (false)
 
   INSTKEYWORD(add,   Add);  INSTKEYWORD(fadd,   FAdd);
   INSTKEYWORD(sub,   Sub);  INSTKEYWORD(fsub,   FSub);
@@ -739,11 +747,13 @@ lltok::Kind LLLexer::LexIdentifier() {
 #undef INSTKEYWORD
 
 #define DWKEYWORD(TYPE, TOKEN)                                                 \
-  if (Len >= strlen("DW_" #TYPE "_") &&                                        \
-      !memcmp(StartChar, "DW_" #TYPE "_", strlen("DW_" #TYPE "_"))) {          \
-    StrVal.assign(StartChar, CurPtr);                                          \
-    return lltok::TOKEN;                                                       \
-  }
+  do {                                                                         \
+    if (Len >= strlen("DW_" #TYPE "_") &&                                      \
+        !memcmp(StartChar, "DW_" #TYPE "_", strlen("DW_" #TYPE "_"))) {        \
+      StrVal.assign(StartChar, CurPtr);                                        \
+      return lltok::TOKEN;                                                     \
+    }                                                                          \
+  } while (false)
   DWKEYWORD(TAG, DwarfTag);
   DWKEYWORD(ATE, DwarfAttEncoding);
   DWKEYWORD(VIRTUALITY, DwarfVirtuality);





More information about the llvm-commits mailing list