diff options
-rw-r--r-- | lld/COFF/Symbols.h | 2 | ||||
-rw-r--r-- | lld/ELF/Symbols.h | 2 |
2 files changed, 4 insertions, 0 deletions
diff --git a/lld/COFF/Symbols.h b/lld/COFF/Symbols.h index d8a030705e2..930ed3cc743 100644 --- a/lld/COFF/Symbols.h +++ b/lld/COFF/Symbols.h @@ -416,6 +416,8 @@ union SymbolUnion { template <typename T, typename... ArgT> void replaceSymbol(Symbol *S, ArgT &&... Arg) { + static_assert(std::is_trivially_destructible<T>(), + "Symbol types must be trivially destructible"); static_assert(sizeof(T) <= sizeof(SymbolUnion), "Symbol too small"); static_assert(alignof(T) <= alignof(SymbolUnion), "SymbolUnion not aligned enough"); diff --git a/lld/ELF/Symbols.h b/lld/ELF/Symbols.h index f6e71cc79e4..ea284777b9b 100644 --- a/lld/ELF/Symbols.h +++ b/lld/ELF/Symbols.h @@ -350,6 +350,8 @@ void printTraceSymbol(Symbol *Sym); template <typename T, typename... ArgT> void replaceSymbol(Symbol *S, ArgT &&... Arg) { + static_assert(std::is_trivially_destructible<T>(), + "Symbol types must be trivially destructible"); static_assert(sizeof(T) <= sizeof(SymbolUnion), "SymbolUnion too small"); static_assert(alignof(T) <= alignof(SymbolUnion), "SymbolUnion not aligned enough"); |