diff options
author | John Criswell <criswell@uiuc.edu> | 2005-06-29 15:03:18 +0000 |
---|---|---|
committer | John Criswell <criswell@uiuc.edu> | 2005-06-29 15:03:18 +0000 |
commit | 1d231ec0b04268d40fe9903f6d0b0ae90a500150 (patch) | |
tree | d986604dbd7eeb779c2aade3e43cc48dfce9356a | |
parent | 0cab375231b6949acf4630aed28a38d4a7aa592c (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.cpp | 9 |
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)); |