# Copyright 1997-1998, 2000-2004, 2007-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 <http://www.gnu.org/licenses/>.

# tests for namespaces
# Originally written by Satish Pai <pai@apollo.hp.com> 1997-07-23

# This file is part of the gdb testsuite

# Note: The original tests were geared to the HP aCC compiler,
# which has an idiosyncratic way of emitting debug info
# for namespaces.
# Note: As of 2000-06-03, they passed under g++ - djb



if { [skip_cplus_tests] } { continue }

standard_testfile .cc namespace1.cc

if [get_compiler_info c++] {
    return -1;
}

set xfail_class_types 0
if {[test_compiler_info {gcc-[0-3]-*}]
    || [test_compiler_info {gcc-4-[0-4]-*}]} {
    # The type in class is missing in older GCCs.
    set xfail_class_types 1
}

if {[prepare_for_testing $testfile.exp $testfile \
	 [list $srcfile $srcfile2] {debug c++}]} {
    return -1
}

gdb_test "show lang" "auto; currently c\\+\\+.*"

#
# set it up at a breakpoint so we can play with the variable values
#
if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

if ![runto 'marker1'] then {
    perror "couldn't run to marker1"
    continue
}

gdb_test "up" ".*main.*" "up from marker1"

# Access a data item inside a namespace using colons and
# single quotes. :-(

# NOTE: carlton/2003-09-24: the quotes are becoming less necessary (or
# even desirable.)  For tests where it should still work with quotes,
# I'm including versions both with and without quotes; for tests that
# shouldn't work with quotes, I'm only including one version.

gdb_test "print 'AAA::c'" \
    "\\$\[0-9\]* = 0 '\\\\(0|000)'" \
    "print 'AAA::c'"

gdb_test "print AAA::c" \
    "\\$\[0-9\]* = 0 '\\\\(0|000)'" \
    "print AAA::c"

# An object declared using "using".

gdb_test "print ina" "\\$\[0-9\]+ = {xx = 33}"

gdb_test_multiple "ptype ina" "ptype ina" {
    -re "type = class (AAA::|)inA \{\r\n\[ \]*public:\r\n\[ \]*int xx;\r\n\[ \]*\r\n\[ \]*.*int fum\\(int\\);\r\n\}\r\n$gdb_prompt $" {
	pass "ptype ina"
    }
    -re "type = class (AAA::|)inA \{\r\n\[ \]*public:\r\n\[ \]*int xx;\r\n\[ \]*\r\n\[ \]*int fum\\(int\\);\r\n.*\}\r\n$gdb_prompt $" {
	pass "ptype ina"
    }
}

# Check all functions are known to GDB

setup_xfail hppa*-*-*11* CLLbs14869
gdb_test_multiple "info func xyzq" "info func xyzq" {
    -re "All functions.*File.*namespace.cc:\r\nint AAA::A_xyzq\\(int\\);\r\nint BBB::B_xyzq\\(int\\);\r\nchar AAA::xyzq\\(char\\);\r\nchar BBB::xyzq\\(char\\);\r\nchar BBB::CCC::xyzq\\(char\\);\r\nchar BBB::Class::xyzq\\(char\\);\r\n$gdb_prompt $" {
	pass "info func xyzq"
    }    
    -re "All functions.*File.*namespace.cc:\r\nint AAA::A_xyzq\\(int\\);\r\nchar AAA::xyzq\\(char\\);\r\nint BBB::B_xyzq\\(int\\);\r\nchar BBB::CCC::xyzq\\(char\\);\r\nchar BBB::Class::xyzq\\(char\\);\r\nchar BBB::xyzq\\(char\\);\r\n$gdb_prompt $" {
	pass "info func xyzq"
    }    
}

# Call a function in a namespace

gdb_test "print 'AAA::xyzq'('x')" \
    "\\$\[0-9\]* = 97 'a'" \
    "print 'AAA::xyzq'('x')"

gdb_test "print AAA::xyzq('x')" \
    "\\$\[0-9\]* = 97 'a'" \
    "print AAA::xyzq('x')"
       
