| OLD | NEW |
| 1 //===- subzero/src/PNaClTranslator.cpp - ICE from bitcode -----------------===// | 1 //===- subzero/src/PNaClTranslator.cpp - ICE from bitcode -----------------===// |
| 2 // | 2 // |
| 3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 // | 9 // |
| 10 // This file implements the PNaCl bitcode file to Ice, to machine code | 10 // This file implements the PNaCl bitcode file to Ice, to machine code |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 TopLevelParser(const TopLevelParser &) = delete; | 158 TopLevelParser(const TopLevelParser &) = delete; |
| 159 TopLevelParser &operator=(const TopLevelParser &) = delete; | 159 TopLevelParser &operator=(const TopLevelParser &) = delete; |
| 160 | 160 |
| 161 public: | 161 public: |
| 162 typedef std::vector<Ice::FunctionDeclaration *> FunctionDeclarationListType; | 162 typedef std::vector<Ice::FunctionDeclaration *> FunctionDeclarationListType; |
| 163 | 163 |
| 164 TopLevelParser(Ice::Translator &Translator, NaClBitcodeHeader &Header, | 164 TopLevelParser(Ice::Translator &Translator, NaClBitcodeHeader &Header, |
| 165 NaClBitstreamCursor &Cursor, bool &ErrorStatus) | 165 NaClBitstreamCursor &Cursor, bool &ErrorStatus) |
| 166 : NaClBitcodeParser(Cursor), Translator(Translator), Header(Header), | 166 : NaClBitcodeParser(Cursor), Translator(Translator), Header(Header), |
| 167 ErrorStatus(ErrorStatus), NumErrors(0), NumFunctionIds(0), | 167 ErrorStatus(ErrorStatus), NumErrors(0), NumFunctionIds(0), |
| 168 NumFunctionBlocks(0), BlockParser(nullptr) { | 168 NumFunctionBlocks(0), BlockParser(nullptr) {} |
| 169 // Note: This gives the reader uncontrolled access to the dump | |
| 170 // stream, which it can then use without locking. TODO(kschimpf): | |
| 171 // Consider reworking the LLVM side to use e.g. a callback for | |
| 172 // errors. | |
| 173 Ice::OstreamLocker L(Translator.getContext()); | |
| 174 setErrStream(Translator.getContext()->getStrDump()); | |
| 175 } | |
| 176 | 169 |
| 177 ~TopLevelParser() override {} | 170 ~TopLevelParser() override {} |
| 178 | 171 |
| 179 Ice::Translator &getTranslator() { return Translator; } | 172 Ice::Translator &getTranslator() { return Translator; } |
| 180 | 173 |
| 181 void setBlockParser(BlockParserBaseClass *NewBlockParser) { | 174 void setBlockParser(BlockParserBaseClass *NewBlockParser) { |
| 182 BlockParser = NewBlockParser; | 175 BlockParser = NewBlockParser; |
| 183 } | 176 } |
| 184 | 177 |
| 185 // Generates error with given Message. Always returns true. | 178 // Generates error with given Message. Always returns true. |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 430 Ice::VariableDeclaration *reportGetGlobalVariableByIDError(unsigned Index); | 423 Ice::VariableDeclaration *reportGetGlobalVariableByIDError(unsigned Index); |
| 431 | 424 |
| 432 // Reports that there is no corresponding ICE type for LLVMTy, and | 425 // Reports that there is no corresponding ICE type for LLVMTy, and |
| 433 // returns ICE::IceType_void. | 426 // returns ICE::IceType_void. |
| 434 Ice::Type convertToIceTypeError(Type *LLVMTy); | 427 Ice::Type convertToIceTypeError(Type *LLVMTy); |
| 435 }; | 428 }; |
| 436 | 429 |
| 437 bool TopLevelParser::Error(const std::string &Message) { | 430 bool TopLevelParser::Error(const std::string &Message) { |
| 438 ErrorStatus = true; | 431 ErrorStatus = true; |
| 439 ++NumErrors; | 432 ++NumErrors; |
| 433 Ice::GlobalContext *Context = Translator.getContext(); |
| 434 Ice::OstreamLocker L(Context); |
| 435 raw_ostream *OldErrStream = setErrStream(Context->getStrDump()); |
| 440 NaClBitcodeParser::Error(Message); | 436 NaClBitcodeParser::Error(Message); |
| 437 setErrStream(*OldErrStream); |
| 441 if (!Translator.getFlags().AllowErrorRecovery) | 438 if (!Translator.getFlags().AllowErrorRecovery) |
| 442 report_fatal_error("Unable to continue"); | 439 report_fatal_error("Unable to continue"); |
| 443 return true; | 440 return true; |
| 444 } | 441 } |
| 445 | 442 |
| 446 void TopLevelParser::reportBadTypeIDAs(unsigned ID, const ExtendedType *Ty, | 443 void TopLevelParser::reportBadTypeIDAs(unsigned ID, const ExtendedType *Ty, |
| 447 ExtendedType::TypeKind WantedType) { | 444 ExtendedType::TypeKind WantedType) { |
| 448 std::string Buffer; | 445 std::string Buffer; |
| 449 raw_string_ostream StrBuf(Buffer); | 446 raw_string_ostream StrBuf(Buffer); |
| 450 if (Ty == nullptr) { | 447 if (Ty == nullptr) { |
| (...skipping 2551 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3002 | 2999 |
| 3003 if (TopLevelBlocks != 1) { | 3000 if (TopLevelBlocks != 1) { |
| 3004 errs() << IRFilename | 3001 errs() << IRFilename |
| 3005 << ": Contains more than one module. Found: " << TopLevelBlocks | 3002 << ": Contains more than one module. Found: " << TopLevelBlocks |
| 3006 << "\n"; | 3003 << "\n"; |
| 3007 ErrorStatus = true; | 3004 ErrorStatus = true; |
| 3008 } | 3005 } |
| 3009 } | 3006 } |
| 3010 | 3007 |
| 3011 } // end of namespace Ice | 3008 } // end of namespace Ice |
| OLD | NEW |