On 6/16/21 12:11 PM, Martin Sebor wrote:
On 6/16/21 9:06 AM, David Malcolm wrote:
On Wed, 2021-06-16 at 08:52 -0600, Martin Sebor wrote:
On 6/16/21 6:38 AM, David Malcolm wrote:
On Tue, 2021-06-15 at 19:48 -0600, Martin Sebor wrote:

Thanks for writing the patch.

While debugging locations I noticed the semi_embedded_vec template
in line-map.h doesn't declare a copy ctor or copy assignment, but
is being copied in a couple of places in the C++ parser (via
gcc_rich_location).  It gets away with it most likely because it
never grows beyond the embedded buffer.

Where are these places?  I wasn't aware of this.

They're in the attached file along with the diff to reproduce
the errors.

Thanks.

Looks like:

    gcc_rich_location richloc = tok->location;

is implicitly constructing a gcc_rich_location, then copying it to
richloc.  This should instead be simply:

    gcc_rich_location richloc (tok->location);

which directly constructs the richloc in place, as I understand it.

I see, tok->location is location_t here, and the gcc_rich_location
ctor that takes it is not declared explicit (that would prevent
the implicit conversion).

The attached patch solves the rich_location problem by a) making
the ctor explicit, b) disabling the rich_location copy ctor, c)
changing the parser to use direct initialization.  (I CC Jason
as a heads up on the C++ FE bits.)

The C++ bits are fine.

The semi_embedded_vec should be fixed as well, regardless of this
particular use and patch.  Let me know if it's okay to commit (I'm
not open to disabling its copy ctor).

+  /* Not copyable or assignable.  */

This comment needs a rationale.

Jason

Reply via email to