# Copyright 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2002, 2003
# 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# This file was written by Fred Fish. (fnf@cygnus.com)

set ws "\[\r\n\t \]+"

if $tracelevel then {
	strace $tracelevel
}

if { [skip_cplus_tests] } { continue }

set testfile "templates"
set srcfile ${testfile}.cc
set binfile ${objdir}/${subdir}/${testfile}

# Create and source the file that provides information about the compiler
# used to compile the test case.
if [get_compiler_info ${binfile} "c++"] {
    return -1
}
source ${binfile}.ci

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

#
#  Test printing of the types of templates.
#

proc test_ptype_of_templates {} {
    global gdb_prompt
    global ws

    send_gdb "ptype T5<int>\n"
    gdb_expect {
	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5<int> & operator=\\(T5<int> const ?&\\);${ws}T5\\(int\\);${ws}T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
	    pass "ptype T5<int>"
	}
	-re "type = class T5<int> \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}${ws}T5 \\(int\\);${ws}T5 \\(const class T5<int> &\\);${ws}void ~T5 \\(int\\);${ws}static void \\* new \\(unsigned int\\);${ws}static void delete \\(void ?\\*\\);${ws}int value \\((void|)\\);${ws}\\}${ws}$gdb_prompt $" { pass "ptype T5<int> -- new with unsigned int" }
	-re "type = class T5<int> \\{.*public:.*static int X;.*int x;.*int val;.*T5 \\(int\\);.*T5 \\(const class T5<int> &\\);.*void ~T5 \\(int\\);.*static void \\* new \\(unsigned long\\);.*static void delete \\(void ?\\*\\);.*int value \\((void|)\\);.*\\}\r\n$gdb_prompt $" { pass "ptype T5<int> -- new with unsigned long" }
	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;((${ws}T5<int> & operator=\\(T5<int> const ?&\\);)|(${ws}T5\\(int\\);)|(${ws}T5\\((T5<int> const|const T5<int>) ?&\\);)|(${ws}~T5\\((void|)\\);)|(${ws}static void \\* operator new\\(unsigned( int| long)?\\);)|(${ws}static void operator delete\\(void ?\\*\\);)|(${ws}int value\\((void|)\\);))*${ws}\}\r\n$gdb_prompt $" {
	    pass "ptype T5<int> (obsolescent gcc or gdb)"
	}
	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}void T5\\(int\\);${ws}void T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\(int\\);${ws}static void \\* operator new\\(unsigned\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
	    # This also triggers gdb/1113...
	    kfail "gdb/1111" "ptype T5<int>"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype T5<int>"
	}
	timeout {
	    fail "ptype T5<int> (timeout)"
	}
    }

    send_gdb "ptype t5i\n"
    gdb_expect {
        -re "type = class T5<int> \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5\\(int\\);${ws}T5\\(T5<int> const ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\\}\r\n$gdb_prompt $" { pass "ptype T5<int> -- with several fixes from 4.17" }
        -re "type = class T5<int> \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5 \\(int\\);${ws}T5 \\(const class T5<int> &\\);${ws}void ~T5 \\(int\\);${ws}static void \\* new \\(unsigned int\\);${ws}static void delete \\(void ?\\*\\);${ws}int value \\((void|)\\);${ws}\\}\r\n$gdb_prompt $" { pass "ptype t5i<int> -- new with unsigned int" }
        -re "type = class T5<int> \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5 \\(int\\);${ws}T5 \\(const class T5<int> &\\);${ws}void ~T5 \\(int\\);${ws}static void \\* new \\(unsigned long\\);${ws}static void delete \\(void ?\\*\\);${ws}int value \\((void|)\\);${ws}\\}\r\n$gdb_prompt $" { pass "ptype t5i<int> -- new with unsigned long" }
        -re "type = class T5<int> \{.*public:.*static int X;.*int x;.*int val;.*.*T5 \\(int\\);.*.*void ~T5 \\(int\\).*.*.*int value \\((void|)\\);.*\}.*$gdb_prompt $" { 
            pass "ptype t5i"
        }
	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5<int> & operator=\\(T5<int> const ?&\\);${ws}T5\\(int\\);${ws}T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
	    pass "ptype t5i"
	}
	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;((${ws}T5<int> & operator=\\(T5<int> const ?&\\);)|(${ws}T5\\(int\\);)|(${ws}T5\\(T5<int> const ?&\\);)|(${ws}~T5\\((void|)\\);)|(${ws}static void \\* operator new\\(unsigned( int| long)?\\);)|(${ws}static void operator delete\\(void ?\\*\\);)|(${ws}int value\\((void|)\\);))*${ws}\}\r\n$gdb_prompt $" {
	    pass "ptype t5i (obsolescent gcc or gdb)"
	}
	-re "type = class T5<int> \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}void T5\\(int\\);${ws}void T5\\((T5<int> const|const T5<int>) ?&\\);${ws}~T5\\(int\\);${ws}static void \\* operator new\\(unsigned\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
	    # This also triggers gdb/1113...
	    kfail "gdb/1111" "ptype T5<int>"
	}
	-re ".*$gdb_prompt $" {
	    fail "ptype t5i"
	}
	timeout {
	    fail "ptype t5i (timeout)"
	}
    }
}

