mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Fix PR2060 by rejecting invalid types for integer constants.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47311 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fa113f8155
commit
689e8b294e
@ -378,7 +378,8 @@ static Value *getExistingVal(const Type *Ty, const ValID &D) {
|
||||
// Check to make sure that "Ty" is an integral type, and that our
|
||||
// value will fit into the specified type...
|
||||
case ValID::ConstSIntVal: // Is it a constant pool reference??
|
||||
if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
|
||||
if (!isa<IntegerType>(Ty) ||
|
||||
!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
|
||||
GenerateError("Signed integral constant '" +
|
||||
itostr(D.ConstPool64) + "' is invalid for type '" +
|
||||
Ty->getDescription() + "'");
|
||||
@ -387,20 +388,23 @@ static Value *getExistingVal(const Type *Ty, const ValID &D) {
|
||||
return ConstantInt::get(Ty, D.ConstPool64, true);
|
||||
|
||||
case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
|
||||
if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
|
||||
if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
|
||||
GenerateError("Integral constant '" + utostr(D.UConstPool64) +
|
||||
"' is invalid or out of range");
|
||||
return 0;
|
||||
} else { // This is really a signed reference. Transmogrify.
|
||||
return ConstantInt::get(Ty, D.ConstPool64, true);
|
||||
}
|
||||
} else {
|
||||
if (isa<IntegerType>(Ty) &&
|
||||
ConstantInt::isValueValidForType(Ty, D.UConstPool64))
|
||||
return ConstantInt::get(Ty, D.UConstPool64);
|
||||
|
||||
if (!isa<IntegerType>(Ty) ||
|
||||
!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
|
||||
GenerateError("Integral constant '" + utostr(D.UConstPool64) +
|
||||
"' is invalid or out of range for type '" +
|
||||
Ty->getDescription() + "'");
|
||||
return 0;
|
||||
}
|
||||
// This is really a signed reference. Transmogrify.
|
||||
return ConstantInt::get(Ty, D.ConstPool64, true);
|
||||
|
||||
case ValID::ConstFPVal: // Is it a floating point const pool reference?
|
||||
if (!ConstantFP::isValueValidForType(Ty, *D.ConstPoolFP)) {
|
||||
if (!Ty->isFloatingPoint() ||
|
||||
!ConstantFP::isValueValidForType(Ty, *D.ConstPoolFP)) {
|
||||
GenerateError("FP constant invalid for type");
|
||||
return 0;
|
||||
}
|
||||
|
6
test/Assembler/2008-02-18-IntPointerCrash.ll
Normal file
6
test/Assembler/2008-02-18-IntPointerCrash.ll
Normal file
@ -0,0 +1,6 @@
|
||||
; RUN: not llvm-as %s |& grep {is invalid or}
|
||||
; PR2060
|
||||
|
||||
define i8* @foo() {
|
||||
ret i8* 0
|
||||
}
|
Loading…
Reference in New Issue
Block a user