From: Chris Lattner Date: Mon, 16 Jun 2008 17:15:14 +0000 (+0000) Subject: force size of alloca to i32, which is currently required by LLVM IR. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9e800e3dd80d77f6c47054738177bf824089f55a;p=clang force size of alloca to i32, which is currently required by LLVM IR. This fixes use of alloca on 64-bit systems. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@52334 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index 51d7ced2d8..f8132f417d 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -261,10 +261,13 @@ RValue CodeGenFunction::EmitBuiltinExpr(unsigned BuiltinID, const CallExpr *E) { return RValue::get(Builder.CreateZExt(LHS, ConvertType(E->getType()), "tmp")); } - case Builtin::BI__builtin_alloca: - return RValue::get(Builder.CreateAlloca(llvm::Type::Int8Ty, - EmitScalarExpr(E->getArg(0)), + case Builtin::BI__builtin_alloca: { + // FIXME: LLVM IR Should allow alloca with an i64 size! + Value *Size = EmitScalarExpr(E->getArg(0)); + Size = Builder.CreateIntCast(Size, llvm::Type::Int32Ty, false, "tmp"); + return RValue::get(Builder.CreateAlloca(llvm::Type::Int8Ty, Size, "tmp")); + } case Builtin::BI__builtin_memcpy: { Value* MemCpyOps[4] = { EmitScalarExpr(E->getArg(0)),