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