diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f70ee711e6..01604a81c7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2012-09-10 Joel Brobecker + + * ada-lang.c (coerce_unspec_val_to_type): Make sure that + the optimized_out flag is preserved. + 2012-09-10 Anthony Green * moxie-tdep.c (moxie_analyze_prologue): Update for function diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index bba045b4ba..f45815f768 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -581,6 +581,7 @@ coerce_unspec_val_to_type (struct value *val, struct type *type) set_value_bitsize (result, value_bitsize (val)); set_value_bitpos (result, value_bitpos (val)); set_value_address (result, value_address (val)); + set_value_optimized_out (result, value_optimized_out (val)); return result; } } diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index b33b6fabc2..e9db80fb75 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-09-10 Joel Brobecker + + * gdb.ada/optim_drec: New testcase. + 2012-09-10 Doug Evans * boards/fission.exp: Explicitly mark "board" as not remote. diff --git a/gdb/testsuite/gdb.ada/optim_drec.exp b/gdb/testsuite/gdb.ada/optim_drec.exp new file mode 100644 index 0000000000..6508e047d6 --- /dev/null +++ b/gdb/testsuite/gdb.ada/optim_drec.exp @@ -0,0 +1,34 @@ +# Copyright 2012 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +load_lib "ada.exp" + +standard_ada_testfile foo + +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } { + return -1 +} + +clean_restart ${testfile} + +if ![runto "foo" ] then { + perror "Couldn't run ${testfile}" + return +} + +gdb_test "print z" \ + "= (\\(a => .*, b => .*, c => .*\\)|)" + + diff --git a/gdb/testsuite/gdb.ada/optim_drec/foo.adb b/gdb/testsuite/gdb.ada/optim_drec/foo.adb new file mode 100644 index 0000000000..88fd65262f --- /dev/null +++ b/gdb/testsuite/gdb.ada/optim_drec/foo.adb @@ -0,0 +1,25 @@ +-- Copyright 2012 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +procedure Foo is + type Discriminants_Record (A : Integer; B : Boolean) is record + C : Float; + end record; + -- The following variable is unused on purpose, and might be + -- optimized out by the compiler. + Z : Discriminants_Record := (A => 1, B => False, C => 2.0); +begin + null; +end Foo;