On Tue, Oct 13, 2015 at 02:22:36PM +0300, Maxim Ostapenko wrote: > This is the final patch. Force libsanitizer to use an old ABI for ubsan > float cast data descriptors, because for some exprs (e.g. that type of > tcc_declaration) we can't get the right location for now. I'm not sure about > this, perhaps it should be fixed in GCC somehow.
I don't like this (neither the heuristics on the libubsan, it wouldn't be a big deal to add a new library entrypoint). If because of the heuristics you need to ensure that the SourceLocation is always known, then either you check in ubsan.c whether expand_location gives you NULL xloc.file and in that case use old style float cast overflow (without location) - i.e. pass 0, NULL, otherwise you use new style, i.e. pass 1, &loc. Or arrange through some special option to emit something like { "<unknown>", 0, 0 } instead of { NULL, 0, 0 } for the float cast case. And, regardless of this, any progress in making sure we have fewer cases with UNKNOWN_LOCATION on this will not hurt. I think at this point I'd prefer the first choice, i.e. using old style for locations without filename, and new style otherwise. > 2015-10-13 Maxim Ostapenko <m.ostape...@partner.samsung.com> > > * ubsan/ubsan_handlers.cc (looksLikeFloatCastOverflowDataV1): Always > return true for now. > > Index: libsanitizer/ubsan/ubsan_handlers.cc > =================================================================== > --- libsanitizer/ubsan/ubsan_handlers.cc (revision 250059) > +++ libsanitizer/ubsan/ubsan_handlers.cc (working copy) > @@ -307,6 +307,9 @@ > } > > static bool looksLikeFloatCastOverflowDataV1(void *Data) { > + // (TODO): propagate SourceLocation into DataDescriptor and use this > + // heuristic than. > + return true; > // First field is either a pointer to filename or a pointer to a > // TypeDescriptor. > u8 *FilenameOrTypeDescriptor; Jakub