On Mon, Nov 7, 2011 at 5:41 PM, Xinliang David Li <davi...@google.com> wrote:
> Here is the stack trace when the watch point is hit (the watch point
> is on address &cleanups->base.prefix.num
>
> David
>
> #0  memset () at ../sysdeps/x86_64/memset.S:336
> #1  0x0000000000d1528d in poison_pages () at
> /usr/local/google/davidxl/dev/gcc/tot/gcc/ggc-page.c:1983
> #2  0x0000000000d15424 in ggc_collect () at
> /usr/local/google/davidxl/dev/gcc/tot/gcc/ggc-page.c:2076
> #3  0x0000000001028d7f in cgraph_finalize_function
> (decl=0x7ffff577d600, nested=0 '\000') at
> /usr/local/google/davidxl/dev/gcc/tot/gcc/cgraphunit.c:376

Hm.  We already conditionally arrange for cgraph_finalize_function to not
call ggc_collect - so it seems that doing so is even less safe than originally
thought.

Which means I think we should push calling ggc_collect to the callers,
which for the C++ frontend means ...

> #4  0x0000000000988010 in expand_or_defer_fn (fn=0x7ffff577d600) at
> /usr/local/google/davidxl/dev/gcc/tot/gcc/cp/semantics.c:3797
> #5  0x0000000000a678a7 in maybe_clone_body (fn=0x7ffff5770700) at
> /usr/local/google/davidxl/dev/gcc/tot/gcc/cp/optimize.c:426
> #6  0x0000000000987aa3 in expand_or_defer_fn_1 (fn=0x7ffff5770700) at
> /usr/local/google/davidxl/dev/gcc/tot/gcc/cp/semantics.c:3722
> #7  0x0000000000987fe0 in expand_or_defer_fn (fn=0x7ffff5770700) at
> /usr/local/google/davidxl/dev/gcc/tot/gcc/cp/semantics.c:3792
> #8  0x000000000091c5f5 in synthesize_method (fndecl=0x7ffff5770700) at
> /usr/local/google/davidxl/dev/gcc/tot/gcc/cp/method.c:773
> #9  0x0000000000551fa0 in cp_finish_decl (decl=0x7ffff5770700,
> init=0x7ffff6d8f898, init_const_expr_p=0 '\000', asmspec_tree=0x0,
> flags=11) at /usr/local/google/davidxl/dev/gcc/tot/gcc/cp/decl.c:6286

... probably here.  Though I'd also approve a patch that simply removes
the ggc_collect call (and the nested parameter).  Honza - you probably
added the ggc_collect - what's the reason to do it in this lowlevel place?

Thanks,
Richard.

Reply via email to