On Sat, Sep 10, 2011 at 11:30, Gabriel Charette <gcharet...@gmail.com> wrote: > On Fri, Sep 9, 2011 at 4:37 PM, Diego Novillo <dnovi...@google.com> wrote: >> >> The main problem fixed here is that name lookups for class methods >> uses a binary search that assumes that the methods in >> CLASSTYPE_METHOD_VEC are sorted by pointer value. >> >> Since the reader typically allocates trees in a different pattern than >> the writer, it is common for the symbols in the vector to have >> different pointer values, so the order used by the writer is different >> than the reader. >> >> This was causing us to fail name lookups when generating the pph image >> for x6dynarray5.h and x6dynarray6.h. >> >> To fix this, I am making finish_struct_methods an extern function and >> calling it after reading a type that has a CLASSTYPE_METHOD_VEC. >> >> This exposed another failure that was simple enough to roll in >> together with this patch. We should not emit preloaded symbols when >> writing the names in the global namespace. This was causing a >> DECL_CHAIN cycle. I added a new filter PPHF_NO_PREFS to skip the >> preloaded symbols when needed. >> > > The loop in the DECL_CHAIN in x6dynarray5 was already there before. > This is why I had introduced the preloaded cache to do something along > those lines. > > However I don't think simply filtering it out is sufficient in this > case.
It is for this case. But you are right that it isn't for state mutations like the one you describe later. I'm trying to fix this by detecting state changes between read-time and write-time. I'm thinking of checksumming the input tree and create a merge record when we notice that the tree has mutated during write. We would only checksum the input when generating PPH images, so this would never slow down the reader. > Anyways, just can't help it, but keep reading all the patches coming in :)! Heh. I can send you the copyright assignments for you to fill out. Don't think you can escape so easily ;) Diego.