# Copyright 2014-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/>.

# sizeof() tests with rvalue reference parameter types, based on
# gdb.cp/cpsizeof.exp.

standard_testfile .cc

if {[skip_cplus_tests]} { continue }

if {[prepare_for_testing ${testfile}.exp $testfile $srcfile \
    {debug c++ additional_flags="-std=gnu++11"}] } {
     return -1
}

if {![runto_main]} {
    perror "could not run to main"
    continue
}

gdb_breakpoint [gdb_get_line_number "break here"]
gdb_continue_to_breakpoint "break here"

# Compare sizeof from the compiler and gdb.  Do this once with the actual
# type name and once with a reference variable.
foreach v {char int long float double a4 a8 a12 Class Union Enum c4 u8 e12} {
    gdb_test "print size_$v == sizeof (${v}&&)" "= true"
    gdb_test "print size_$v == sizeof (${v}_rref)" "= true"
    gdb_test "print size_${v}p == sizeof (${v}*&&)" "= true"
    gdb_test "print size_${v}p == sizeof (${v}p_rref)" "= true"
}
