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

Reply via email to