[m-rev.] for review: fix bug #196: binary compatiblity checks in C grade don't work

Paul Bone paul at bone.id.au
Mon Jul 25 10:27:52 AEST 2016


On Mon, Jul 25, 2016 at 10:10:00AM +1000, Julien Fischer wrote:
> 
> On Mon, 25 Jul 2016, Paul Bone wrote:
> 
> >>Fix bug #196: binary compatibility checks in C grades do not work.
> >>
> >>These have been broken since 2011 because GCC and clang (at least) began
> >>optimising away the MR_grade variable we emit at the end of each generated .c
> >>file.  The fix is to replace the MR_grade variable with an exported function
> >>that references MR_GRADE_VAR in each generated .c file.
> >>
> >>compiler/llds_out_file.m:
> >>compiler/mlds_to_c.m:
> >>util/mkinit.c:
> >>     In each generated .c file, emit an exported function that references
> >>     MR_GRADE_VAR.
> >
> >I just upgraded to ROTD 2016-07-18 and noticed this new warning, it wasn't
> >there before:
> >
> >Mercury/asm_fast.gc.debug.stseg/x86_64-pc-linux-gnu/Mercury/cs/js_write_grammar_init.c:3380:13: warning: no previous prototype for ‘mercury_init_grade_check’ [-Wmissing-prototypes]
> >
> >I'm using gcc 5.4.0 20160609 on x86_64.  The warning seems to be grade
> >independant.  It also benign, things otherwise work as expected.
> 
> The problem is simply that mkinit is not emitting a prototype for the
> function mercury_init_grade_check.  It's not strictly necessary as
> nothing will ever call that function.  I'll modify mkinit to emit the
> prototype.

That's what I assumed.  Cheers.


-- 
Paul Bone


More information about the reviews mailing list