Work around GCC bug 63748

A recent change to eval.c triggered a GCC bug that causes a false positive
"may be used uninitialized" warning in evaluate_subexp_standard.  This seems
to be triggered by a specific CFG constructed via setjmp and gotos.

While the GCC bug is in the process of being fixed, there are released
compiler versions (in particular GCC 4.9) in the field that show this
problem.  In order to allow compiling GDB with one of those compilers,
this commit slightly reworks the CFG (in an equivalent way) of the
affected function, so that the GCC bug is no longer triggered.

gdb/ChangeLog:

	* eval.c (evaluate_subexp_standard): Work around GCC bug 63748.
This commit is contained in:
Ulrich Weigand 2014-11-10 15:11:44 +01:00
parent aceb5ff542
commit b1f28d992c
2 changed files with 6 additions and 2 deletions

View File

@ -1,3 +1,7 @@
2014-11-10 Ulrich Weigand  <uweigand@de.ibm.com>
* eval.c (evaluate_subexp_standard): Work around GCC bug 63748.
2014-11-07 Pedro Alves <palves@redhat.com>
* infrun.c (process_event_stop_test) <subroutine check>: Don't

View File

@ -1696,8 +1696,6 @@ evaluate_subexp_standard (struct type *expect_type,
do_call_it:
if (noside == EVAL_SKIP)
goto nosideret;
if (argvec[0] == NULL)
error (_("Cannot evaluate function -- may be inlined"));
if (noside == EVAL_AVOID_SIDE_EFFECTS)
@ -1804,6 +1802,8 @@ evaluate_subexp_standard (struct type *expect_type,
for (; tem <= nargs; tem++)
argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
argvec[tem] = 0; /* signal end of arglist */
if (noside == EVAL_SKIP)
goto nosideret;
goto do_call_it;
default: