Index: lld/trunk/ELF/SymbolTable.cpp =================================================================== --- lld/trunk/ELF/SymbolTable.cpp +++ lld/trunk/ELF/SymbolTable.cpp @@ -71,6 +71,8 @@ Symbol *sym = reinterpret_cast(make()); symVector.push_back(sym); + // *sym was not initialized by a constructor. Fields that may get referenced + // when it is a placeholder must be initialized here. sym->setName(name); sym->symbolKind = Symbol::PlaceholderKind; sym->versionId = VER_NDX_GLOBAL; @@ -79,6 +81,8 @@ sym->exportDynamic = false; sym->inDynamicList = false; sym->canInline = true; + sym->referenced = false; + sym->traced = false; sym->scriptDefined = false; sym->partition = 1; return sym; Index: lld/trunk/ELF/Symbols.h =================================================================== --- lld/trunk/ELF/Symbols.h +++ lld/trunk/ELF/Symbols.h @@ -537,6 +537,8 @@ Symbol old = *this; memcpy(this, &newSym, newSym.getSymbolSize()); + // old may be a placeholder. The referenced fields must be initialized in + // SymbolTable::insert. versionId = old.versionId; visibility = old.visibility; isUsedInRegularObj = old.isUsedInRegularObj;