]> granicus.if.org Git - clang/commitdiff
PR4134: Implement __builtin_extract_return_addr.
authorEli Friedman <eli.friedman@gmail.com>
Sun, 3 May 2009 19:23:23 +0000 (19:23 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sun, 3 May 2009 19:23:23 +0000 (19:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70794 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Builtins.def
lib/CodeGen/CGBuiltin.cpp
test/CodeGen/builtins.c

index c51ba69b8cf7634831fe60097842a1e6ada31fbc..a14c9d85b0ce6c2e8470bf9a40b56d488cf6280f 100644 (file)
@@ -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**", "")
index 2b9a17845d6bb70e84e5310b4c8f4ebb1231460c..d14bb53e6f447a37c6c829bfaba5e9a920e8b081 100644 (file)
@@ -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:
index 8735cc613b59ca1205162f74ecd8de02024b3203..ce5cd74bd4c4d0331baad97d402baa330a6c5fd1 100644 (file)
@@ -109,6 +109,7 @@ int main() {
   // FIXME
   // V(clear_cache, (&N, &N+1));
   V(trap, ());
+  P(extract_return_addr, (&N));
 
   return 0;
 }