On 8/6/20 8:57 AM, Richard Biener wrote:
On Thu, Aug 6, 2020 at 3:07 AM Andrew MacLeod <amacl...@redhat.com> wrote:
On 8/5/20 12:54 PM, Richard Biener via Gcc-patches wrote:
On August 5, 2020 5:09:19 PM GMT+02:00, Martin Jambor <mjam...@suse.cz> wrote:
On Fri, Jul 31 2020, Aldy Hernandez via Gcc-patches wrote:
[...]
* ipa-cp changes from vec<value_range> to std::vec<value_range>.
We are using std::vec to ensure constructors are run, which they
aren't
in our internal vec<> implementation. Although we usually steer away
from using std::vec because of interactions with our GC system,
ipcp_param_lattices is only live within the pass and allocated with
calloc.
Ummm... I did not object but I will save the URL of this message in the
archive so that I can waive it in front of anyone complaining why I
don't use our internal vec's in IPA data structures.
But it actually raises a broader question: was this supposed to be an
exception, allowed only not to complicate the irange patch further, or
will this be generally accepted thing to do when someone wants to have
a
vector of constructed items?
It's definitely not what we want. You have to find another solution to this
problem.
Richard.
Why isn't it what we want?
This is a small vector local to the pass so it doesn't interfere with
our PITA GTY.
The class is pretty straightforward, but we do need a constructor to
initialize the pointer and the max-size field. There is no allocation
done per element, so a small number of elements have a couple of fields
initialized per element. We'd have to loop to do that anyway.
GCC's vec<> does not provide he ability to run a constructor, std::vec
does.
Other places in the compiler use placement new here. The only
complication is re-allocation which would require move CTORs which
up to a few weeks ago were not available. But of course we want
our own re-allocation policy, thus vec<>, not std::vector.
Also you do
#include <vector>
inside ipa-fnsummary.c - you should know better to not include
system headers from .c files - they need to go in system.h.
You should do a
#define INCLUDE_VECTOR
before the system.h include in ipa-fnsummary.c instead.
This has already been fixed by Gerald (thanks!).
Aldy