]> granicus.if.org Git - clang/commitdiff
Cleqnup ideas from Chris, thanks.
authorMike Stump <mrs@apple.com>
Sat, 30 May 2009 14:43:18 +0000 (14:43 +0000)
committerMike Stump <mrs@apple.com>
Sat, 30 May 2009 14:43:18 +0000 (14:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72621 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ExprConstant.cpp

index eac73eaf2f42e6e6e4fccc7a3b5464b895a0b26a..4ad2bec53bcc8f3caed8de69d772504ba12b0fe2 100644 (file)
@@ -17,6 +17,7 @@
 #include "clang/AST/StmtVisitor.h"
 #include "clang/AST/ASTDiagnostic.h"
 #include "clang/Basic/TargetInfo.h"
+#include "llvm/ADT/SmallString.h"
 #include "llvm/Support/Compiler.h"
 #include <cstring>
 
@@ -1320,13 +1321,13 @@ bool FloatExprEvaluator::VisitCallExpr(const CallExpr *E) {
       if (!S->isWide()) {
         const llvm::fltSemantics &Sem =
           Info.Ctx.getFloatTypeSemantics(E->getType());
-        char *s = (char *)malloc (S->getByteLength()+1);
-        memcpy(s,  S->getStrData(), S->getByteLength());
-        s[S->getByteLength()] = 0;
+        llvm::SmallString<16> s;
+        s.append(S->getStrData(), S->getStrData() + S->getByteLength());
+        s += '\0';
         long l;
         char *endp;
-        l = strtol(S->getStrData(), &endp, 0);
-        if (endp != (S->getStrData() + S->getByteLength()))
+        l = strtol(&s[0], &endp, 0);
+        if (endp != s.end()-1)
           return false;
         unsigned type = (unsigned int)l;;
         Result = llvm::APFloat::getNaN(Sem, false, type);