[llvm-branch-commits] [cfe-branch] r243653 - Merging r243206:

Hans Wennborg hans at hanshq.net
Thu Jul 30 09:22:28 PDT 2015


Author: hans
Date: Thu Jul 30 11:22:28 2015
New Revision: 243653

URL: http://llvm.org/viewvc/llvm-project?rev=243653&view=rev
Log:
Merging r243206:
------------------------------------------------------------------------
r243206 | majnemer | 2015-07-24 22:57:24 -0700 (Fri, 24 Jul 2015) | 10 lines

[CodeGen] Don't UBSan-ize the argument to __builtin_frame_address

__builtin_frame_address requires its argument to be a constant
expression which already implies that it cannot have undefined behavior.
However, we used EmitScalarExpr to emit the argument causing UBSan to
try to check for overflow.

Instead, use the constant expression emission system.

This fixes PR24256.
------------------------------------------------------------------------

Modified:
    cfe/branches/release_37/   (props changed)
    cfe/branches/release_37/lib/CodeGen/CGBuiltin.cpp
    cfe/branches/release_37/test/CodeGen/integer-overflow.c

Propchange: cfe/branches/release_37/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jul 30 11:22:28 2015
@@ -1,4 +1,4 @@
 /cfe/branches/type-system-rewrite:134693-134817
-/cfe/trunk:242244,242285,242293,242297,242313,242382,242422,242499,242574,242600,242660,242662,242667,242678,242766,242854,242905,242973,243018,243048,243098,243101,243105,243144,243153,243196,243277,243280,243285,243289,243343,243417,243463,243538,243594
+/cfe/trunk:242244,242285,242293,242297,242313,242382,242422,242499,242574,242600,242660,242662,242667,242678,242766,242854,242905,242973,243018,243048,243098,243101,243105,243144,243153,243196,243206,243277,243280,243285,243289,243343,243417,243463,243538,243594
 /cfe/trunk/test:170344
 /cfe/trunk/test/SemaTemplate:126920

Modified: cfe/branches/release_37/lib/CodeGen/CGBuiltin.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_37/lib/CodeGen/CGBuiltin.cpp?rev=243653&r1=243652&r2=243653&view=diff
==============================================================================
--- cfe/branches/release_37/lib/CodeGen/CGBuiltin.cpp (original)
+++ cfe/branches/release_37/lib/CodeGen/CGBuiltin.cpp Thu Jul 30 11:22:28 2015
@@ -866,14 +866,14 @@ RValue CodeGenFunction::EmitBuiltinExpr(
                                       llvm::ConstantInt::get(Int32Ty, Offset)));
   }
   case Builtin::BI__builtin_return_address: {
-    Value *Depth = EmitScalarExpr(E->getArg(0));
-    Depth = Builder.CreateIntCast(Depth, Int32Ty, false);
+    Value *Depth =
+        CGM.EmitConstantExpr(E->getArg(0), getContext().UnsignedIntTy, this);
     Value *F = CGM.getIntrinsic(Intrinsic::returnaddress);
     return RValue::get(Builder.CreateCall(F, Depth));
   }
   case Builtin::BI__builtin_frame_address: {
-    Value *Depth = EmitScalarExpr(E->getArg(0));
-    Depth = Builder.CreateIntCast(Depth, Int32Ty, false);
+    Value *Depth =
+        CGM.EmitConstantExpr(E->getArg(0), getContext().UnsignedIntTy, this);
     Value *F = CGM.getIntrinsic(Intrinsic::frameaddress);
     return RValue::get(Builder.CreateCall(F, Depth));
   }

Modified: cfe/branches/release_37/test/CodeGen/integer-overflow.c
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_37/test/CodeGen/integer-overflow.c?rev=243653&r1=243652&r2=243653&view=diff
==============================================================================
--- cfe/branches/release_37/test/CodeGen/integer-overflow.c (original)
+++ cfe/branches/release_37/test/CodeGen/integer-overflow.c Thu Jul 30 11:22:28 2015
@@ -72,4 +72,11 @@ void test1() {
   // TRAPV: add i8 {{.*}}, 1
   // CATCH_UB: add i8 {{.*}}, 1
   ++PR9350;
+
+  // PR24256: don't instrument __builtin_frame_address.
+  __builtin_frame_address(0 + 0);
+  // DEFAULT:  call i8* @llvm.frameaddress(i32 0)
+  // WRAPV:    call i8* @llvm.frameaddress(i32 0)
+  // TRAPV:    call i8* @llvm.frameaddress(i32 0)
+  // CATCH_UB: call i8* @llvm.frameaddress(i32 0)
 }





More information about the llvm-branch-commits mailing list