#
#  Test breakpoint setting on template methods.
#

proc test_template_breakpoints {} {
    global gdb_prompt
    global testfile
    global srcdir
    global hp_aCC_compiler

    send_gdb "break T5<int>::T5\n"
    gdb_expect {
	-re "0. cancel.*\[\r\n\]*.1. all.*\[\r\n\]*.2. T5<int>::T5\\(int\\) at .*\[\r\n\]*.3. T5<int>::T5\\((T5<int> const|const T5<int>) ?&\\) at .*\[\r\n\]*> $" {
	    gdb_test "0" \
		"canceled" \
		"constructor breakpoint (obsolete format!)"
	}
	-re ".0. cancel\[\r\n\]*.1. all\[\r\n\]*.2. T5<int>::T5\\((T5<int> const|const T5<int>) ?&\\) at .*templates.cc:.*\[\r\n\]*.3. T5<int>::T5\\(int\\) at .*templates.cc:.*\[\r\n\]*> $" {
	    gdb_test "0" \
		"canceled" \
		"constructor breakpoint"
	}
	-re "0. cancel.*\[\r\n\]*.1. all.*\[\r\n\]*.2. T5 at .*\[\r\n\]*.3. T5 at .*\[\r\n\]*> $" {
	    setup_kfail "gdb/1062" "*-*-*"
	    gdb_test "0" \
		"nonsense intended to insure that this test fails" \
		"constructor breakpoint"
	}
        -re ".*\n> $" {
	    gdb_test "0" \
		    "nonsense intended to insure that this test fails" \
		    "constructor breakpoint (bad menu choices)"
	}
	-re ".*$gdb_prompt $" { fail "constructor breakpoint" }
	default { fail "constructor breakpoint (timeout)" }
    }
    
# See CLLbs14792
    if {$hp_aCC_compiler} {setup_xfail hppa*-*-* CLLbs14792}

    gdb_test_multiple "break T5<int>::~T5" "destructor_breakpoint" {
	-re "Breakpoint.*at.* file .*${testfile}.cc, line.*$gdb_prompt $"
	{
	    pass "destructor breakpoint"
	}
	-re "the class `T5<int>' does not have destructor defined\r\nHint: try 'T5<int>::~T5<TAB> or 'T5<int>::~T5<ESC-\\?>\r\n\\(Note leading single quote.\\)\r\n$gdb_prompt $"
	{
	    kfail "gdb/1112" "destructor breakpoint"
	}
    }
    
    gdb_test "break T5<int>::value" \
	"Breakpoint.*at.* file .*${testfile}.cc, line.*" \
	"value method breakpoint"

    delete_breakpoints
}

#
#  Test calling of template methods.
#

proc test_template_calls {} {
    global gdb_prompt
    global hp_aCC_compiler

    if [target_info exists gdb,cannot_call_functions] {
	setup_xfail "*-*-*" 2416
	fail "This target can not call functions"
	return
    }

    if {!$hp_aCC_compiler} {setup_xfail hppa*-*-*}
    send_gdb "print t5i.value()\n"
    gdb_expect {
	-re ".* = 2\[\r\n\]*$gdb_prompt $" { pass "print t5i.value()" }
	-re "Cannot invoke functions on this machine.*$gdb_prompt $" {
	    fail "print t5i.value()"
	}
        -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
	    setup_xfail hppa*-*-* CLLbs16899
            xfail "print t5i.value"
	}
	-re ".*$gdb_prompt $" { fail "print t5i.value()" }
	timeout { fail "print t5i.value() (timeout)" }
    }
}


