This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Do not optimize some polymorphic calls with -fsanitize=undefined


> 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

Thanks. This is about case where we optimize undefined call (which would
otherwise land in cxa_pure_virtual) into some other virtual method (that
is the only resonable choice).  I suppose UNREACHABLE makes sense here.
I think I already commited the patch but I will update this.

Honza

> 
> 	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]