<div dir="ltr">Er, that didn't actually work. I thought I finished this, but apparently not...</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Oct 30, 2013 at 3:38 PM, Reid Kleckner <span dir="ltr"><<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> - Make it only active in -fms-extensions.<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D1989" target="_blank">http://llvm-reviews.chandlerc.com/D1989</a><br>
<br>
CHANGE SINCE LAST DIFF<br>
<a href="http://llvm-reviews.chandlerc.com/D1989?vs=5067&id=5275#toc" target="_blank">http://llvm-reviews.chandlerc.com/D1989?vs=5067&id=5275#toc</a><br>
<br>
Files:<br>
include/clang/Basic/Builtins.def<br>
include/clang/Basic/Builtins.h<br>
<div class="im"> lib/CodeGen/CGBuiltin.cpp<br>
test/CodeGen/builtins.c<br>
test/SemaCXX/no-implicit-builtin-decls.cpp<br>
<br>
Index: include/clang/Basic/Builtins.def<br>
===================================================================<br>
--- include/clang/Basic/Builtins.def<br>
+++ include/clang/Basic/Builtins.def<br>
</div>@@ -670,11 +670,12 @@<br>
BUILTIN(__builtin_index, "c*cC*i", "Fn")<br>
<div class="im"> BUILTIN(__builtin_rindex, "c*cC*i", "Fn")<br>
<br>
</div>-// Microsoft builtins.<br>
-BUILTIN(__assume, "vb", "n")<br>
-BUILTIN(__noop, "v.", "n")<br>
-BUILTIN(__debugbreak, "v", "n")<br>
-<br>
+// Microsoft builtins. These are only active with -fms-extensions.<br>
+// They are not library builtins despire our use of LIBBUILTIN.<br>
+LIBBUILTIN(_alloca, "v*z", "n", 0, ALL_MS_LANGUAGES)<br>
+LIBBUILTIN(__assume, "vb", "n", 0, ALL_MS_LANGUAGES)<br>
+LIBBUILTIN(__noop, "v.", "n", 0, ALL_MS_LANGUAGES)<br>
+LIBBUILTIN(__debugbreak, "v", "n", 0, ALL_MS_LANGUAGES)<br>
<br>
// C99 library functions<br>
// C99 stdlib.h<br>
Index: include/clang/Basic/Builtins.h<br>
===================================================================<br>
--- include/clang/Basic/Builtins.h<br>
+++ include/clang/Basic/Builtins.h<br>
@@ -35,8 +35,10 @@<br>
C_LANG = 0x2, // builtin for c only.<br>
CXX_LANG = 0x4, // builtin for cplusplus only.<br>
OBJC_LANG = 0x8, // builtin for objective-c and objective-c++<br>
+ MS_LANG = 0x10, // builtin requires MS mode.<br>
ALL_LANGUAGES = C_LANG | CXX_LANG | OBJC_LANG, // builtin for all languages.<br>
- ALL_GNU_LANGUAGES = ALL_LANGUAGES | GNU_LANG // builtin requires GNU mode.<br>
+ ALL_GNU_LANGUAGES = ALL_LANGUAGES | GNU_LANG, // builtin requires GNU mode.<br>
+ ALL_MS_LANGUAGES = ALL_LANGUAGES | MS_LANG // builtin requires MS mode.<br>
};<br>
<br>
namespace Builtin {<br>
<div class="im">Index: lib/CodeGen/CGBuiltin.cpp<br>
===================================================================<br>
--- lib/CodeGen/CGBuiltin.cpp<br>
+++ lib/CodeGen/CGBuiltin.cpp<br>
</div>@@ -604,6 +604,7 @@<br>
<div class="HOEnZb"><div class="h5"> }<br>
<br>
case Builtin::BIalloca:<br>
+ case Builtin::BI_alloca:<br>
case Builtin::BI__builtin_alloca: {<br>
Value *Size = EmitScalarExpr(E->getArg(0));<br>
return RValue::get(Builder.CreateAlloca(Builder.getInt8Ty(), Size));<br>
Index: test/CodeGen/builtins.c<br>
===================================================================<br>
--- test/CodeGen/builtins.c<br>
+++ test/CodeGen/builtins.c<br>
@@ -210,3 +210,11 @@<br>
// CHECK: call i64 @llvm.readcyclecounter()<br>
return __builtin_readcyclecounter();<br>
}<br>
+<br>
+// CHECK-LABEL: define void @test_alloca<br>
+void test_alloca(int n) {<br>
+ extern void capture(void *);<br>
+ capture(_alloca(n));<br>
+ // CHECK: alloca i8, i64 %<br>
+ // CHECK: call void @capture<br>
+}<br>
Index: test/SemaCXX/no-implicit-builtin-decls.cpp<br>
===================================================================<br>
--- test/SemaCXX/no-implicit-builtin-decls.cpp<br>
+++ test/SemaCXX/no-implicit-builtin-decls.cpp<br>
@@ -1,6 +1,6 @@<br>
// RUN: %clang_cc1 -fsyntax-only -verify %s<br>
<br>
-void f() {<br>
+void f() { // expected-note@+1 {{declared here}}<br>
void *p = malloc(sizeof(int) * 10); // expected-error{{use of undeclared identifier 'malloc'}}<br>
}<br>
</div></div></blockquote></div><br></div>