mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-01 01:54:21 +00:00
Fix 2003-06-23-PromotedExprs.llx -- if we are adding two bytes we better
explicitly cast the result to be a byte, or C will gleefully promote it to int. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6869 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
508a41b450
commit
031a112747
@ -1029,6 +1029,16 @@ void CWriter::visitPHINode(PHINode &I) {
|
||||
void CWriter::visitBinaryOperator(Instruction &I) {
|
||||
// binary instructions, shift instructions, setCond instructions.
|
||||
assert(!isa<PointerType>(I.getType()));
|
||||
|
||||
// We must cast the results of binary operations which might be promoted.
|
||||
bool needsCast = false;
|
||||
if ((I.getType() == Type::UByteTy) || (I.getType() == Type::SByteTy)
|
||||
|| (I.getType() == Type::UShortTy) || (I.getType() == Type::ShortTy)) {
|
||||
needsCast = true;
|
||||
Out << "((";
|
||||
printType(Out, I.getType(), "", false, false);
|
||||
Out << ")(";
|
||||
}
|
||||
|
||||
writeOperand(I.getOperand(0));
|
||||
|
||||
@ -1053,6 +1063,10 @@ void CWriter::visitBinaryOperator(Instruction &I) {
|
||||
}
|
||||
|
||||
writeOperand(I.getOperand(1));
|
||||
|
||||
if (needsCast) {
|
||||
Out << "))";
|
||||
}
|
||||
}
|
||||
|
||||
void CWriter::visitCastInst(CastInst &I) {
|
||||
|
@ -1029,6 +1029,16 @@ void CWriter::visitPHINode(PHINode &I) {
|
||||
void CWriter::visitBinaryOperator(Instruction &I) {
|
||||
// binary instructions, shift instructions, setCond instructions.
|
||||
assert(!isa<PointerType>(I.getType()));
|
||||
|
||||
// We must cast the results of binary operations which might be promoted.
|
||||
bool needsCast = false;
|
||||
if ((I.getType() == Type::UByteTy) || (I.getType() == Type::SByteTy)
|
||||
|| (I.getType() == Type::UShortTy) || (I.getType() == Type::ShortTy)) {
|
||||
needsCast = true;
|
||||
Out << "((";
|
||||
printType(Out, I.getType(), "", false, false);
|
||||
Out << ")(";
|
||||
}
|
||||
|
||||
writeOperand(I.getOperand(0));
|
||||
|
||||
@ -1053,6 +1063,10 @@ void CWriter::visitBinaryOperator(Instruction &I) {
|
||||
}
|
||||
|
||||
writeOperand(I.getOperand(1));
|
||||
|
||||
if (needsCast) {
|
||||
Out << "))";
|
||||
}
|
||||
}
|
||||
|
||||
void CWriter::visitCastInst(CastInst &I) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user