aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Criswell <criswell@uiuc.edu>2005-06-29 15:03:18 +0000
committerJohn Criswell <criswell@uiuc.edu>2005-06-29 15:03:18 +0000
commit1d231ec0b04268d40fe9903f6d0b0ae90a500150 (patch)
treed986604dbd7eeb779c2aade3e43cc48dfce9356a
parent0cab375231b6949acf4630aed28a38d4a7aa592c (diff)
Basic fix for PR#591; don't convert an fprintf() to an fwrite() if there
is a mismatch in their character type pointers (i.e. fprintf() prints an array of ubytes while fwrite() takes an array of sbytes). We can probably do better than this (such as casting the ubyte to an sbyte). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22310 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Transforms/IPO/SimplifyLibCalls.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/Transforms/IPO/SimplifyLibCalls.cpp b/lib/Transforms/IPO/SimplifyLibCalls.cpp
index a2ca692147..fb4df73818 100644
--- a/lib/Transforms/IPO/SimplifyLibCalls.cpp
+++ b/lib/Transforms/IPO/SimplifyLibCalls.cpp
@@ -1305,6 +1305,15 @@ public:
Function* fwrite_func = SLC.get_fwrite(FILEptr_type);
if (!fwrite_func)
return false;
+
+ // Make sure that the fprintf() and fwrite() functions both take the
+ // same type of char pointer.
+ if (ci->getOperand(2)->getType() !=
+ fwrite_func->getFunctionType()->getParamType(0))
+ {
+ return false;
+ }
+
std::vector<Value*> args;
args.push_back(ci->getOperand(2));
args.push_back(ConstantUInt::get(SLC.getIntPtrType(),len));