Add new argument NOSIDE to find_overload_match.

This is a fix for PR c++/17132.
If this new argument is set to EVAL_AVOID_SIDE_EFFECTS, then the object's
memory will not be read while picking the best overload match.

gdb/

	* eval.c: Update all calls to find_overload_match.
	* valarith.c: Likewise.
	(value_user_defined_cpp_op, value_user_defined_op): New
	argument NOSIDE.  Update all callers.
	* valops.c (find_overload_match): New argument NOSIDE.
	* value.h (find_overload_match): Update signature.

gdb/testsuite

	* gdb.cp/pr17132.cc: New file.
	* gdb.cp/pr17132.exp: New file.
This commit is contained in:
Siva Chandra
2014-07-09 10:25:48 -07:00
parent 940df40812
commit e66d444669
8 changed files with 146 additions and 14 deletions

View File

@ -1563,7 +1563,7 @@ evaluate_subexp_standard (struct type *expect_type,
NON_METHOD, /* not method */
NULL, NULL, /* pass NULL symbol since
symbol is unknown */
NULL, &symp, NULL, 0);
NULL, &symp, NULL, 0, noside);
/* Now fix the expression being evaluated. */
exp->elts[save_pos1 + 2].symbol = symp;
@ -1599,7 +1599,7 @@ evaluate_subexp_standard (struct type *expect_type,
METHOD, /* method */
&arg2, /* the object */
NULL, &valp, NULL,
&static_memfuncp, 0);
&static_memfuncp, 0, noside);
if (op == OP_SCOPE && !static_memfuncp)
{
@ -1670,7 +1670,7 @@ evaluate_subexp_standard (struct type *expect_type,
NULL, /* no need for name */
NON_METHOD, /* not method */
NULL, function, /* the function */
NULL, &symp, NULL, no_adl);
NULL, &symp, NULL, no_adl, noside);
if (op == OP_VAR_VALUE)
{