On 6/21/19 4:28 PM, Richard Biener wrote: > On Fri, Jun 21, 2019 at 4:13 PM Jakub Jelinek <ja...@redhat.com> wrote: >> >> On Fri, Jun 21, 2019 at 04:04:00PM +0200, Martin Liška wrote: >>> On 6/21/19 1:58 PM, Jakub Jelinek wrote: >>>> On Fri, Jun 21, 2019 at 01:52:09PM +0200, Martin Liška wrote: >>>>> On 6/21/19 1:47 PM, Jonathan Wakely wrote: >>>>>> On Fri, 21 Jun 2019 at 11:40, Martin Liška wrote: >>>>>>> Yes, I would be fine to deprecate that for GCC 10.1 >>>>>> >>>>>> Would it be appropriate to issue a warning in GCC 10.x if the option is >>>>>> used? >>>>> >>>>> Sure. With the patch attached one will see: >>>>> >>>>> $ gcc -frepo /tmp/main.cc -c >>>>> gcc: warning: switch ‘-frepo’ is no longer supported >>>>> >>>>> I'm sending patch that also removes -frepo tests from test-suite. >>>>> I've been testing the patch. >>>> >>>> IMHO for just deprecation of an option you don't want to remove it from the >>>> testsuite, just match the warning it will generate in those tests, and >>>> I'm not convinced you want to remove it from the documentation (rather than >>>> just saying in the documentation that the option is deprecated and might be >>>> removed in a later GCC version). >>> >>> Agree with you. I'm sending updated version of the patch. >>> Patch can bootstrap on x86_64-linux-gnu and survives regression tests. >> >> I'm also not convinced about the Deprecated flag, seems like that is a flag >> that we use for options that have been already removed. >> So, instead there should be some proper warning in the C++ FE for it, >> or just Warn. > > In principle -frepo is a nice idea - does it live up to its promises? That > is, > does it actually work, for example when throwing it on the libstdc++ > testsuite or a larger C++ project?
I've just tested tramp3d, and it does not survive linking: g++ tramp3d-v4.o collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking collect: recompiling tramp3d-v4.cpp collect: relinking /usr/lib64/gcc/x86_64-suse-linux/9/../../../../x86_64-suse-linux/bin/ld: /tmp/ccEeuyj7.ltrans0.ltrans.o: in function `RefCountedBlockPtr<FieldEngineBaseData<3, Vector<3, double, Full>, ViewEngine<3, IndexFunction<GenericURM<MeshTraits<3, double, UniformRectilinearTag, CartesianTag, 3> >::PositionsFunctor> > >, false, RefBlockController<FieldEngineBaseData<3, Vector<3, double, Full>, ViewEngine<3, IndexFunction<GenericURM<MeshTraits<3, double, UniformRectilinearTag, CartesianTag, 3> >::PositionsFunctor> > > > >::RefCountedBlockPtr(RefCountedBlockPtr<FieldEngineBaseData<3, Vector<3, double, Full>, ViewEngine<3, IndexFunction<GenericURM<MeshTraits<3, double, UniformRectilinearTag, CartesianTag, 3> >::PositionsFunctor> > >, false, RefBlockController<FieldEngineBaseData<3, Vector<3, double, Full>, ViewEngine<3, IndexFunction<GenericURM<MeshTraits<3, double, UniformRectilinearTag, CartesianTag, 3> >::PositionsFunctor> > > > > const&)': <artificial>:(.text+0x4181b): undefined reference to `RefCountedPtr<RefBlockController<FieldEngineBaseData<3, Vector<3, double, Full>, ViewEngine<3, IndexFunction<GenericURM<MeshTraits<3, double, UniformRectilinearTag, CartesianTag, 3> >::PositionsFunctor> > > > >::RefCountedPtr(RefCountedPtr<RefBlockController<FieldEngineBaseData<3, Vector<3, double, Full>, ViewEngine<3, IndexFunction<GenericURM<MeshTraits<3, double, UniformRectilinearTag, CartesianTag, 3> >::PositionsFunctor> > > > > const&)' /usr/lib64/gcc/x86_64-suse-linux/9/../../../../x86_64-suse-linux/bin/ld: /tmp/ccEeuyj7.ltrans0.ltrans.o: in function `std::_Vector_base<Node<Range<3>, Interval<3> >, std::allocator<Node<Range<3>, Interval<3> > > >::_Vector_impl::~_Vector_impl()': <artificial>:(.text+0xc1890): undefined reference to `std::allocator<Node<Range<3>, Interval<3> > >::~allocator()' /usr/lib64/gcc/x86_64-suse-linux/9/../../../../x86_64-suse-linux/bin/ld: /tmp/ccEeuyj7.ltrans0.ltrans.o: in function `std::_Vector_base<Node<Range<3>, Interval<3> >, std::allocator<Node<Range<3>, Interval<3> > > >::_Vector_base()': <artificial>:(.text+0xc18aa): undefined reference to `std::_Vector_base<Node<Range<3>, Interval<3> >, std::allocator<Node<Range<3>, Interval<3> > > >::_Vector_impl::_Vector_impl()' /usr/lib64/gcc/x86_64-suse-linux/9/../../../../x86_64-suse-linux/bin/ld: /tmp/ccEeuyj7.ltrans0.ltrans.o: in function `std::vector<INode<3>, std::allocator<INode<3> > >::_S_use_relocate()': <artificial>:(.text+0xc496f): undefined reference to `std::vector<INode<3>, std::allocator<INode<3> > >::_S_nothrow_relocate(std::integral_constant<bool, true>)' /usr/lib64/gcc/x86_64-suse-linux/9/../../../../x86_64-suse-linux/bin/ld: /tmp/ccEeuyj7.ltrans0.ltrans.o: in function `std::_Vector_base<Node<Range<3>, Interval<3> >, std::allocator<Node<Range<3>, Interval<3> > > >::~_Vector_base()': <artificial>:(.text+0xc4cc1): undefined reference to `std::_Vector_base<Node<Range<3>, Interval<3> >, std::allocator<Node<Range<3>, Interval<3> > > >::_M_deallocate(Node<Range<3>, Interval<3> >*, unsigned long)' /usr/lib64/gcc/x86_64-suse-linux/9/../../../../x86_64-suse-linux/bin/ld: /tmp/ccEeuyj7.ltrans0.ltrans.o: in function `DataBlockPtr<double, false>::DataBlockPtr()': <artificial>:(.text+0xc6f96): undefined reference to `RefCountedBlockPtr<double, false, DataBlockController<double> >::RefCountedBlockPtr()' [... many other undefined references ...] Same happens also for GCC7. It does 17 iteration (#define MAX_ITERATIONS 17) and apparently 17 is not enough to resolve all symbols. And it's really slow. That said, I would recommend to remove it :) Martin > The option doesn't document > optimization issues but I assume template bodies are not available > for IPA optimizations unless -frepo is combined with LTO where the > template CU[s] then bring them in. > > So I'm not sure - do we really want to remove this feature? > > Richard. > >> Jakub