From c2e7e5974bede2cb47ac45a62a884ae687cc7880 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Mon, 10 Mar 2014 19:31:20 +0100 Subject: [PATCH] re PR libgcc/60472 (Warning: array subscript is above array bounds when compiling crtstuff.c) PR libgcc/60472 * crtstuff.c (frame_dummy): Use void **jcr_list temporary variable to avoid array subscript is above array bounds warnings. Use __builtin_expect when checking *jcr_list for NULL. From-SVN: r208457 --- libgcc/ChangeLog | 9 ++++++++- libgcc/crtstuff.c | 12 ++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 381a5e27c66..686c29e8023 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,10 @@ +2014-03-10 Uros Bizjak + + PR libgcc/60472 + * crtstuff.c (frame_dummy): Use void **jcr_list temporary + variable to avoid array subscript is above array bounds warnings. + Use __builtin_expect when checking *jcr_list for NULL. + 2014-03-06 Rainer Orth PR libgcc/59339 @@ -420,7 +427,7 @@ 2013-12-26 Ganesh Gopalasubramanian - * config/i386/cpuinfo.c (processor_types): Rename AMD cpu names + * config/i386/cpuinfo.c (processor_types): Rename AMD cpu names AMD_BOBCAT to AMD_BTVER1 and AMD_JAGUAR to AMD_BTVER2. (get_amd_cpu): Likewise. diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c index bc0398d9a56..12bed4b351d 100644 --- a/libgcc/crtstuff.c +++ b/libgcc/crtstuff.c @@ -460,12 +460,14 @@ frame_dummy (void) #endif /* USE_EH_FRAME_REGISTRY */ #ifdef JCR_SECTION_NAME - if (__JCR_LIST__[0]) + void **jcr_list; + __asm ("" : "=g" (jcr_list) : "0" (__JCR_LIST__)); + if (__builtin_expect (*jcr_list != NULL, 0)) { void (*register_classes) (void *) = _Jv_RegisterClasses; __asm ("" : "+r" (register_classes)); if (register_classes) - register_classes (__JCR_LIST__); + register_classes (jcr_list); } #endif /* JCR_SECTION_NAME */ @@ -565,12 +567,14 @@ __do_global_ctors_1(void) #endif #ifdef JCR_SECTION_NAME - if (__JCR_LIST__[0]) + void **jcr_list + __asm ("" : "=g" (jcr_list) : "0" (__JCR_LIST__)); + if (__builtin_expect (*jcr_list != NULL, 0)) { void (*register_classes) (void *) = _Jv_RegisterClasses; __asm ("" : "+r" (register_classes)); if (register_classes) - register_classes (__JCR_LIST__); + register_classes (jcr_list); } #endif