From: Eli Friedman Date: Sun, 3 May 2009 19:23:23 +0000 (+0000) Subject: PR4134: Implement __builtin_extract_return_addr. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3b660efb9f9fa3e87096f4a96a2093cd17c43c2e;p=clang PR4134: Implement __builtin_extract_return_addr. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70794 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/Builtins.def b/include/clang/AST/Builtins.def index c51ba69b8c..a14c9d85b0 100644 --- a/include/clang/AST/Builtins.def +++ b/include/clang/AST/Builtins.def @@ -162,6 +162,7 @@ BUILTIN(__builtin_strrchr, "c*cC*i", "nF") BUILTIN(__builtin_strspn, "zcC*cC*", "nF") BUILTIN(__builtin_strstr, "c*cC*cC*", "nF") BUILTIN(__builtin_return_address, "v*Ui", "n") +BUILTIN(__builtin_extract_return_addr, "v*v*", "n") BUILTIN(__builtin_frame_address, "v*Ui", "n") BUILTIN(__builtin_flt_rounds, "i", "nc") BUILTIN(__builtin_setjmp, "iv**", "") diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index 2b9a17845d..d14bb53e6f 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -310,7 +310,10 @@ RValue CodeGenFunction::EmitBuiltinExpr(const FunctionDecl *FD, Value *F = CGM.getIntrinsic(Intrinsic::frameaddress, 0, 0); return RValue::get(Builder.CreateCall(F, EmitScalarExpr(E->getArg(0)))); } - + case Builtin::BI__builtin_extract_return_addr: { + // FIXME: There should be a target hook for this + return RValue::get(EmitScalarExpr(E->getArg(0))); + } case Builtin::BI__sync_fetch_and_add: return EmitBinaryAtomic(*this, Intrinsic::atomic_load_add, E); case Builtin::BI__sync_fetch_and_sub: diff --git a/test/CodeGen/builtins.c b/test/CodeGen/builtins.c index 8735cc613b..ce5cd74bd4 100644 --- a/test/CodeGen/builtins.c +++ b/test/CodeGen/builtins.c @@ -109,6 +109,7 @@ int main() { // FIXME // V(clear_cache, (&N, &N+1)); V(trap, ()); + P(extract_return_addr, (&N)); return 0; }