proc do_tests {} {
    global prms_id
    global bug_id
    global subdir
    global objdir
    global srcdir
    global binfile
    global gdb_prompt
    global supports_template_debugging

    set prms_id 0
    set bug_id 0

    # Start with a fresh gdb.

    gdb_exit
    gdb_start
    gdb_reinitialize_dir $srcdir/$subdir
    gdb_load $binfile

    if { !$supports_template_debugging } {
	warning "compiler lacks debugging info for templates; tests suppressed." 0
	return
    }

    runto_main

    test_ptype_of_templates
    test_template_breakpoints

    if [ runto_main] {
	test_template_calls
    }
}

do_tests


# More tests for different kinds of template parameters,
# templates with partial specializations, nested templates, etc.
# These have been tested only with HP aCC.  They probably won't
# work with other compilers because of differences in mangling
# schemes. 
# Added by Satish Pai <pai@apollo.hp.com> 1997-09-25 
# As of 2000-06-03, C++ support has been improved to the point that g++ can
# pass all of theses, excluding what appears to be one that exposes a stabs bug. - djb

# I don't know how HP could be passing these tests without this. They
# weren't breakpointing past a point where the below expressions were
# initialized in the actual source. - djb

send_gdb "b 770\n"
gdb_expect {
		-re ".*$gdb_prompt $"
}
send_gdb "c\n"
gdb_expect {
		-re ".*$gdb_prompt $"
}
send_gdb "print fint\n"   
gdb_expect {   
   -re "\\$\[0-9\]* = \\{x = 0, t = 0\\}\r\n$gdb_prompt $" { pass "print fint" }
   -re "$gdb_prompt $"                     { fail "print fint" }
   timeout                             { fail "(timeout) print fint" }
}

send_gdb "print fvpchar\n"   
gdb_expect {   
   -re "\\$\[0-9\]* = \\{x = 0, t = 0x0\\}\r\n$gdb_prompt $" { pass "print fvpchar" }
   -re "$gdb_prompt $"                     { fail "print fvpchar" }
   timeout                             { fail "(timeout) print fvpchar" }
}

# Template Foo<T>

# Neither stabs nor DWARF-2 contains type information about templates
# (as opposed to instantiations of templates), so in those
# circumstances we expect GDB to not find a symbol.  HP has a debug
# format that contains more info, though, so it's also correct to
# print out template info.  (This affects several subsequent tests as
# well.)

# NOTE: carlton/2003-02-26: However, because of a bug in the way GDB
# handles nested types, we don't get this right in the DWARF-2 case.

send_gdb "ptype Foo\n"   
gdb_expect {   
    -re "type = template <(class |)T> (class |)Foo \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*T t;\r\n\\}\r\ntemplate instantiations:\r\n\[ \t\]*(class |)Foo<volatile char \\*>\r\n\[ \t\]*(class |)Foo<char>\r\n\[ \t\]*(class |)Foo<int>\r\n$gdb_prompt $" { pass "ptype Foo" }
    -re "type = template <(class |)T> (class |)Foo \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*T t;\r\n\\}\r\n$gdb_prompt $" { xfail "ptype Foo" }
    -re "type = class Foo<int> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*int t;\r\n\r\n\[ \t\]*int foo\\(int, int\\);\r\n\\}\r\n$gdb_prompt $"
    { # GCC 3.1, DWARF-2 output.
	kfail "gdb/57" "ptype Foo" }
    -re "No symbol \"Foo\" in current context.\r\n$gdb_prompt $"
    { # GCC 2.95.3, stabs+ output.
	pass "ptype Foo" }
    -re "$gdb_prompt $"                     { fail "ptype Foo" }
    timeout                             { fail "(timeout) ptype Foo" }
}
#    -re "type = class Foo<int> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*int t;\r\n\r\n\[ \t\]*int foo(int, int);\r\n\\}\r\n$gdb_prompt $"

# ptype Foo<int>

send_gdb "ptype fint\n"   
gdb_expect {   
   -re "type = (class |)Foo<int> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*int t;\r\n\r\n\[ \t\]*.*int foo\\(int, int\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype fint" }
   -re "$gdb_prompt $"                     { fail "ptype fint" }
   timeout                             { fail "(timeout) ptype fint" }
}

