Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(122)

Side by Side Diff: lib/Bitcode/NaCl/Reader/NaClBitstreamReader.cpp

Issue 986453002: Additional clean ups on errors in bitcode parsing. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Fix comment. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 //===- NaClBitstreamReader.cpp --------------------------------------------===// 1 //===- NaClBitstreamReader.cpp --------------------------------------------===//
2 // NaClBitstreamReader implementation 2 // NaClBitstreamReader implementation
3 // 3 //
4 // The LLVM Compiler Infrastructure 4 // The LLVM Compiler Infrastructure
5 // 5 //
6 // This file is distributed under the University of Illinois Open Source 6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details. 7 // License. See LICENSE.TXT for details.
8 // 8 //
9 //===----------------------------------------------------------------------===// 9 //===----------------------------------------------------------------------===//
10 10
11 #include "llvm/ADT/STLExtras.h"
11 #include "llvm/Bitcode/NaCl/NaClBitstreamReader.h" 12 #include "llvm/Bitcode/NaCl/NaClBitstreamReader.h"
12 #include "llvm/Support/Format.h" 13 #include "llvm/Support/Format.h"
13 #include "llvm/Support/raw_ostream.h" 14 #include "llvm/Support/raw_ostream.h"
14 15
15 using namespace llvm; 16 using namespace llvm;
16 17
17 std::string NaClBitstreamReader::getBitAddress(uint64_t Bit, 18 namespace {
18 unsigned MinByteWidth) { 19
20 static const char *ErrorLevelName[] = {
21 "Warning",
22 "Error",
23 "Fatal"
24 };
25
26 } // End of anonymous namespace.
27
28 std::string llvm::naclbitc::getBitAddress(uint64_t Bit) {
19 std::string Buffer; 29 std::string Buffer;
20 raw_string_ostream Stream(Buffer); 30 raw_string_ostream Stream(Buffer);
21 Stream << '%' << MinByteWidth << PRIu64 << ":%u"; 31 Stream << (Bit / 8) << ":" << (Bit % 8);
22 Stream.flush();
23 std::string FormatString(Buffer);
24 Buffer.clear();
25 Stream << format(FormatString.c_str(),
26 (Bit / 8),
27 static_cast<unsigned>(Bit % 8));
28 return Stream.str(); 32 return Stream.str();
29 } 33 }
30 34
35 raw_ostream &llvm::naclbitc::ErrorAt(
36 raw_ostream &Out, ErrorLevel Level, uint64_t BitPosition) {
37 assert(Level < array_lengthof(::ErrorLevelName));
38 return Out << ErrorLevelName[Level] << "("
39 << naclbitc::getBitAddress(BitPosition) << "): ";
40 }
41
31 //===----------------------------------------------------------------------===// 42 //===----------------------------------------------------------------------===//
32 // NaClBitstreamCursor implementation 43 // NaClBitstreamCursor implementation
33 //===----------------------------------------------------------------------===// 44 //===----------------------------------------------------------------------===//
34 45
35 void NaClBitstreamCursor::ErrorHandler:: 46 void NaClBitstreamCursor::ErrorHandler::
36 Fatal(const std::string &ErrorMessage) const { 47 Fatal(const std::string &ErrorMessage) const {
37 // Default implementation is simply print message, and the bit where 48 // Default implementation is simply print message, and the bit where
38 // the error occurred. 49 // the error occurred.
39 std::string Buffer; 50 std::string Buffer;
40 raw_string_ostream StrBuf(Buffer); 51 raw_string_ostream StrBuf(Buffer);
41 StrBuf << "Error(" 52 naclbitc::ErrorAt(StrBuf, naclbitc::Fatal, Cursor.GetCurrentBitNo())
42 << NaClBitstreamReader::getBitAddress(Cursor.GetCurrentBitNo()) 53 << ErrorMessage;
43 << "): " << ErrorMessage;
44 report_fatal_error(StrBuf.str()); 54 report_fatal_error(StrBuf.str());
45 } 55 }
46 56
47 void NaClBitstreamCursor::freeState() { 57 void NaClBitstreamCursor::freeState() {
48 // Free all the Abbrevs. 58 // Free all the Abbrevs.
49 for (size_t i = 0, e = CurAbbrevs.size(); i != e; ++i) 59 for (size_t i = 0, e = CurAbbrevs.size(); i != e; ++i)
50 CurAbbrevs[i]->dropRef(); 60 CurAbbrevs[i]->dropRef();
51 CurAbbrevs.clear(); 61 CurAbbrevs.clear();
52 62
53 // Free all the Abbrevs in the block scope. 63 // Free all the Abbrevs in the block scope.
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 if (Record.size() < 1) return true; 402 if (Record.size() < 1) return true;
393 CurBlockInfo = &BitStream->getOrCreateBlockInfo((unsigned)Record[0]); 403 CurBlockInfo = &BitStream->getOrCreateBlockInfo((unsigned)Record[0]);
394 if (Listener) { 404 if (Listener) {
395 Listener->Values = Record; 405 Listener->Values = Record;
396 Listener->SetBID(); 406 Listener->SetBID();
397 } 407 }
398 break; 408 break;
399 } 409 }
400 } 410 }
401 } 411 }
OLDNEW
« no previous file with comments | « lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp ('k') | unittests/Bitcode/NaClAbbrevErrorTests.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698