[PATCH] D43317: [WebAssebmly] Remove use of Optional to fix assertion in gcc

Sam Clegg via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 14 14:28:52 PST 2018


sbc100 created this revision.
Herald added subscribers: llvm-commits, aheejin, arichardson.

This was causing GCC builds with fail with:
Symbols.h:240:3: error: static assertion failed: Symbol types must be
trivially destructible

  static_assert(std::is_trivially_destructible<T>(


Repository:
  rLLD LLVM Linker

https://reviews.llvm.org/D43317

Files:
  wasm/Symbols.cpp
  wasm/Symbols.h


Index: wasm/Symbols.h
===================================================================
--- wasm/Symbols.h
+++ wasm/Symbols.h
@@ -82,7 +82,8 @@
   uint32_t Flags;
   InputFile *File;
   InputChunk *Chunk;
-  llvm::Optional<uint32_t> 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<uint32_t> 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<InputFunction>(Chunk))
     return F->hasOutputIndex();
-  return OutputIndex.hasValue();
+  return HasOutputIndex;
 }
 
 uint32_t Symbol::getOutputIndex() const {
   if (auto *F = dyn_cast_or_null<InputFunction>(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<InputFunction>(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<InputFunction>(Chunk))
     return F->getTableIndex();
-  return TableIndex.getValue();
+  assert(HasTableIndex);
+  return TableIndex;
 }
 
 bool FunctionSymbol::hasTableIndex() const {
   if (auto *F = dyn_cast_or_null<InputFunction>(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;
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43317.134315.patch
Type: text/x-patch
Size: 2256 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180214/87b0b30d/attachment.bin>


More information about the llvm-commits mailing list