From 22b9ff4131e531e560b409412cae5c608242219b Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 16 Jun 2008 17:15:14 +0000 Subject: [PATCH] force size of alloca to i32, which is currently required by LLVM IR. This fixes use of alloca on 64-bit systems. llvm-svn: 52334 --- clang/lib/CodeGen/CGBuiltin.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 51d7ced2d83b..f8132f417de7 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/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)),