[GCC-XML] last commit

Brad King brad.king at kitware.com
Wed Jun 18 15:13:42 EDT 2008


Brad King wrote:
> This is very strange indeed.  I reduced the example to just
> 
>   namespace N {
>     struct A {};
>   #if 1
>     struct B0 { const A a; };
>   #endif
>     struct B  { const A a; };
>   }
> 
> If you switch the "1" to a "0" then all the decls in "A" show up.  I
> added some debugging output to the dump code.  GCC doesn't even have an
> internal representation for the missing decls.  Note the only difference
> is whether a struct whose _name_ has at least two characters contains a
> _const_ member of type A.  Even stranger, if it is put outside a namespace:
> 
>   struct A {};
>   struct B  { const A a; };
> 
> then the length of the name does not matter.  Just having struct B is
> enough to block the decls.  By commenting it out they all show up.
> 
> This must be some strange quirk in the GCC parser implementation.
> Unfortunately we cannot report this as a bug to GCC folks unless we can
> produce a C++ example that won't compile.

I just had some time to track this down.  It's not a GCC problem but in
fact a subtle bug introduced by the previous commit.  It started doing
the lazy declarations during the dump, so the order mattered.  Doing the
implicit declarations of B or B0 recursively does them for A too if they
are not already done.  Doing the recursive implicit declarations during
the xml dump seems to be a bad time.  The reason the name of B v. B0
affected things was simply the order resulting from the class name hash.

For now I've removed the change and re-opened the original bug:

  http://www.gccxml.org/Bug/view.php?id=7148

I'll have to find a better place to get the implicit declarations done
before the dump.

-Brad



More information about the gccxml mailing list