# ptype Foo<char>

send_gdb "ptype fchar\n"   
gdb_expect {   
   -re "type = (class |)Foo<char> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*char t;\r\n\r\n\[ \t\]*.*char foo\\(int, char\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype fchar" }
   -re "$gdb_prompt $"                     { fail "ptype fchar" }
   timeout                             { fail "(timeout) ptype fchar" }
}

# ptype Foo<volatile char *>

send_gdb "ptype fvpchar\n"   
gdb_expect {   
   -re "type = (class |)Foo<volatile char ?\\*> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*.*char.*\\*t;\r\n\r\n\[ \t\]*.*char \\* foo\\(int,.*char.*\\*\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype fvpchar" }
   -re "$gdb_prompt $"                     { fail "ptype fvpchar" }
   timeout                             { fail "(timeout) ptype fvpchar" }
}

# print a function from Foo<volatile char *>

# This test is sensitive to whitespace matching, so we'll do it twice,
# varying the spacing, because of PR gdb/33.

send_gdb "print Foo<volatile char *>::foo\n"   
gdb_expect {   
    -re "\\$\[0-9\]* = \\{.*char \\*\\((class |)Foo<volatile char ?\\*> \\*(| const), int, .*char \\*\\)\\} $hex <Foo<.*char.*\\*>::foo\\(int, .*char.*\\*\\)>\r\n$gdb_prompt $" { pass "print Foo<volatile char *>::foo" }
    -re "No symbol \"Foo<volatile char \\*>\" in current context.\r\n$gdb_prompt $"
    {
	# This used to be a kfail gdb/33, but it shouldn't occur any more now.
	fail "print Foo<volatile char *>::foo"
    }
    -re "$gdb_prompt $"                     { fail "print Foo<volatile char *>::foo" }
    timeout                             { fail "(timeout) print Foo<volatile char *>::foo" }
}

send_gdb "print Foo<volatile char*>::foo\n"   
gdb_expect {   
    -re "\\$\[0-9\]* = \\{.*char \\*\\((class |)Foo<volatile char ?\\*> \\*(| const), int, .*char \\*\\)\\} $hex <Foo<.*char.*\\*>::foo\\(int, .*char.*\\*\\)>\r\n$gdb_prompt $" { pass "print Foo<volatile char*>::foo" }
    -re "No symbol \"Foo<volatile char\\*>\" in current context.\r\n$gdb_prompt $"
    {
	# This used to be a kfail gdb/33, but it shouldn't occur any more now.
	fail "print Foo<volatile char *>::foo"
    }
    -re "$gdb_prompt $"                     { fail "print Foo<volatile char*>::foo" }
    timeout                             { fail "(timeout) print Foo<volatile char*>::foo" }
}

# Template Bar<T, int>

# same as Foo for g++
send_gdb "ptype Bar\n"   
gdb_expect {   
    -re "type = template <(class |)T, (class |)sz> (class |)Bar \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*T t;\r\n\\}\r\ntemplate instantiations:\r\n\[ \t\]*(class |)Bar<int,(\\(int\\)|)1>\r\n\[ \t\]*(class |)Bar<int,(\\(int\\)|)33>\r\n$gdb_prompt $" { pass "ptype Bar" }
    -re "type = <(class |)T, (class |)sz> (class |)Bar \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*T t;\r\n\\}\r\n$gdb_prompt $" { xfail "ptype Bar" }
    -re "ptype Bar\r\ntype = class Bar<int,33> {\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*int t;\r\n\r\n\[ \t\]*int bar\\(int, int\\);\r\n}\r\n$gdb_prompt $"
    { # GCC 3.1, DWARF-2 output.
	kfail "gdb/57" "ptype Bar" }
    -re "No symbol \"Bar\" in current context.\r\n$gdb_prompt $"
    { # GCC 2.95.3, stabs+ output.
	pass "ptype Bar" }
    -re "$gdb_prompt $"                     { fail "ptype Bar" }
    timeout                             { fail "(timeout) ptype Bar" }
}


# ptype Bar<int,33>

