> On Wed, Dec 14, 2022 at 4:20 PM Jan Hubicka via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > > > > Hi, > > > > > > Honza requested this after reviewing the patch that taught IPA-SRA > > > that REFERENCE_TYPEs are always non-NULL that the pass also handles > > > the first parameters of methods, this pointers, in the same way. So > > > this patch does that. > > > > > > The patch is undergoing bootstrap and testing on an x86_64-linux right > > > now. OK if it passes? > > > > > > Thanks, > > > > > > Martin > > > > > > > > > gcc/ChangeLog: > > > > > > 2022-12-14 Martin Jambor <mjam...@suse.cz> > > > > > > * ipa-sra.cc (create_parameter_descriptors): Consider the first > > > parameter of a method safe to dereference. > > > > > > gcc/testsuite/ChangeLog: > > > > > > 2022-12-14 Martin Jambor <mjam...@suse.cz> > > > > > > * g++.dg/ipa/ipa-sra-6.C: New test. > > > > OK, > > Are you sure that's safe? The docs for METHOD_TYPE doesn't say 'this' > is the first parameter nor does it say methods cannot be invoked for a > nullptr object. > > Do frontends other than C++ create METHOD_TYPE functions? Grep > shows uses in ada and objective C at least.
I think for Objective-C++ calling method is also considerd a dereference. We make similar assumptions in devirtualization code for some time. We could also check that the type is METHOD_TYPE satisfies odr_type_p if we want to look specifically for C++ methods. Honza > > > thanks a lot! > > Honza