anon-union.exp revision 1.10
1# Tests for anonymous union support. 2# Copyright 1998-2023 Free Software Foundation, Inc. 3 4# This program is free software; you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation; either version 3 of the License, or 7# (at your option) any later version. 8# 9# This program is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# You should have received a copy of the GNU General Public License 15# along with this program. If not, see <http://www.gnu.org/licenses/>. 16 17# Written by Satish Pai <pai@apollo.hp.com> 1997-08-19 18 19# This file is part of the gdb testsuite 20 21# 22# test running programs 23# 24 25 26if { [skip_cplus_tests] } { continue } 27 28standard_testfile .cc 29 30if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { 31 return -1 32} 33 34if {![runto_main]} { 35 continue 36} 37 38gdb_test_no_output "set width 0" 39 40#send_gdb "ptype foo\n" 41#gdb_expect { 42# -re "\r\n$gdb_prompt $" { 43# pass "ptype foo" 44# } 45# -re ".*$gdb_prompt $" { fail "ptype foo" } 46# timeout { fail "(timeout) ptype foo" } 47#} 48 49#send_gdb "ptype bar\n" 50#gdb_expect { 51# -re "\r\n$gdb_prompt $" { 52# pass "ptype foo" 53# } 54# -re ".*$gdb_prompt $" { fail "ptype foo" } 55# timeout { fail "(timeout) ptype foo" } 56#} 57 58# NOTE: Add -- ptype foo.x, etc. when things are working 59 60#Initialize foo 61gdb_test "next" "40\[ \t\]*foo.paper = 33;" "next 1" 62 63# Print out the big anon union. 64gdb_test "print foo" \ 65 "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 0, x = \{rock = 0, rock2 = 0\}, \{qux = 0, mux = 0\}, boulder = 0\}, \{paper = 0, cloth = 0\}, num2 = \{two = 0, three = 0\}\}" \ 66 "print foo 1" 67 68# Step over assignment to member 69 70gdb_test "next" "41\[ \t\]*foo.pebble = 44;" "next 2" 71 72# Now print out anon union again 73gdb_test "print foo" \ 74 "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 0, x = \{rock = 0, rock2 = 0\}, \{qux = 0, mux = 0\}, boulder = 0\}, \{paper = 33, cloth = 33\}, num2 = \{two = 0, three = 0\}\}" \ 75 "print foo 2" 76 77# Modify the member just set 78gdb_test_no_output "set var foo.cloth = 35" "set var foo.cloth" 79 80# Now print out anon union again to see if the right member was set 81gdb_test "print foo" \ 82 "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 0, x = \{rock = 0, rock2 = 0\}, \{qux = 0, mux = 0\}, boulder = 0\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}" \ 83 "print foo 3" 84 85# Step over next assignment to member 86 87gdb_test "next" "42\[ \t\]*foo.mux = 55;" "next 3" 88 89# Now print out anon union again 90gdb_test "print foo" \ 91 "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 44, x = \{rock = 44, rock2 = 0\}, \{qux = 44, mux = 44\}, boulder = 44\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}" \ 92 "print foo 4" 93 94# Modify the member just set 95gdb_test_no_output "set var foo.pebble = 45" "set var foo.pebble" 96 97# Now print out anon union again to see if the right member was set 98gdb_test "print foo" \ 99 "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 45, x = \{rock = 45, rock2 = 0\}, \{qux = 45, mux = 45\}, boulder = 45\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}" \ 100 "print foo 5" 101 102# Modify another member at a different level 103gdb_test_no_output "set var foo.qux = 46" "set var foo.qux" 104 105# Now print out anon union again to see if the right member was set 106gdb_test "print foo" \ 107 "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 46, x = \{rock = 46, rock2 = 0\}, \{qux = 46, mux = 46\}, boulder = 46\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}" \ 108 "print foo 6" 109 110# Modify the member at another level, but not the first one in the union 111gdb_test_no_output "set var foo.mux = 47" "set var foo.mux" 112 113# Now print out anon union again to see if things worked 114gdb_test "print foo" \ 115 "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 47, x = \{rock = 47, rock2 = 0\}, \{qux = 47, mux = 47\}, boulder = 47\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}" \ 116 "print foo 7" 117 118# Modify a member of a struct in an anon union 119gdb_test_no_output "set var foo.x.rock = 48" "set var foo.x.rock" 120 121# Now print out anon union again to see if things worked 122gdb_test "print foo" \ 123 "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 48, x = \{rock = 48, rock2 = 0\}, \{qux = 48, mux = 48\}, boulder = 48\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}" \ 124 "print foo 8" 125 126# Modify a member of a struct in an anon union, but something 127# that doesn't alias to some other union member 128gdb_test_no_output "set var foo.x.rock2 = 49" "set var foo.x.rock2" 129 130# Now print out anon union again to see if things worked 131gdb_test "print foo" \ 132 "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 48, x = \{rock = 48, rock2 = 49\}, \{qux = 48, mux = 48\}, boulder = 48\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}" \ 133 "print foo 9" 134 135# Step over next four assignments 136gdb_test "next 4" "53\[ \t\]*w = 45;" 137 138# Tests for anon unions that are not members of a class or struct 139 140gdb_test "print w" "\\$\[0-9\]* = 0" "print w 1" 141 142gdb_test "print z" "\\$\[0-9\]* = 0" "print z 1" 143 144# Step over next assignment to w 145gdb_test "next" "55\[ \t\]*int j = 0;" "next 5" 146 147# See if the change in value is noticed 148gdb_test "print w" "\\$\[0-9\]* = 45" "print w 2" 149 150# See if z shows the same value 151gdb_test "print z" "\\$\[0-9\]* = 45" "print z 2" 152 153# Set the anon union member 154gdb_test_no_output "set var z = 27" "set var z" 155 156# See if the change in value is noticed 157gdb_test "print w" "\\$\[0-9\]* = 27" "print w 3" 158 159# See if z shows the same value 160gdb_test "print z" "\\$\[0-9\]* = 27" "print z 3" 161