diff options
Diffstat (limited to 'lld/ELF/Target.h')
-rw-r--r-- | lld/ELF/Target.h | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h index 93f1592..f4a6d83 100644 --- a/lld/ELF/Target.h +++ b/lld/ELF/Target.h @@ -338,21 +338,23 @@ inline uint64_t overwriteULEB128(uint8_t *bufLoc, uint64_t val) { #pragma clang diagnostic ignored "-Wgnu-zero-variadic-macro-arguments" #endif #define invokeELFT(f, ...) \ - switch (ctx.arg.ekind) { \ - case lld::elf::ELF32LEKind: \ - f<llvm::object::ELF32LE>(__VA_ARGS__); \ - break; \ - case lld::elf::ELF32BEKind: \ - f<llvm::object::ELF32BE>(__VA_ARGS__); \ - break; \ - case lld::elf::ELF64LEKind: \ - f<llvm::object::ELF64LE>(__VA_ARGS__); \ - break; \ - case lld::elf::ELF64BEKind: \ - f<llvm::object::ELF64BE>(__VA_ARGS__); \ - break; \ - default: \ - llvm_unreachable("unknown ctx.arg.ekind"); \ - } + do { \ + switch (ctx.arg.ekind) { \ + case lld::elf::ELF32LEKind: \ + f<llvm::object::ELF32LE>(__VA_ARGS__); \ + break; \ + case lld::elf::ELF32BEKind: \ + f<llvm::object::ELF32BE>(__VA_ARGS__); \ + break; \ + case lld::elf::ELF64LEKind: \ + f<llvm::object::ELF64LE>(__VA_ARGS__); \ + break; \ + case lld::elf::ELF64BEKind: \ + f<llvm::object::ELF64BE>(__VA_ARGS__); \ + break; \ + default: \ + llvm_unreachable("unknown ctx.arg.ekind"); \ + } \ + } while (0) #endif |