send_gdb "ptype bint\n"   
gdb_expect {   
   -re "type = (class |)Bar<int,(\\(int\\)|)33> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*int t;\r\n\r\n\[ \t\]*.*int bar\\(int, int\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype bint" }
   -re "$gdb_prompt $"                     { fail "ptype bint" }
   timeout                             { fail "(timeout) ptype bint" }
}

# ptype Bar<int, (4>3)>

send_gdb "ptype bint2\n"   
gdb_expect {   
   -re "type = (class |)Bar<int,(\\(int\\)|)1> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*int t;\r\n\r\n\[ \t\]*.*int bar\\(int, int\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype bint2" }
   -re "$gdb_prompt $"                     { fail "ptype bint2" }
   timeout                             { fail "(timeout) ptype bint2" }
}

# Template Baz<T, char>

# Same as Foo, for g++
send_gdb "ptype Baz\n"   
gdb_expect {   
    -re "type = template <(class |)T, (class |)sz> (class |)Baz \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*T t;\r\n\\}\r\ntemplate instantiations:\r\n\[ \t\]*(class |)Baz<char,(\\(char\\)|)97>\r\n\[ \t\]*(class |)Baz<int,(\\(char\\)|)115>\r\n$gdb_prompt $" { pass "ptype Baz" }
    -re "type = <(class |)T, (class |)sz> (class |)Baz \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*T t;\r\n\\}\r\n$gdb_prompt $" { xfail "ptype Baz" }
    -re "type = class Baz<int,'s'> {\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*int t;\r\n\r\n\[ \t\]*int baz\\(int, int\\);\r\n}\r\n$gdb_prompt $"
    { # GCC 3.1, DWARF-2 output.
	kfail "gdb/57" "ptype Baz" }
    -re "No symbol \"Baz\" in current context.\r\n$gdb_prompt $"
    { # GCC 2.95.3, stabs+ output.
	pass "ptype Baz" }
    -re "$gdb_prompt $"                     { fail "ptype Baz" }
    timeout                             { fail "(timeout) ptype Baz" }
}


# ptype Baz<int, 's'>

send_gdb "ptype bazint\n"   
gdb_expect {   
   -re "type = (class |)Baz<int,(\\(char\\)|)(115|\\'s\\')> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*int t;\r\n\r\n\[ \t\]*.*int baz\\(int, int\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype bazint" }
   -re "$gdb_prompt $"                     { fail "ptype bazint" }
   timeout                             { fail "(timeout) ptype bazint" }
}

# ptype Baz<char, 'a'>

send_gdb "ptype bazint2\n"   
gdb_expect {   
   -re "type = (class |)Baz<char,(\\(char\\)|)(97|\\'a\\')> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*char t;\r\n\r\n\[ \t\]*.*char baz\\(int, char\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype bazint2" }
   -re "$gdb_prompt $"                     { fail "ptype bazint2" }
   timeout                             { fail "(timeout) ptype bazint2" }
}

# Template Qux<T, int (*f)(int) >
# Same as Foo for g++
send_gdb "ptype Qux\n"   
gdb_expect {   
    -re "type = template <(class |)T, (class |)sz> (class |)Qux \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*T t;\r\n\\}\r\ntemplate instantiations:\r\n\[ \t\]*(class |)Qux<int,&string>\r\n\[ \t\]*(class |)Qux<char,&string>\r\n$gdb_prompt $" { pass "ptype Qux" }
    -re ".*type = template <(class |)T.*, (class |)sz> (class |)Qux \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*T t;\r\n\\}.*$gdb_prompt $" { pass "ptype Qux" }
    -re "type = class Qux<char,&string> {\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*char t;\r\n\r\n\[ \t\]*char qux\\(int, char\\);\r\n}\r\n$gdb_prompt $"
    { # GCC 3.1, DWARF-2 output.
	kfail "gdb/57" "ptype Qux" }
    -re "No symbol \"Qux\" in current context.\r\n$gdb_prompt $"
    { # GCC 2.95.3, stabs+ output.
	pass "ptype Qux" }
    -re "$gdb_prompt $"                     { fail "ptype Qux" }
    timeout                             { fail "(timeout) ptype Qux" }
}

# pt Qux<int,&string>

