[SLOF] [PATCH slof] paflof: Silence gcc's -Warray-bounds warning for stack pointers

Thomas Huth thuth at redhat.com
Mon Jul 17 17:41:08 AEST 2017


On 17.07.2017 05:11, Alexey Kardashevskiy wrote:
> The SLOF stack pointers - dp/rp - point to the top used element which
> means for an empty stack they point to an element below the stack.
> This means that for pushing to the stack we can use a store-with-update
> instruction (stdu). This generates good code for most primitives,
> better than the other stack pointer offsets.
> 
> However, with -Warray-bounds enabled, this produces warnings like below:
> 
> At the moment SLOF is  gcc produces a warning:
> /home/aik/p/slof/slof/paflof.c: In function ‘engine’:
> /home/aik/p/slof/slof/paflof.c:84:23: warning: array subscript is below array bounds [-Warray-bounds]
>    dp = the_data_stack - 1;
>         ~~~~~~~~~~~~~~~^~~
> 
> This silences gcc by doing c-cast.
> 
> Suggested-by: Segher Boessenkool <segher at kernel.crashing.org>
> Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
> ---
> 
> uintptr_t is not used anywhere in SLOF, hence type_u.
> ---
>  slof/paflof.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/slof/paflof.c b/slof/paflof.c
> index 50b4adf..e70f601 100644
> --- a/slof/paflof.c
> +++ b/slof/paflof.c
> @@ -81,8 +81,8 @@ long engine(int mode, long param_1, long param_2)
>  		LAST_ELEMENT(xt_FORTH_X2d_WORDLIST).a = xt_LASTWORD;
>  
>  		// stack-pointers
> -		dp = the_data_stack - 1;
> -		rp = handler_stack - 1;
> +		dp = (cell *)((type_u)the_data_stack - CELLSIZE);
> +		rp = (cell *)((type_u)handler_stack - CELLSIZE);
>  
>  		// return-address for "evaluate" personality
>  		dummy.a = &&over;

As mentioned in the other e-mail thread already, that solution looks
fine to me.

Reviewed-by: Thomas Huth <thuth at redhat.com>



More information about the SLOF mailing list