Index: wasm/Symbols.h =================================================================== --- wasm/Symbols.h +++ wasm/Symbols.h @@ -82,7 +82,8 @@ uint32_t Flags; InputFile *File; InputChunk *Chunk; - llvm::Optional OutputIndex; + uint32_t OutputIndex; + bool HasOutputIndex = false; }; class FunctionSymbol : public Symbol { @@ -110,7 +111,8 @@ InputChunk *C) : Symbol(Name, K, Flags, F, C) {} - llvm::Optional TableIndex; + uint32_t TableIndex; + bool HasTableIndex = false; // Explict function type, needed for undefined or synthetic functions only. const WasmSignature *FunctionType = nullptr; Index: wasm/Symbols.cpp =================================================================== --- wasm/Symbols.cpp +++ wasm/Symbols.cpp @@ -31,19 +31,21 @@ bool Symbol::hasOutputIndex() const { if (auto *F = dyn_cast_or_null(Chunk)) return F->hasOutputIndex(); - return OutputIndex.hasValue(); + return HasOutputIndex; } uint32_t Symbol::getOutputIndex() const { if (auto *F = dyn_cast_or_null(Chunk)) return F->getOutputIndex(); - return OutputIndex.getValue(); + assert(HasOutputIndex); + return OutputIndex; } void Symbol::setOutputIndex(uint32_t Index) { DEBUG(dbgs() << "setOutputIndex " << Name << " -> " << Index << "\n"); assert(!dyn_cast_or_null(Chunk)); - assert(!OutputIndex.hasValue()); + assert(!HasOutputIndex); + HasOutputIndex = true; OutputIndex = Index; } @@ -85,13 +87,14 @@ uint32_t FunctionSymbol::getTableIndex() const { if (auto *F = dyn_cast_or_null(Chunk)) return F->getTableIndex(); - return TableIndex.getValue(); + assert(HasTableIndex); + return TableIndex; } bool FunctionSymbol::hasTableIndex() const { if (auto *F = dyn_cast_or_null(Chunk)) return F->hasTableIndex(); - return TableIndex.hasValue(); + return HasTableIndex; } void FunctionSymbol::setTableIndex(uint32_t Index) { @@ -103,7 +106,8 @@ return; } DEBUG(dbgs() << "setTableIndex " << Name << " -> " << Index << "\n"); - assert(!TableIndex.hasValue()); + assert(!HasTableIndex); + HasTableIndex = true; TableIndex = Index; }