Richard Guenther <richard.guent...@gmail.com> skribis: > On Mon, Oct 8, 2012 at 3:32 PM, Ludovic Courtès <l...@gnu.org> wrote: >> Richard Guenther <richard.guent...@gmail.com> skribis: >> >>> On Mon, Oct 8, 2012 at 1:42 PM, Ludovic Courtès <l...@gnu.org> wrote: >>>> Richard Guenther <richard.guent...@gmail.com> skribis: >>>> >>>>> On Mon, Oct 8, 2012 at 11:58 AM, Ludovic Courtès <l...@gnu.org> wrote: >>>>>> Richard Guenther <richard.guent...@gmail.com> skribis: >>>>>> >>>>>>> At -O0 no virtual operands are produced. TODO_rebuild_alias only >>>>>>> computes >>>>>>> points-to sets which are in itself not useful. >>>>>>> >>>>>>> What do you want to achieve with TODO_rebuild_alias? >>>>>> >>>>>> I basically want to use ‘ptr_derefs_may_alias_p’ in this particular pass. >>>>> >>>>> That should work. >>>> >>>> It actually does, except that ‘ptr_derefs_may_alias_p’ returns true for >>>> two SSA names in cases like this: >>>> >>>> double *p, *q; >>>> p = malloc (123); >>>> q = malloc (234); >>>> >>>> (Where ‘malloc’ has the ‘malloc’ attribute.) >>>> >>>> For some reason, there’s no such false positive when using >>>> TODO_rebuild_alias. >>> >>> Well, "that should work" means it works non-conservatively with >>> TODO_rebuild_alias, of course. >> >> Right. :-) So how can I get maximum accuracy, while avoid the assertion >> failure on -O0? > > You have to analyze the assert more. From the backtrace I cannot see > anything suspicious.
The assert in ‘make_decl_rtl’ is: gcc_assert (TREE_CODE (decl) != VAR_DECL || TREE_STATIC (decl) || TREE_PUBLIC (decl) || DECL_EXTERNAL (decl) || DECL_REGISTER (decl)); Upon inspection, ‘decl’ is VAR_DECL, but has all 4 flags above cleared. In my example source file, the assertion is hit here: numbers.c: In function ‘scm_c_make_polar’: numbers.c:8728:10: internal compiler error: in make_decl_rtl, at varasm.c:1163 That line in numbers.c reads this: sincos (ang, &s, &c); And indeed, the dump of my pass (with -ftree-dump-all) reads this: ;; Function scm_c_make_polar (scm_c_make_polar) Now a gimple register: D.26884 No longer having address taken: s No longer having address taken: c Symbols to be put in SSA form { s c D.26884 } Incremental SSA update started at block: 0 Number of blocks in CFG: 8 Number of blocks to update: 7 ( 88%) So it looks like there’s additional state corresponding to these variables that needs updating? Thanks, Ludo’.