This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [debug-early] reuse variable DIEs and fix their context

On 08/28/14 06:58, Richard Biener wrote:
On Wed, Aug 27, 2014 at 4:42 AM, Aldy Hernandez <> wrote:
This patch fixes a bunch of guality failures.  With it I get 144 guality.exp
failures vs. 163 for "make check-gcc RUNTESTFLAGS=guality.exp".  A lot
better than 100% fail rate ;-).

Variable DIEs were not being reused.  Instead, variable DIEs even had the
wrong context (unilaterally the compilation unit).  The attached patch
reuses variable DIEs that have been outputted earlier.  It also fixes the
context by correcting the context on the second round.

I have also added a bit field to the DIE structure to record if a DIE has
been generated early.

Again, this is all a rough draft, but feel free to comment.

I wonder if we can't not force a proper context die (ISTR dwarf2out.c
lazily handles some contexts in some circumstances).  All parent

Hmmm, I don't see any of this lazy context setting you speak of, but...

"trees" should be readily available and we should be able to create
DIEs for them.

I wonder if instead of early dumping of all the DECLs, we could only dump the toplevel scoped DECLs, and let inheritance set the proper contexts.

We could start with calling dwarf2out_early_decl() for each function decl, and then for every global. This is analogous to what we currently do for late dwarf2out.

see final.c for the functions:
      if (!DECL_IGNORED_P (current_function_decl))
        debug_hooks->function_decl (current_function_decl);

see c/c-decl.c for the globals:
      FOR_EACH_VEC_ELT (*all_translation_units, i, t)
	c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t)));
      c_write_global_declarations_2 (BLOCK_VARS (ext_block));

The problem being that to calculate `ext_block' above, we need intimate knowledge of scopes and such, only available in the FE. Is there a generic way of determining if a DECL is in global scope? If, so we could do:

	foreach decl in fld.decls
		if (is_global_scope(decl))
			dwarf2out_decl (decl)

...and contexts will magically be set.

Is there such a way, or am I going about this the wrong way?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]