# Break on a function in a namespace

gdb_test "break AAA::xyzq" \
    "Breakpoint.*at $hex: file.*namespace.cc, line 47\\."

# Break on a function in the global namespace.

gdb_test "break ::ensureOtherRefs" \
    "Breakpoint.*at $hex: file.*$srcfile2, line $decimal\\."

# Call a function in a nested namespace

gdb_test "print 'BBB::CCC::xyzq'('x')" \
    "\\$\[0-9\]* = 122 'z'" \
    "print 'BBB::CCC::xyzq'('x')"

gdb_test "print BBB::CCC::xyzq('x')" \
    "\\$\[0-9\]* = 122 'z'" \
    "print BBB::CCC::xyzq('x')"
       
# Break on a function in a nested namespace

gdb_test "break BBB::CCC::xyzq" \
    "Breakpoint.*at $hex: file.*namespace.cc, line 63\\."

# Break on the same function, starting with the global namespace.

gdb_test "break ::BBB::CCC::xyzq" \
    ".*Breakpoint.*at $hex: file.*$srcfile, line 63\\."

# Print address of a function in a class in a namespace

gdb_test "print 'BBB::Class::xyzq'" \
    "\\$\[0-9\]* = \{char \\((BBB::|)Class \\*( const|), (char|int)\\)\} $hex <BBB::Class::xyzq\\(char\\)>" \
    "print 'BBB::Class::xyzq'"

gdb_test "print BBB::Class::xyzq" \
    "\\$\[0-9\]* = \{char \\((BBB::|)Class \\*( const|), (char|int)\\)\} $hex <BBB::Class::xyzq\\(char\\)>" \
    "print BBB::Class::xyzq"

# Break on a function in a class in a namespace

gdb_test "break BBB::Class::xyzq" \
    "Breakpoint.*at $hex: file.*namespace.cc, line 68\\."

# Tests accessing static elements in namespace of other file.

gdb_test "whatis C::cOtherFileType" "type = short"
gdb_test "whatis ::C::cOtherFileType" "type = short"
gdb_test "whatis C::cOtherFileVar" "type = const C::cOtherFileType"
gdb_test "whatis ::C::cOtherFileVar" "type = const C::cOtherFileType"
gdb_test "print C::cOtherFileVar" "\\$\[0-9\].* = 319"
gdb_test "print ::C::cOtherFileVar" "\\$\[0-9\].* = 319"

if $xfail_class_types { setup_xfail *-*-* }
gdb_test "whatis C::OtherFileClass::cOtherFileClassType" "type = short"
if $xfail_class_types { setup_xfail *-*-* }
gdb_test "whatis ::C::OtherFileClass::cOtherFileClassType" "type = short"
gdb_test "print C::OtherFileClass::cOtherFileClassVar" " = 318"

# FSF GCC <=4.4 creates unqualified DIE "cOtherFileClassVar" ignoring the
# namespace the same way older GDB did.
set test "print ::cOtherFileClassVar"
set test2 "print ::C::OtherFileClass::cOtherFileClassVar"
gdb_test_multiple $test $test {
    -re "No symbol \"cOtherFileClassVar\" in current context\\.\r\n$gdb_prompt $" {
	pass $test

	gdb_test $test2 " = 318"
    }
    -re "\\$\[0-9\].* = 318\r\n$gdb_prompt $" {
	fail $test
	# Unresolved means human intervention is required to determine
	# whether the test passed or failed.  Since the previous test
	# xfailed (not failed) human intervention isn't going to help here.
	# Thus test2 is marked as unsupported instead of unresolved.
	unsupported $test2
    }
}

# Test to see if the appropriate namespaces are in scope when trying
# to print out stuff from within a function defined within a
# namespace.

if ![runto "C::D::marker2"] then {
    perror "couldn't run to marker2"
    continue
}

