[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