aboutsummaryrefslogtreecommitdiff
path: root/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp')
-rw-r--r--lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp
index 276d1d59b3..f5fd1ba0e7 100644
--- a/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp
+++ b/lib/Bitcode/NaCl/Reader/NaClBitcodeReader.cpp
@@ -1579,8 +1579,16 @@ bool NaClBitcodeReader::ParseFunctionBody(Function *F) {
}
// Non-void values get registered in the value table for future use.
- if (I && !I->getType()->isVoidTy())
- ValueList.AssignValue(I, NextValueNo++);
+ if (I && !I->getType()->isVoidTy()) {
+ Value *NewVal = I;
+ if (GetPNaClVersion() >= 2 &&
+ NewVal->getType()->isPointerTy() &&
+ ValueList.getValueFwdRef(NextValueNo)) {
+ // Forward-referenced values cannot have pointer type.
+ NewVal = ConvertOpToScalar(NewVal, CurBBNo);
+ }
+ ValueList.AssignValue(NewVal, NextValueNo++);
+ }
}
OutOfRecordLoop: