[Bug c/69971] New: repetitive code with __builtin_return_address with a large level
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Feb 26 04:16:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69971
Bug ID: 69971
Summary: repetitive code with __builtin_return_address with a
large level
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: msebor at gcc dot gnu.org
Target Milestone: ---
Calling __builtin_return_address with a large argument (say due to a coding bug
obscured by macros or template arguments) can result in resource exhaustion by
the compiler as it emits at least one instruction for each level. It seems
that for levels greater some threshold GCC could emit a loop instead to avoid
this problem (as unlikely as it may be).
The following is an example run on powerpc64le where GCC emits a stream of ld
9,0(9) instructions, one for each level:
$ cat t.c && /build/gcc-trunk/gcc/xgcc -B /build/gcc-trunk/gcc -S -Wall -Wextra
-Wpedantic -o/dev/stdout t.c | grep "ld 9" | wc -l
void* foo (void)
{
void *p = __builtin_return_address (1024);
return p;
}
t.c: In function ‘foo’:
t.c:3:11: warning: calling ‘__builtin_return_address’ with a nonzero argument
is unsafe [-Wframe-address]
void *p = __builtin_return_address (1024);
^
1027
More information about the Gcc-bugs
mailing list