On 09/14/2017 09:15 AM, Simon Marchi wrote:
static struct piece_closure *
allocate_piece_closure (struct dwarf2_per_cu_data *per_cu,
- int n_pieces, struct dwarf_expr_piece *pieces,
+ const std::vector<dwarf_expr_piece> &&pieces,
const rval reference looks odd -- you can't really move
the internal elements out of a const vector. I think ...
struct frame_info *frame)
{
- struct piece_closure *c = XCNEW (struct piece_closure);
+ struct piece_closure *c = new piece_closure;
int i;
c->refc = 1;
c->per_cu = per_cu;
- c->n_pieces = n_pieces;
- c->pieces = XCNEWVEC (struct dwarf_expr_piece, n_pieces);
+ c->pieces = std::move (pieces);
... this isn't really moving, but actually copying, because
you'll end up calling 'std::vector(const std::vector &)', not
'std::vector(std::vector &&)'.
I wonder if there's ever a case for 'const T &&' parameters,
and if GCC could warn about them. At least in non-template
functions.