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

load_lib compile-support.exp

standard_testfile

get_compiler_info
set options {}
if [test_compiler_info gcc*] {
    lappend options additional_flags=-g3
    lappend options additional_flags=-std=gnu++11
    lappend options c++
}

set srcfilesoptions [list ${srcfile} ${options}]

if { [eval build_executable_from_specs ${testfile}.exp $testfile {$options} ${srcfilesoptions}] } {
    return -1
}

clean_restart ${testfile}

if ![runto_main] {
    return -1
}

if {[skip_compile_feature_tests]} {
    untested "compile command not supported (could not find libcc1 shared library?)"
    return -1
}

gdb_test_no_output "set language c++" \
    "Set language to C++"

gdb_test "compile print varint" " = 10"
gdb_test "compile print vararray" " = \\{1, 2, 3, 4, 5\\}"

setup_kfail compile/23586 *-*-*
gdb_test "compile print main" " = \\{int \\(void\\)\\} 0x\[0-9a-f\]+"

setup_kfail compile/23587 *-*-*
set test "compile print *vararray@3"
gdb_test_multiple $test $test {
    -re " = \\{1, 2, 3\\}\r\n$gdb_prompt $" {
	pass $test
    }
    -re "warning: .*All references to this method will be undefined\.\r\n" {
	exp_continue
    }
}

setup_kfail compile/23587 *-*-*
set test "compile print *vararrayp@3"
gdb_test_multiple $test $test {
    -re " = \\{1, 2, 3\\}\r\n$gdb_prompt $" {
	pass $test
    }
    -re "warning: .*All references to this method will be undefined\.\r\n" {
	exp_continue
    }
}

gdb_test "compile print/x 256" " = 0x100"
gdb_test {print $} " = 256"

gdb_test "compile print varobject" { = {field = 1}}
