Add testing for mismatched explicit type on a load instruction when loading from...
authorDavid Blaikie <dblaikie@gmail.com>
Mon, 16 Mar 2015 21:48:46 +0000 (21:48 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Mon, 16 Mar 2015 21:48:46 +0000 (21:48 +0000)
llvm-svn: 232424

llvm/lib/Bitcode/Reader/BitcodeReader.cpp
llvm/test/Bitcode/Inputs/invalid-load-mismatched-explicit-type.bc [new file with mode: 0644]
llvm/test/Bitcode/invalid.test

index a26c444..dd42bdb 100644 (file)
@@ -3648,9 +3648,9 @@ std::error_code BitcodeReader::ParseFunctionBody(Function *F) {
         return EC;
       I = new LoadInst(Op, "", Record[OpNum+1], Align);
 
-      (void)Ty;
-      assert((!Ty || Ty == I->getType()) &&
-             "Explicit type doesn't match pointee type of the first operand");
+      if (Ty && Ty != I->getType())
+        return Error("Explicit load type does not match pointee type of "
+                     "pointer operand");
 
       InstructionList.push_back(I);
       break;
diff --git a/llvm/test/Bitcode/Inputs/invalid-load-mismatched-explicit-type.bc b/llvm/test/Bitcode/Inputs/invalid-load-mismatched-explicit-type.bc
new file mode 100644 (file)
index 0000000..1b8cbc7
Binary files /dev/null and b/llvm/test/Bitcode/Inputs/invalid-load-mismatched-explicit-type.bc differ
index 7eb28aa..edf122b 100644 (file)
@@ -14,6 +14,8 @@ RUN: not llvm-dis -disable-output %p/Inputs/invalid-align.bc  2>&1 | \
 RUN:   FileCheck --check-prefix=BAD-ALIGN %s
 RUN: not llvm-dis -disable-output %p/Inputs/invalid-gep-mismatched-explicit-type.bc 2>&1 | \
 RUN:   FileCheck --check-prefix=MISMATCHED-EXPLICIT-GEP %s
+RUN: not llvm-dis -disable-output %p/Inputs/invalid-load-mismatched-explicit-type.bc 2>&1 | \
+RUN:   FileCheck --check-prefix=MISMATCHED-EXPLICIT-LOAD %s
 
 INVALID-ENCODING: Invalid encoding
 BAD-ABBREV: Abbreviation starts with an Array or a Blob
@@ -23,6 +25,7 @@ BAD-TYPE-TABLE-FORWARD-REF: Invalid TYPE table: Only named structs can be forwar
 BAD-BITWIDTH: Bitwidth for integer type out of range
 BAD-ALIGN: Invalid alignment value
 MISMATCHED-EXPLICIT-GEP: Explicit gep type does not match pointee type of pointer operand
+MISMATCHED-EXPLICIT-LOAD: Explicit load type does not match pointee type of pointer operand
 
 RUN: not llvm-dis -disable-output %p/Inputs/invalid-extractval-array-idx.bc 2>&1 | \
 RUN:   FileCheck --check-prefix=EXTRACT-ARRAY %s