# Tests for anonymous union support.
# Copyright 1998-2021 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 <http://www.gnu.org/licenses/>.

# Written by Satish Pai <pai@apollo.hp.com> 1997-08-19

# This file is part of the gdb testsuite

#
# test running programs
#


if { [skip_cplus_tests] } { continue }

standard_testfile .cc

if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
    return -1
}

if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

gdb_test_no_output "set width 0"

#send_gdb "ptype foo\n"
#gdb_expect {
#   -re "\r\n$gdb_prompt $" {
#      pass "ptype foo"
#    }
#    -re ".*$gdb_prompt $" { fail "ptype foo" }
#    timeout { fail "(timeout) ptype foo" }
#}

#send_gdb "ptype bar\n"
#gdb_expect {
#   -re "\r\n$gdb_prompt $" {
#      pass "ptype foo"
#    }
#    -re ".*$gdb_prompt $" { fail "ptype foo" }
#    timeout { fail "(timeout) ptype foo" }
#}

# NOTE: Add -- ptype foo.x, etc. when things are working

#Initialize foo
gdb_test "next" "40\[ \t\]*foo.paper = 33;" "next 1"

# Print out the big anon union.
gdb_test "print foo" \
    "\\$\[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\}\}" \
    "print foo 1"

# Step over assignment to member

gdb_test "next" "41\[ \t\]*foo.pebble = 44;" "next 2"

# Now print out anon union again
gdb_test "print foo" \
    "\\$\[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\}\}" \
    "print foo 2"

# Modify the member just set
gdb_test_no_output "set var foo.cloth = 35" "set var foo.cloth"

# Now print out anon union again to see if the right member was set 
gdb_test "print foo" \
    "\\$\[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\}\}" \
    "print foo 3"

# Step over next assignment to member

gdb_test "next" "42\[ \t\]*foo.mux = 55;" "next 3"

# Now print out anon union again 
gdb_test "print foo" \
    "\\$\[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\}\}" \
    "print foo 4"

# Modify the member just set
gdb_test_no_output "set var foo.pebble = 45" "set var foo.pebble"

# Now print out anon union again to see if the right member was set 
gdb_test "print foo" \
    "\\$\[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\}\}" \
    "print foo 5"

# Modify another member at a different level
gdb_test_no_output "set var foo.qux = 46" "set var foo.qux"

# Now print out anon union again to see if the right member was set 
gdb_test "print foo" \
    "\\$\[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\}\}" \
    "print foo 6"

# Modify the member at another level, but not the first one in the union
gdb_test_no_output "set var foo.mux = 47" "set var foo.mux"

# Now print out anon union again to see if things worked
gdb_test "print foo" \
    "\\$\[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\}\}" \
    "print foo 7"

# Modify a member of a struct in an anon union
gdb_test_no_output "set var foo.x.rock = 48" "set var foo.x.rock"

# Now print out anon union again to see if things worked
gdb_test "print foo" \
    "\\$\[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\}\}" \
    "print foo 8"

# Modify a member of a struct in an anon union, but something
# that doesn't alias to some other union member
gdb_test_no_output "set var foo.x.rock2 = 49" "set var foo.x.rock2"

# Now print out anon union again to see if things worked
gdb_test "print foo" \
    "\\$\[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\}\}" \
    "print foo 9"

# Step over next four assignments
gdb_test "next 4" "53\[ \t\]*w = 45;"

# Tests for anon unions that are not members of a class or struct

gdb_test "print w" "\\$\[0-9\]* = 0" "print w 1"

gdb_test "print z" "\\$\[0-9\]* = 0" "print z 1"

# Step over next assignment to w
gdb_test "next" "55\[ \t\]*int j = 0;" "next 5"

# See if the change in value is noticed
gdb_test "print w" "\\$\[0-9\]* = 45" "print w 2"

# See if z shows the same value
gdb_test "print z" "\\$\[0-9\]* = 45" "print z 2"

# Set the anon union member 
gdb_test_no_output "set var z = 27" "set var z"

# See if the change in value is noticed
gdb_test "print w" "\\$\[0-9\]* = 27" "print w 3"

# See if z shows the same value
gdb_test "print z" "\\$\[0-9\]* = 27" "print z 3"
