Disable gcc_rich_location copying and assignment.

gcc/cp/ChangeLog:

	* parser.c (cp_parser_selection_statement): Use direct initialization
	instead of copy.

gcc/ChangeLog:

	* gcc-rich-location.h (gcc_rich_location): Make ctor explicit.

libcpp/ChangeLog:

	* include/line-map.h (class rich_location): Disable copying and
	assignment.
This commit is contained in:
Martin Sebor 2021-08-31 11:15:21 -06:00
parent e45d5b6bf1
commit e4d2305adf
3 changed files with 12 additions and 4 deletions

View File

@ -12848,7 +12848,7 @@ cp_parser_selection_statement (cp_parser* parser, bool *if_p,
IF_STMT_CONSTEVAL_P (statement) = true;
condition = finish_if_stmt_cond (boolean_false_node, statement);
gcc_rich_location richloc = tok->location;
gcc_rich_location richloc (tok->location);
bool non_compound_stmt_p = false;
if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
{
@ -12876,7 +12876,7 @@ cp_parser_selection_statement (cp_parser* parser, bool *if_p,
RID_ELSE))
{
cp_token *else_tok = cp_lexer_peek_token (parser->lexer);
gcc_rich_location else_richloc = else_tok->location;
gcc_rich_location else_richloc (else_tok->location);
guard_tinfo = get_token_indent_info (else_tok);
/* Consume the `else' keyword. */
cp_lexer_consume_token (parser->lexer);

View File

@ -21,14 +21,16 @@ along with GCC; see the file COPYING3. If not see
#define GCC_RICH_LOCATION_H
/* A gcc_rich_location is libcpp's rich_location with additional
helper methods for working with gcc's types. */
helper methods for working with gcc's types. The class is not
copyable or assignable because rich_location isn't. */
class gcc_rich_location : public rich_location
{
public:
/* Constructors. */
/* Constructing from a location. */
gcc_rich_location (location_t loc, const range_label *label = NULL)
explicit gcc_rich_location (location_t loc, const range_label *label = NULL)
: rich_location (line_table, loc, label)
{
}

View File

@ -1670,6 +1670,12 @@ class rich_location
/* Destructor. */
~rich_location ();
/* The class manages the memory pointed to by the elements of
the M_FIXIT_HINTS vector and is not meant to be copied or
assigned. */
rich_location (const rich_location &) = delete;
void operator= (const rich_location &) = delete;
/* Accessors. */
location_t get_loc () const { return get_loc (0); }
location_t get_loc (unsigned int idx) const;