From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 74305 invoked by alias); 14 Jun 2019 14:09:21 -0000 Mailing-List: contact gdb-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: , Sender: gdb-cvs-owner@sourceware.org List-Subscribe: Sender: gdb-cvs-owner@sourceware.org Received: (qmail 74227 invoked by uid 306); 14 Jun 2019 14:09:20 -0000 Date: Fri, 14 Jun 2019 14:09:00 -0000 Message-ID: <20190614140920.74226.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Tom Tromey To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Allow re-assigning to convenience variables X-Act-Checkin: binutils-gdb X-Git-Author: Tom Tromey X-Git-Refname: refs/heads/master X-Git-Oldrev: 4268ec187d401b9b132afa1a13c73e0026a53c5d X-Git-Newrev: f411722cbc18820e5266ec4c2aadd2269eb15447 X-SW-Source: 2019-06/txt/msg00076.txt.bz2 https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=f411722cbc18820e5266ec4c2aadd2269eb15447 commit f411722cbc18820e5266ec4c2aadd2269eb15447 Author: Tom Tromey Date: Wed Jun 5 10:53:16 2019 -0600 Allow re-assigning to convenience variables In Ada mode, re-assigning an array of a different size to a convenience variable will cause an error: (gdb) set lang ada (gdb) set $v := "abc" (gdb) set $v := "abcd" cannot assign arrays of different length However, this does not really make sense -- instead, it should always be possible to overwrite a convenience variable. This patch fixes this bug. This was reviewed off-list by Joel. I'm checking it in. gdb/ChangeLog 2019-06-14 Tom Tromey * ada-lang.c (ada_evaluate_subexp) : Always allow assignment to an internalvar. gdb/testsuite/ChangeLog 2019-06-14 Tom Tromey * gdb.ada/set_wstr.exp: Add reassignment test. Diff: --- gdb/ChangeLog | 5 +++++ gdb/ada-lang.c | 6 +++++- gdb/testsuite/ChangeLog | 4 ++++ gdb/testsuite/gdb.ada/set_wstr.exp | 5 +++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9fbfcfa..ee3377c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2019-06-14 Tom Tromey + * ada-lang.c (ada_evaluate_subexp) : Always + allow assignment to an internalvar. + +2019-06-14 Tom Tromey + * ada-lex.l: Allow "_" in attribute names. 2019-06-14 Tom Tromey diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 1f0ada3..1b5f183 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -10486,7 +10486,11 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp, arg2 = evaluate_subexp (type, exp, pos, noside); if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS) return arg1; - if (ada_is_fixed_point_type (value_type (arg1))) + if (VALUE_LVAL (arg1) == lval_internalvar) + { + /* Nothing. */ + } + else if (ada_is_fixed_point_type (value_type (arg1))) arg2 = cast_to_fixed (value_type (arg1), arg2); else if (ada_is_fixed_point_type (value_type (arg2))) error diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 9bfd570..8219486 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2019-06-14 Tom Tromey + * gdb.ada/set_wstr.exp: Add reassignment test. + +2019-06-14 Tom Tromey + * gdb.ada/formatted_ref.exp (test_p_x_addr): Check 'unchecked_access and 'unrestricted_access as well. diff --git a/gdb/testsuite/gdb.ada/set_wstr.exp b/gdb/testsuite/gdb.ada/set_wstr.exp index 0c5c42c..ac70985 100644 --- a/gdb/testsuite/gdb.ada/set_wstr.exp +++ b/gdb/testsuite/gdb.ada/set_wstr.exp @@ -72,3 +72,8 @@ gdb_test "print rws" \ gdb_test "set variable www := \"1#2#3#4#5#\"" \ "cannot assign arrays of different length" + +# However, reassigning an array of a different length should work when +# the LHS is a convenience variable. +gdb_test_no_output "set variable \$str := \"1234\"" +gdb_test_no_output "set variable \$str := \"12345\""