On Mon, Apr 04, 2016 at 05:50:53PM +0200, Jan Hubicka wrote: > Hi, > as requested by Jakub, this patch makes devirtualization code to turn off > transformations based on assumption that cxa_pure_virtual will never be called > by a virtual call when -fsanitize=undefined is used. > > Bootstrapped/regtested x86_64-linux, will commit it shortly. > > PR ipa/66223 > * ipa-devirt.c (maybe_record_node): Do not optimize cxa_pure_virtual > calls when sanitizing. > (possible_polymorphic_call_target_p)" FIx formating. > > * g++.dg/ipa/devirt-51.C: New testcase. > Index: ipa-devirt.c > =================================================================== > --- ipa-devirt.c (revision 234715) > +++ ipa-devirt.c (working copy) > @@ -2438,10 +2438,14 @@ maybe_record_node (vec <cgraph_node *> & > { > gcc_assert (!target_node->global.inlined_to); > gcc_assert (target_node->real_symbol_p ()); > + /* When sanitizing, do not asume that cxa_pure_virutal is not called
s/asume/assume/ s/cxa/__cxa/ s/virutal/virtual/ > + by valid program. */ > + if (flag_sanitize & SANITIZE_UNDEFINED) > + ; I'd use SANITIZE_UNREACHABLE instead, that is the sanitizer for __builtin_unreachable (). Unless we want to split that into -fsanitize=unreachable -fsanitize=pure-virtual Jakub