Hi!

ubsan_instrument_float_cast is called from convert.c, therefore for all FEs
that uses convert.c.  For C/C++, the ubsan builtins are already initialized
through their inclusion from builtins.def, but for other builtins they can
be still uninitialized.  This patch adds a call that ensures the builtins
are initialized when we need them in ubsan_instrument_float_cast.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/5?

2015-12-31  Jakub Jelinek  <ja...@redhat.com>

        PR sanitizer/69055
        * ubsan.c (ubsan_instrument_float_cast): Call
        initialize_sanitizer_builtins.

        * gfortran.dg/pr69055.f90: New test.

--- gcc/ubsan.c.jj      2015-11-09 13:39:32.000000000 +0100
+++ gcc/ubsan.c 2015-12-28 10:22:23.024610469 +0100
@@ -1588,6 +1588,7 @@ ubsan_instrument_float_cast (location_t
     {
       location_t *loc_ptr = NULL;
       unsigned num_locations = 0;
+      initialize_sanitizer_builtins ();
       /* Figure out if we can propagate location to ubsan_data and use new
          style handlers in libubsan.  */
       if (ubsan_use_new_style_p (loc))
--- gcc/testsuite/gfortran.dg/pr69055.f90.jj    2015-12-28 10:28:58.925048460 
+0100
+++ gcc/testsuite/gfortran.dg/pr69055.f90       2015-12-28 10:28:53.082130547 
+0100
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! { dg-options "-fsanitize=float-cast-overflow" }
+
+subroutine pr69055
+  implicit none
+  integer :: n
+  real(8) :: b
+  b = huge(1.0D0)
+  n = b
+end subroutine pr69055

        Jakub

Reply via email to