[m-rev.] for review: work around gcc bug (?)

Julien Fischer juliensf at csse.unimelb.edu.au
Tue Jan 22 17:00:38 AEDT 2008


On Tue, 22 Jan 2008, Peter Wang wrote:

> Has anyone else seen this?

Yes.

> It's happened now on my laptop and on
> neptune, both x86-64 machines with gcc 4.1.2.  Strange that it doesn't
> happen on the nightly builds.

No it isn't, the nightly builds on neptune use gcc 3.4 ;-)

> It would be better to work around the
> problem in MR_COMPUTED_GOTO but I don't know how.
>
>
> Branches: main
>
> compiler/purity.m:
>        Work around a segfault while purity checking invalid/purity/purity.m.
>        It seems to be due to gcc 4.1.2 on x86-64 miscompiling the computed
>        goto following the workaround at gcc -O1 and above.
>
> Index: compiler/purity.m
> ===================================================================
> RCS file: /home/mercury/mercury1/repository/mercury/compiler/purity.m,v
> retrieving revision 1.116
> diff -u -r1.116 purity.m
> --- compiler/purity.m   30 Dec 2007 08:23:54 -0000      1.116
> +++ compiler/purity.m   22 Jan 2008 05:20:27 -0000
> @@ -313,7 +313,9 @@
>     ),
>     WorstPurity = Purity,
>     perform_pred_purity_checks(!.PredInfo, Purity, DeclPurity,
> -        PromisedPurity, PurityCheckResult),
> +        PromisedPurity, PurityCheckResult0),
> +    % XXX works around a problem with gcc 4.1.2 on x86_64 machines

Replace this comment with the above log message.

> +    PurityCheckResult = workaround_gcc_bug(PurityCheckResult0),
>     (
>         PurityCheckResult = inconsistent_promise,
>         Spec = error_inconsistent_promise(ModuleInfo, !.PredInfo, PredId,
> @@ -339,6 +341,11 @@
>     ),
>     !:Specs = PredSpecs ++ !.Specs.
>
> +:- func workaround_gcc_bug(purity_check_result) = purity_check_result.
> +:- pragma no_inline(workaround_gcc_bug/1).
> +
> +workaround_gcc_bug(X) = X.
> +
> repuritycheck_proc(ModuleInfo, proc(_PredId, ProcId), !PredInfo) :-
>     pred_info_get_procedures(!.PredInfo, Procs0),
>     map.lookup(Procs0, ProcId, ProcInfo0),

Please enter this into mantis as well.

The diff is fine.

Julien.
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list