Missing braces in Updates.h macro

Simon Marlow simonmar at microsoft.com
Thu Sep 2 08:34:27 EDT 2004


Thanks, I think I've fixed this now.

Cheers,
	Simon

On 02 September 2004 05:11, Donald Bruce Stewart wrote:

> dons:
>> dons:
>>> Hey,
>>> 
>>> As you might have seen, last night's head on OpenBSD failed with:
>>> 
>>>         ../../ghc/compiler/ghc-inplace -optc-O -optc-Wall -optc-W
>>>         -optc-Wstrict-prototypes -optc-Wmissing-prototypes
>>>         -optc-Wmissing-declarations -optc-Winline
>>>         -optc-Waggregate-return -optc-Wbad-function-cast
>>>         -optc-I../includes -optc-I. -optc-Iparallel
>>>         -optc-DCOMPILING_RTS -optc-fomit-frame-pointer -H16m -O 
>>>         -O2 -static -#include Prelude.h -#include Rts.h -#include
>>> RtsFlags.h -#include RtsUtils.h -#include StgRun.h -#include
>>> Schedule.h -#include Printer.h -#include Sanity.h -#include
>>> Storage.h -#include SchedAPI.h -#include Timer.h -#include Itimer.h
>>> -#include ProfHeap.h -#include LdvProfile.h -#include Profiling.h
>>> -#include Apply.h -fvia-C -dcmm-lint     -c Interpreter.c -o
>>> Interpreter.o Interpreter.c: In function `interpretBCO':
>>> Interpreter.c:405: syntax error before `const' Interpreter.c:405:
>>> `info' undeclared (first use in this function) Interpreter.c:405:
>>> (Each undeclared identifier is reported only once
>>> Interpreter.c:405: for each function it appears in.) gmake: ***
>>> [Interpreter.o] Error 1           
>>> 
>>> I tracked this down, and it looks like it is barfing on the
>>> occurence of 
>>> DECLARE_IPTR(info) in UPD_REAL_IND. A similar situation occurs in
>>> Schedule.c:3218: "syntax error before `const'". Looks like it is
>>> because 
>>> of the decl not appearing at the start of a block.
>>> 
>>> It is still a bit mysterious -- as the head is building fine on
>>> linux 
>>> each night. Any gcc hackers know why this could be? I'm using 2.95.3
>>> here.
>>> 
>>> The following patch makes these cases compile.
>>> 
>>> -- Don
>>> 
>>>
------------------------------------------------------------------------
>>> --- Updates.h.orig	Thu Sep  2 11:25:31 2004
>>> +++ Updates.h	Thu Sep  2 11:25:36 2004
>>> @@ -57,13 +57,15 @@
>>>     if you *really* need an IND use UPD_REAL_IND
>>>   */
>>>  #define UPD_REAL_IND(updclosure, ind_info, heapptr, and_then)
\
>>>         +	{
\ DECLARE_IPTR(info);						\
>>>         info = GET_INFO(updclosure);
\
>>>          AWAKEN_BQ(info,updclosure);
\
>>>         updateWithIndirection(GET_INFO(updclosure), ind_info,
\
>>>                               updclosure,
\
>>>                               heapptr,
\
>>> -			      and_then);
>>> +			      and_then);
\
>>> +	}
>> 
>> Ah, but it looks like adding braces to the macro then breaks its use
>> Cmm code: 
>> 
>>         ../../ghc/compiler/ghc-inplace -H16m -O  -O2 -static
>>         -#include Prelude.h -#include Rts.h -#include RtsFlags.h
>> -#include RtsUtils.h -#include StgRun.h -#include Schedule.h
>> -#include Printer.h -#include Sanity.h -#include Storage.h -#include
>> SchedAPI.h -#include Timer.h -#include Itimer.h -#include ProfHeap.h
>> -#include LdvProfile.h -#include Profiling.h -#include Apply.h
>> -fvia-C -dcmm-lint     -c Updates.cmm -keep-tmp-files -o Updates.o
>> Updates.cmm:61:160: parse error on input `{'      
>> 
>> This is occuring in the use of UPD_REAL_IND, by UPD_SPEC_IND in
>> UPD_FRAME_ENTRY_TEMPLATE, in Updates.cmm.
>> 
>> Maybe Simon has a better idea what is going on here?
> 
> 
> Explicitly wrapping braces around the two uses of UPD_IND in C code
> that don't compile let the entire rts go through. Yay. Patch below.
> 
> Still don't know why this isn't happening on the nightly build
> machines. 
> 
> -- Don
> 
>
------------------------------------------------------------------------
> Index: Interpreter.c
> ===================================================================
> RCS file: /cvs/fptools/ghc/rts/Interpreter.c,v
> retrieving revision 1.47
> diff -u -u -r1.47 Interpreter.c
> --- Interpreter.c	13 Aug 2004 13:10:02 -0000	1.47
> +++ Interpreter.c	2 Sep 2004 04:09:08 -0000
> @@ -402,7 +402,9 @@
>  	// Returning to an update frame: do the update, pop the update
>  	// frame, and continue with the next stack frame.
>  	INTERP_TICK(it_retto_UPDATE);
> +        {
>  	UPD_IND(((StgUpdateFrame *)Sp)->updatee, obj);
> +        }
>  	Sp += sizeofW(StgUpdateFrame);
>  	goto do_return;
> 
> Index: Schedule.c
> ===================================================================
> RCS file: /cvs/fptools/ghc/rts/Schedule.c,v
> retrieving revision 1.201
> diff -u -u -r1.201 Schedule.c
> --- Schedule.c	19 Aug 2004 11:27:45 -0000	1.201
> +++ Schedule.c	2 Sep 2004 04:09:09 -0000
> @@ -3215,7 +3215,9 @@
>  		SET_HDR(raise_closure, &stg_raise_info, CCCS);
>  		raise_closure->payload[0] = exception;
>  	    }
> +            {
>  	    UPD_IND(((StgUpdateFrame *)p)->updatee,raise_closure);
> +            }
>  	    p = next;
>  	    continue;
> 
> _______________________________________________
> Cvs-ghc mailing list
> Cvs-ghc at haskell.org
> http://www.haskell.org/mailman/listinfo/cvs-ghc



More information about the Cvs-ghc mailing list