diff options
author | Uros Bizjak <uros@gcc.gnu.org> | 2014-03-10 19:31:20 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2014-03-10 19:31:20 +0100 |
commit | c2e7e5974bede2cb47ac45a62a884ae687cc7880 (patch) | |
tree | 90f1b9e9325b3b0a1324bcdba5c53610fabfd936 /libgcc/crtstuff.c | |
parent | 4d3f2fa687ec4c8cf6aa668f4c2eab4f298c3f8e (diff) | |
download | gcc-c2e7e5974bede2cb47ac45a62a884ae687cc7880.zip gcc-c2e7e5974bede2cb47ac45a62a884ae687cc7880.tar.gz gcc-c2e7e5974bede2cb47ac45a62a884ae687cc7880.tar.bz2 |
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
Diffstat (limited to 'libgcc/crtstuff.c')
-rw-r--r-- | libgcc/crtstuff.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c index bc0398d..12bed4b 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 |