diff options
| author | Filipe Cabecinhas <me@filcab.net> | 2015-05-19 18:18:10 +0000 |
|---|---|---|
| committer | Filipe Cabecinhas <me@filcab.net> | 2015-05-19 18:18:10 +0000 |
| commit | fc93be21ea654d2c7ae5c8676caad9316f4fb555 (patch) | |
| tree | 896e6d123cdad0b74af6f2f1fd0f0424aa3f59c6 | |
| parent | c5e0d4d146bed47b4e306b8f9fa0a2766d14a641 (diff) | |
| download | bcm5719-llvm-fc93be21ea654d2c7ae5c8676caad9316f4fb555.tar.gz bcm5719-llvm-fc93be21ea654d2c7ae5c8676caad9316f4fb555.zip | |
Change a reachable unreachable to a fatal error.
Summary:
Also tagged a FIXME comment, and added information about why it breaks.
Bug found using AFL fuzz.
Reviewers: rafael, craig.topper
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D9729
llvm-svn: 237709
| -rw-r--r-- | llvm/include/llvm/Support/StreamingMemoryObject.h | 11 | ||||
| -rw-r--r-- | llvm/test/Bitcode/Inputs/invalid-fixme-streaming-blob.bc | bin | 0 -> 371 bytes | |||
| -rw-r--r-- | llvm/test/Bitcode/invalid.test | 5 |
3 files changed, 11 insertions, 5 deletions
diff --git a/llvm/include/llvm/Support/StreamingMemoryObject.h b/llvm/include/llvm/Support/StreamingMemoryObject.h index fb63da7dbcc..9d1d607005f 100644 --- a/llvm/include/llvm/Support/StreamingMemoryObject.h +++ b/llvm/include/llvm/Support/StreamingMemoryObject.h @@ -29,11 +29,12 @@ public: uint64_t readBytes(uint8_t *Buf, uint64_t Size, uint64_t Address) const override; const uint8_t *getPointer(uint64_t address, uint64_t size) const override { - // This could be fixed by ensuring the bytes are fetched and making a copy, - // requiring that the bitcode size be known, or otherwise ensuring that - // the memory doesn't go away/get reallocated, but it's - // not currently necessary. Users that need the pointer don't stream. - llvm_unreachable("getPointer in streaming memory objects not allowed"); + // FIXME: This could be fixed by ensuring the bytes are fetched and + // making a copy, requiring that the bitcode size be known, or + // otherwise ensuring that the memory doesn't go away/get reallocated, + // but it's not currently necessary. Users that need the pointer (any + // that need Blobs) don't stream. + report_fatal_error("getPointer in streaming memory objects not allowed"); return nullptr; } bool isValidAddress(uint64_t address) const override; diff --git a/llvm/test/Bitcode/Inputs/invalid-fixme-streaming-blob.bc b/llvm/test/Bitcode/Inputs/invalid-fixme-streaming-blob.bc Binary files differnew file mode 100644 index 00000000000..7e32f8b0774 --- /dev/null +++ b/llvm/test/Bitcode/Inputs/invalid-fixme-streaming-blob.bc diff --git a/llvm/test/Bitcode/invalid.test b/llvm/test/Bitcode/invalid.test index 7a2dbdcc1b3..f609d043df4 100644 --- a/llvm/test/Bitcode/invalid.test +++ b/llvm/test/Bitcode/invalid.test @@ -157,3 +157,8 @@ RUN: not llvm-dis -disable-output %p/Inputs/invalid-function-argument-type.bc 2> RUN: FileCheck --check-prefix=INVALID-ARGUMENT-TYPE %s INVALID-ARGUMENT-TYPE: Invalid function argument type + +RUN: not llvm-dis -disable-output %p/Inputs/invalid-fixme-streaming-blob.bc 2>&1 | \ +RUN: FileCheck --check-prefix=STREAMING-BLOB %s + +STREAMING-BLOB: getPointer in streaming memory objects not allowed |

