[ARM] Fix ICE in Armv8-M Security Extensions code
authorThomas Preud'homme <thomas.preudhomme@arm.com>
Fri, 17 Nov 2017 10:00:02 +0000 (10:00 +0000)
committerThomas Preud'homme <thopre01@gcc.gnu.org>
Fri, 17 Nov 2017 10:00:02 +0000 (10:00 +0000)
Commit r253825 which introduced some sanity checks for sbitmap revealed
a bug in the conversion of cmse_nonsecure_entry_clear_before_return ()
to using bitmap structure. bitmap_and expects that the two bitmaps have
the same length, yet the code in
cmse_nonsecure_entry_clear_before_return () have different size for
to_clear_bitmap and to_clear_arg_regs_bitmap, with the assumption that
bitmap_and would behave has if the bits not allocated were in fact zero.
This commit makes sure both bitmap are equally sized.

2017-11-17  Thomas Preud'homme  <thomas.preudhomme@arm.com>

    gcc/
    * config/arm/arm.c (cmse_nonsecure_entry_clear_before_return): Allocate
    to_clear_arg_regs_bitmap to the same size as to_clear_bitmap.

From-SVN: r254859

gcc/ChangeLog
gcc/config/arm/arm.c

index e07b3e6d175944142d12c602ff4eed666c7a77df..e371bf761cc09a5578bbaeb00da51373688fc05b 100644 (file)
@@ -1,3 +1,8 @@
+2017-11-17  Thomas Preud'homme  <thomas.preudhomme@arm.com>
+
+       * config/arm/arm.c (cmse_nonsecure_entry_clear_before_return): Allocate
+       to_clear_arg_regs_bitmap to the same size as to_clear_bitmap.
+
 2017-11-17  Richard Biener  <rguenther@suse.de>
 
        * tree-ssa-pre.c (phi_translate_1): Remove redundant constant
index db99303f3fb7a2196f48358e74fa4d98f31f045e..106e3edce0d6f2518eb391c436c5213a78d1275b 100644 (file)
@@ -25205,7 +25205,8 @@ cmse_nonsecure_entry_clear_before_return (void)
   if (padding_bits_to_clear != 0)
     {
       rtx reg_rtx;
-      auto_sbitmap to_clear_arg_regs_bitmap (R0_REGNUM + NUM_ARG_REGS);
+      int to_clear_bitmap_size = SBITMAP_SIZE ((sbitmap) to_clear_bitmap);
+      auto_sbitmap to_clear_arg_regs_bitmap (to_clear_bitmap_size);
 
       /* Padding bits to clear is not 0 so we know we are dealing with
         returning a composite type, which only uses r0.  Let's make sure that