diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2016-10-05 11:32:00 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2016-10-05 11:32:00 +0300 |
commit | 8a72b0059569406bfc9dd9811f6ef48206ccc75a (patch) | |
tree | 3947dd3f83f81e3c14e5a980984f3d0c0661e84c /tools | |
parent | 43c543923af72ad495f8c44eaab25ceebe379c4f (diff) | |
download | bdwgc-8a72b0059569406bfc9dd9811f6ef48206ccc75a.tar.gz |
Eliminate 'address of local variable returned' static analyzer warning
* mark_rts.c [__GNUC__ >= 4] (GC_approx_sp): Use
__builtin_frame_address(0) instead of &sp (but still write the value to
the volatile local variable to force stack to grow if necessary).
* tools/setjmp_t.c [__GNUC__ >= 4] (nested_sp): Return
__builtin_frame_address(0) instead of sp.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/setjmp_t.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/tools/setjmp_t.c b/tools/setjmp_t.c index 1bd715dd..c71aea63 100644 --- a/tools/setjmp_t.c +++ b/tools/setjmp_t.c @@ -62,9 +62,13 @@ struct { word nested_sp(void) { +# if defined(__GNUC__) && (__GNUC__ >= 4) + return (word)__builtin_frame_address(0); +# else volatile word sp; sp = (word)(&sp); return sp; +# endif } /* To prevent nested_sp inlining. */ |