send_gdb "ptype quxint\n"   
gdb_expect {   
   -re "type = class Qux<int,&string> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*int t;\r\n\r\n\[ \t\]*.*int qux\\(int, int\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype quxint" }
   -re "$gdb_prompt $"                     { fail "ptype quxint" }
   timeout                             { fail "(timeout) ptype quxint" }
}

# pt Qux<char,0>

# commented out this as quxint2 declaration was commented out in
# templates.exp -- ovidiu
# send_gdb "ptype quxint2\n"   
# gdb_expect {   
#    -re "type = class Qux<char,&string> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*char t;\r\n\r\n\[ \t\]*char qux\\(int, char\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype quxint2" }
#    -re "$gdb_prompt $"                     { fail "ptype quxint2" }
#    timeout                             { fail "(timeout) ptype quxint2" }
# }

# Template Spec<T1, T2>

# Same as Foo for g++
send_gdb "ptype Spec\n"   
gdb_expect {   
    -re "type = template <(class |)T1, (class |)T2> (class |)Spec \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\\}\r\ntemplate instantiations:\r\n\[ \t\]*(class |)Spec<int,int \\*>\r\n\[ \t\]*(class |)Spec<int,char>\r\n$gdb_prompt $" { pass "ptype Spec" }
    -re "type = <(class |)T1, (class |)T2> (class |)Spec \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\\}\r\n$gdb_prompt $" { xfail "ptype Spec" }
    -re "type = class Spec<int,char> {\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\r\n\[ \t\]*int spec\\(char\\);\r\n}\r\n$gdb_prompt $"
    { # GCC 3.1, DWARF-2 output.
	kfail "gdb/57" "ptype Spec" }
    -re "No symbol \"Spec\" in current context.\r\n$gdb_prompt $"
    { # GCC 2.95.3, stabs+ output.
	pass "ptype Spec" }
    -re "$gdb_prompt $"                     { fail "ptype Spec" }
    timeout                             { fail "(timeout) ptype Spec" }
}

# pt Spec<char,0>

send_gdb "ptype siip\n"   
gdb_expect {   
   -re "type = class Spec<int,int ?\\*> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\r\n\[ \t\]*.*int spec\\(int ?\\*\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype siip" }
   -re "$gdb_prompt $"                     { fail "ptype siip" }
   timeout                             { fail "(timeout) ptype siip" }
}

# pt Garply<int>

send_gdb "ptype Garply<int>\n"   
gdb_expect {   
   -re "type = class Garply<int> \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*int t;\r\n\r\n\[ \t\]*.*int garply\\(int, int\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype Garply<int>" }
   -re "$gdb_prompt $"                     { fail "ptype Garply<int>" }
   timeout                             { fail "(timeout) ptype Garply<int>" }
}

# ptype of nested template name

send_gdb "ptype Garply<Garply<char> >\n"   
gdb_expect {   
   -re "type = (class |)Garply<Garply<char> > \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*.*(class |)Garply<char> t;\r\n\r\n\[ \t\]*.*(class |)Garply<char> garply\\(int, (class |)Garply<char>\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype Garply<Garply<char> >" }
   -re "$gdb_prompt $"                     { fail "ptype Garply<Garply<char> >" }
   timeout                             { fail "(timeout) ptype Garply<Garply<char> >" }
}

# print out a function from a nested template name

send_gdb "print Garply<Garply<char> >::garply\n"
gdb_expect {
   -re "\\$\[0-9\]* = \\{(class |)Garply<char> \\((class |)Garply<Garply<char> > \\*(| const), int, (class |)Garply<char>\\)\\} $hex <Garply<Garply<char>\[ \t\]*>::garply\\(int, (class |)Garply<char>\\)>\r\n$gdb_prompt $" { pass "print Garply<Garply<char> >::garply" }
   -re ".*$gdb_prompt $" { fail "print Garply<Garply<char> >::garply" }
   timeout { fail "print Garply<Garply<char> >::garply (timeout)" }
}

# djb - 06-03-2000
# Now should work fine
send_gdb "break Garply<Garply<char> >::garply\n"
gdb_expect {
   -re "Breakpoint \[0-9\]* at $hex: file .*templates.cc, line.*\r\n$gdb_prompt $" { pass "break Garply<Garply<char> >::garply" }
   -re ".*$gdb_prompt $" { fail "break Garply<Garply<char> >::garply" }
   timeout { fail "break Garply<Garply<char> >::garply (timeout)" }
}
