AsmParser: Use do{}while(false) in macros, NFC
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 20 Feb 2015 23:49:24 +0000 (23:49 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 20 Feb 2015 23:49:24 +0000 (23:49 +0000)
`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).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230095 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/LLLexer.cpp

index 2fd9861c51776ede4901c061c8b2bf93c292fa21..7e0f92f3a9b5510f397c14fb9992b946eab3bbb7 100644 (file)
@@ -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);