# 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 }

set testfile "namespace"
set srcfile ${testfile}.cc
set objfile ${objdir}/${subdir}/${testfile}.o
set srcfile1 ${testfile}1.cc
set objfile1 ${objdir}/${subdir}/${testfile}1.o
set binfile ${objdir}/${subdir}/${testfile}

if [get_compiler_info ${binfile} 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  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objfile}" object {debug c++}] != "" } {
     untested namespace.exp
     return -1
}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile1}" "${objfile1}" object {debug c++}] != "" } {
     untested namespace.exp
     return -1
}

if  { [gdb_compile "${objfile} ${objfile1}" "${binfile}" executable {debug c++}] != "" } {
     untested namespace.exp
     return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}


#
# 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\\."

# 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\\."

# 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 $" {
	# Do not permit to XFAIL on recent GCCs.
	if $xfail_class_types {
	    setup_xfail *-*-* 
	    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
	} else {
	    fail $test
	    unresolved $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 \\*"
