On April 28, 2015 11:05:44 AM GMT+02:00, Jan Hubicka <hubi...@ucw.cz> wrote: >Hi, >I will fix the free count issue - my internet access in China was bit >sporadic >and I hoped you will know why the count seem to disagree between PPC64 >and Linux >builds. In meantime PPC64 stopped to build for me. >> >> (early) dwarf2out is a good place, likewise verifying right after >> free-lang-data. I agree that LTO type merging is also a good place. >> >> I hope we get early dwarf2out merged soon and can enable >free-lang-data >> also for non-LTO compilation. >> >> > LTO-Boostrapped/regtested x86_64-linux without Ada. I am doing full >run on >> > PPC64, but it fails on unrelated libgmp miscomplation I proably >need to track down >> > first. >> > >> > OK if testing passes? >> >> Please make sure to test _all_ languages (all,ada,obj-c++,go) and >also >> include multilibs in testing (thus -m64/-m32). >> >> You don't verify that TYPE_CANONICAL is consistent nor that >TYPE_CANONICAL >> doesn't form a tree (TYPE_CANONICAL (t) == TYPE_CANONICAL >(TYPE_CANONICAL >> (t))). > >Yep, I have this one in queue, but of course it fires, thus it is not >in the initial patch. >> > +#ifdef ENABLE_CHECKING >> > + verify_type (expr); >> > +#endif >> >> As said I think that doing this after free-lang-data is better. Like >> here: >> >> /* Traverse every type found freeing its language data. */ >> FOR_EACH_VEC_ELT (fld.types, i, t) >> free_lang_data_in_type (t); >> >> do another loop verifying types. > >OK, we however build new types in middle end >(ipa-icf/ipa-split/ipa-sra), >so perhaps we can check on both places? >> >> > stream_write_tree (ob, TYPE_SIZE (expr), ref_p); >> > stream_write_tree (ob, TYPE_SIZE_UNIT (expr), ref_p); >> > stream_write_tree (ob, TYPE_ATTRIBUTES (expr), ref_p); >> > Index: dwarf2out.c >> > =================================================================== >> > --- dwarf2out.c (revision 222391) >> > +++ dwarf2out.c (working copy) >> > @@ -21264,6 +21264,11 @@ dwarf2out_decl (tree decl) >> > { >> > dw_die_ref context_die = comp_unit_die (); >> > >> > +#ifdef ENABLE_CHECKING >> > + if (TREE_TYPE (decl)) >> > + verify_type (TREE_TYPE (decl)); >> > +#endif >> > + >> >> Hmm, this has the chance to verify types multiple times, no? >Wouldn't >> gen_type_die_with_usage be a better place to verify the type we >create >> the DIE for? > >That looks better indeed. The checks are not paritcularly expensive >though.
+ if (((TREE_CODE (t) == ENUMERAL_TYPE && COMPLETE_TYPE_P (t)) + || TREE_CODE (t) == INTEGER_TYPE + || TREE_CODE (t) == BOOLEAN_TYPE + || TREE_CODE (t) == REAL_TYPE + || TREE_CODE (t) == FIXED_POINT_TYPE) + && (TYPE_MAX_VALUE (t) != TYPE_MAX_VALUE (tv) + || TYPE_MAX_VALUE (t) != TYPE_MAX_VALUE (tv))) + { + error ("type variant has different TYPE_MIN_VALUE"); + debug_tree (tv); + return false; + } The second || check of TYPE_MAX_VALUE should probably be something else, maybe TYPE_MIN_VALUE ? Why don't we warn about such useless || where both hands are identical? :) Thanks, > >Honza