[NFC][ELF] Wrap invokeELFT in do { } while (0) so it behaves as a function (#150119)
The current implementation is dangerous if used in contexts that need a single statement, since invokeELFT(...); is in fact two statements, a switch statement and an empty statement.
This commit is contained in:
parent
87c73f498d
commit
f8685a8533
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user