--- lib/SPIRV/libSPIRV/SPIRVModule.cpp.orig 2026-09-02 08:55:06 UTC +++ lib/SPIRV/libSPIRV/SPIRVModule.cpp @@ -2583,7 +2583,8 @@ std::istream &SPIRVModuleImpl::parseSPIRV(std::istream MI.setAutoAddExtensions(false); SPIRVWord Header[5] = {0}; - I.read(reinterpret_cast(&Header), sizeof(Header)); + for (auto &H : Header) + H = readSPIRVWord(I); SPIRVErrorLog &ErrorLog = MI.getErrorLog(); if (!ErrorLog.checkError(!I.eof(), SPIRVEC_InvalidModule, @@ -2620,8 +2621,7 @@ std::istream &SPIRVModuleImpl::parseSPIRV(std::istream SPIRVEntry *Scope = nullptr; while (true) { - SPIRVWord WordCountAndOpCode = 0; - I.read(reinterpret_cast(&WordCountAndOpCode), sizeof(SPIRVWord)); + SPIRVWord WordCountAndOpCode = readSPIRVWord(I); SPIRVDBG(spvdbgs() << "Read word: W = " << WordCountAndOpCode << " V = 0\n"); SPIRVWord WordCount = WordCountAndOpCode >> 16; @@ -2744,8 +2744,8 @@ bool isSpirvBinary(const std::string &Img) { bool isSpirvBinary(const std::string &Img) { if (Img.size() < sizeof(unsigned)) return false; - const auto *Magic = reinterpret_cast(Img.data()); - return *Magic == MagicNumber; + std::istringstream IS(Img); + return readSPIRVWord(IS) == MagicNumber; } #ifdef _SPIRV_SUPPORT_TEXT_FMT