diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h index 93f15920bfedb..f4a6d83dafad2 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(__VA_ARGS__); \ - break; \ - case lld::elf::ELF32BEKind: \ - f(__VA_ARGS__); \ - break; \ - case lld::elf::ELF64LEKind: \ - f(__VA_ARGS__); \ - break; \ - case lld::elf::ELF64BEKind: \ - f(__VA_ARGS__); \ - break; \ - default: \ - llvm_unreachable("unknown ctx.arg.ekind"); \ - } + do { \ + switch (ctx.arg.ekind) { \ + case lld::elf::ELF32LEKind: \ + f(__VA_ARGS__); \ + break; \ + case lld::elf::ELF32BEKind: \ + f(__VA_ARGS__); \ + break; \ + case lld::elf::ELF64LEKind: \ + f(__VA_ARGS__); \ + break; \ + case lld::elf::ELF64BEKind: \ + f(__VA_ARGS__); \ + break; \ + default: \ + llvm_unreachable("unknown ctx.arg.ekind"); \ + } \ + } while (0) #endif