https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82899
--- Comment #16 from Marc Glisse <glisse at gcc dot gnu.org> --- (patch should use 'fn && DECL_CONSTRUCTOR_P (fn)' since fn can be NULL) As I was half expecting, messing with the types that directly doesn't work. It means 'this' has type T*restrict, and if I try for instance to bind it with a T*const& reference, gcc is unwilling to discard the restrict qualifier. I wonder if modifying the declarations later (say during gimplification) to mark them with restrict would work. I'd rather avoid teaching the middle-end a second way that parameters can be __restrict (being the first argument of a C++ constructor), better if this can all be done in the front-end.