From: Reid Kleckner Date: Fri, 11 Jul 2014 20:22:55 +0000 (+0000) Subject: MS extension: Make __noop be the integer zero, not void X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4cc28023911a488e100d996fb50813523f8d6476;p=clang MS extension: Make __noop be the integer zero, not void We still don't accept '__noop;', and we don't consider __noop to be the integer literal zero. More work is needed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212839 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/Builtins.def b/include/clang/Basic/Builtins.def index a7a7f428d4..e705382e11 100644 --- a/include/clang/Basic/Builtins.def +++ b/include/clang/Basic/Builtins.def @@ -679,7 +679,7 @@ 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(__noop, "i.", "n", ALL_MS_LANGUAGES) LANGBUILTIN(__debugbreak, "v", "n", ALL_MS_LANGUAGES) LANGBUILTIN(__va_start, "vc**.", "nt", ALL_MS_LANGUAGES) LANGBUILTIN(_InterlockedCompareExchange, "LiLiD*LiLi", "n", ALL_MS_LANGUAGES) diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index ded75c192a..9d1ad673c2 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -1515,7 +1515,8 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, return EmitBuiltinNewDeleteCall(FD->getType()->castAs(), E->getArg(0), true); case Builtin::BI__noop: - return RValue::get(nullptr); + // __noop always evaluates to an integer literal zero. + return RValue::get(ConstantInt::get(IntTy, 0)); case Builtin::BI_InterlockedExchange: case Builtin::BI_InterlockedExchangePointer: return EmitBinaryAtomic(*this, llvm::AtomicRMWInst::Xchg, E); diff --git a/test/CodeGen/builtin-ms-noop.cpp b/test/CodeGen/builtin-ms-noop.cpp index b579e2d08c..f5064fbf3c 100644 --- a/test/CodeGen/builtin-ms-noop.cpp +++ b/test/CodeGen/builtin-ms-noop.cpp @@ -5,9 +5,9 @@ class A { ~A() {} }; -void f() { +int f() { // CHECK: @_Z1fv // CHECK-NOT: call void @_ZN1AD1Ev -// CHECK: ret void - __noop(A()); +// CHECK: ret i32 0 + return __noop(A()); };