Revert r64460. strtol and friends cannot be marked readonly, even with
authorDan Gohman <gohman@apple.com>
Fri, 17 Dec 2010 01:09:43 +0000 (01:09 +0000)
committerDan Gohman <gohman@apple.com>
Fri, 17 Dec 2010 01:09:43 +0000 (01:09 +0000)
a null endptr argument, because they may write to errno.

This fixes a seflhost miscompile observed on Linux targets when TBAA
was enabled.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122014 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/SimplifyLibCalls.cpp
test/Transforms/SimplifyLibCalls/2009-02-12-StrTo.ll

index 43c6f6dda25c3e6b1a5d4020c63f1cf99a375ae8..3edc447cec172ce947116ae90c73a45abc8c0c84 100644 (file)
@@ -577,7 +577,8 @@ struct StrToOpt : public LibCallOptimization {
 
     Value *EndPtr = CI->getArgOperand(1);
     if (isa<ConstantPointerNull>(EndPtr)) {
-      CI->setOnlyReadsMemory();
+      // With a null EndPtr, this function won't capture the main argument.
+      // It would be readonly too, except that it still may write to errno.
       CI->addAttribute(1, Attribute::NoCapture);
     }
 
index cb9819cacea6f76b31ddc083ed41d5a6810a050f..f8a0c88d2f895b3d41070c342b19f970e878e890 100644 (file)
@@ -1,7 +1,7 @@
 ; RUN: opt < %s -simplify-libcalls -S > %t
 ; RUN: grep nocapture %t | count 2
 ; RUN: grep null %t | grep nocapture | count 1
-; RUN: grep null %t | grep call | grep readonly | count 1
+; RUN: grep null %t | grep call | not grep readonly
 
 ; Test that we add nocapture to the declaration, and to the second call only.