Excecution of gcc.c-torture/excecute/pr17377.c fails for optimization level
-O0 and passes for other optimizer switches: Somewhat suspicious.
This looks like the same cause as PR 21078 since both use __builtin_return_address.
The AVR test results for a 4.2.1 prerelease still shows failure on -O0 only:
However the results for a 4.3 snapshot shows failure on all -O settings:
Created attachment 15396 [details]
Patch to correct return_address
The attached patch fixes this problem and PR21078
The AVR target support for builtin_return_address only returned value of frame_pointer+1 - so it would only be correct if stack and frame were empty.
The attached patch calculates the stack usage in the function prolog. This is placed in symbol stack_usage using UNSPEC instruction pattern. Builtin Return address uses RETURN_ADDR_RTX(count, tem) to add this to frame pointer to get to correct address. This only supports level 0 (same function). Other levels (ie upper functions) return 0 - which is correct response if not supported.
The address is that read from the stack - ie word address.
Testsuite torture/execute/20010122-1.c and PR17377.c both pass with this patch applied.
*** Bug 21078 has been marked as a duplicate of this bug. ***
can we implement this patch to correct __builtin_return_address and thus remove these old bug reports and associated testsuite failures? It also provides a means to document stack usage which would seem useful.
Fixed on 4.5
Setting Target Milestone.