Change a reachable unreachable to a fatal error.
authorFilipe Cabecinhas <me@filcab.net>
Tue, 19 May 2015 18:18:10 +0000 (18:18 +0000)
committerFilipe Cabecinhas <me@filcab.net>
Tue, 19 May 2015 18:18:10 +0000 (18:18 +0000)
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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237709 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/StreamingMemoryObject.h
test/Bitcode/Inputs/invalid-fixme-streaming-blob.bc [new file with mode: 0644]
test/Bitcode/invalid.test

index fb63da7dbccb8051394acc427cf2bed3d33b9159..9d1d607005f21c8702df0912bee2c8148c2bc6c4 100644 (file)
@@ -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/test/Bitcode/Inputs/invalid-fixme-streaming-blob.bc b/test/Bitcode/Inputs/invalid-fixme-streaming-blob.bc
new file mode 100644 (file)
index 0000000..7e32f8b
Binary files /dev/null and b/test/Bitcode/Inputs/invalid-fixme-streaming-blob.bc differ
index 7a2dbdcc1b3b183df35c8e3a409f8d10efb78ed9..f609d043df4b71115433909578aaeddcc8e7c998 100644 (file)
@@ -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