gdb_test "print c" "\\$\[0-9\].* = 1"
gdb_test "print cc" "No symbol \"cc\" in current context."
gdb_test "print 'C::cc'" "\\$\[0-9\].* = 2"
gdb_test "print C::cc" "\\$\[0-9\].* = 2"
gdb_test "print cd" "\\$\[0-9\].* = 3"
gdb_test "print C::D::cd" "No type \"D\" within class or namespace \"C::C\"."
gdb_test "print 'E::cde'" "\\$\[0-9\].* = 5"
gdb_test "print E::cde" "\\$\[0-9\].* = 5"
gdb_test "print shadow" "\\$\[0-9\].* = 13"
gdb_test "print E::ce" "No symbol \"ce\" in namespace \"C::D::E\"."
gdb_test "ptype C" "type = namespace C::C"
gdb_test "ptype E" "type = namespace C::D::E"

gdb_test "ptype CClass" "type = (class C::CClass \{\r\n  public:|struct C::CClass \{)\r\n    int x;\r\n\}"
gdb_test "ptype CClass::NestedClass" "type = (class C::CClass::NestedClass \{\r\n  public:|struct C::CClass::NestedClass \{)\r\n    int y;\r\n\}"
gdb_test "ptype NestedClass" "No symbol \"NestedClass\" in current context."
gdb_test "ptype ::C::CClass" "type = class C::CClass \{\r\n  public:\r\n    int x;\r\n\}"
gdb_test "ptype ::C::CClass::NestedClass" "type = class C::CClass::NestedClass \{\r\n  public:\r\n    int y;\r\n\}"
gdb_test "ptype ::C::NestedClass" "No symbol \"NestedClass\" in namespace \"C\"."
gdb_test "ptype C::CClass" "No symbol \"CClass\" in namespace \"C::C\"."
gdb_test "ptype C::CClass::NestedClass" "No type \"CClass\" within class or namespace \"C::C\"."
gdb_test "ptype C::NestedClass" "No symbol \"NestedClass\" in namespace \"C::C\"."

# Tests involving multiple files

gdb_test "print cOtherFile" "\\$\[0-9\].* = 316"
gdb_test "ptype OtherFileClass" "type = (class C::OtherFileClass \{\r\n  public:|struct C::OtherFileClass \{)\r\n    int z;\r\n.*\}"
gdb_test "ptype ::C::OtherFileClass" "type = class C::OtherFileClass \{\r\n  public:\r\n    int z;\r\n.*\}"
gdb_test "ptype C::OtherFileClass" "No symbol \"OtherFileClass\" in namespace \"C::C\"."

# Test class typedefs printing.
set expect "type = class C::OtherFileClass \{\r\n.*\r\n *typedef short cOtherFileClassType;\r\n *typedef long cOtherFileClassType2;\r\n\}"
if $xfail_class_types { setup_xfail *-*-* }
gdb_test "ptype OtherFileClass" $expect "ptype OtherFileClass typedefs"
if $xfail_class_types { setup_xfail *-*-* }
gdb_test "ptype ::C::OtherFileClass" $expect "ptype ::C::OtherFileClass typedefs"

# Some anonymous namespace tests.

gdb_test "print cX" "\\$\[0-9\].* = 6"
gdb_test "print 'F::cXf'" "\\$\[0-9\].* = 7"
gdb_test "print F::cXf" "\\$\[0-9\].* = 7"
gdb_test "print F::cXfX" "\\$\[0-9\].* = 8"
gdb_test "print X" "\\$\[0-9\].* = 9"
gdb_test "print 'G::Xg'" "\\$\[0-9\].* = 10"
gdb_test "print G::Xg" "\\$\[0-9\].* = 10"
gdb_test "print G::XgX" "\\$\[0-9\].* = 11"
gdb_test "print cXOtherFile" "No symbol \"cXOtherFile\" in current context."
gdb_test "print XOtherFile" "No symbol \"XOtherFile\" in current context."

# Enum tests.
gdb_test "print AAA::ALPHA" "\\$\[0-9\].* = AAA::ALPHA"

# Regression tests for PR 9496.
gdb_test "whatis ::C::CClass::NestedClass" "type = C::CClass::NestedClass"
gdb_test "whatis ::C::CClass::NestedClass *" "type = C::CClass::NestedClass \\*"
