From 6526de425dbfd368407566ff123b5bdc0924859a Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 13 Nov 2013 22:58:53 +0000 Subject: [PATCH] -fms-extensions: Recognize _alloca as an alias for the alloca builtin Differential Revision: http://llvm-reviews.chandlerc.com/D1989 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194617 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/Builtins.def | 1 + lib/CodeGen/CGBuiltin.cpp | 1 + test/CodeGen/builtins-ms.c | 9 +++++++++ 3 files changed, 11 insertions(+) create mode 100644 test/CodeGen/builtins-ms.c diff --git a/include/clang/Basic/Builtins.def b/include/clang/Basic/Builtins.def index b1f92a15c6..55c6ed7dee 100644 --- a/include/clang/Basic/Builtins.def +++ b/include/clang/Basic/Builtins.def @@ -675,6 +675,7 @@ BUILTIN(__builtin_index, "c*cC*i", "Fn") BUILTIN(__builtin_rindex, "c*cC*i", "Fn") // Microsoft builtins. These are only active with -fms-extensions. +LANGBUILTIN(_alloca, "v*z", "n", ALL_MS_LANGUAGES) LANGBUILTIN(__assume, "vb", "n", ALL_MS_LANGUAGES) LANGBUILTIN(__noop, "v.", "n", ALL_MS_LANGUAGES) LANGBUILTIN(__debugbreak, "v", "n", ALL_MS_LANGUAGES) diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index 1c62615f81..d2f8662b54 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -604,6 +604,7 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, } case Builtin::BIalloca: + case Builtin::BI_alloca: case Builtin::BI__builtin_alloca: { Value *Size = EmitScalarExpr(E->getArg(0)); return RValue::get(Builder.CreateAlloca(Builder.getInt8Ty(), Size)); diff --git a/test/CodeGen/builtins-ms.c b/test/CodeGen/builtins-ms.c new file mode 100644 index 0000000000..0676e9df7a --- /dev/null +++ b/test/CodeGen/builtins-ms.c @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 %s -emit-llvm -o - -fms-extensions -triple i686-pc-win32 | FileCheck %s + +// CHECK-LABEL: define void @test_alloca +void capture(void *); +void test_alloca(int n) { + capture(_alloca(n)); + // CHECK: %[[arg:.*]] = alloca i8, i32 % + // CHECK: call void @capture(i8* %[[arg]]) +} -- 2.40.0