OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gdb/] [gdb-6.8/] [gdb-6.8.openrisc-2.1/] [gdb/] [testsuite/] [gdb.cp/] [templates.exp] - Diff between revs 24 and 33

Only display areas with differences | Details | Blame | View Log

Rev 24 Rev 33
# Copyright 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2007,
# Copyright 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2007,
# 2008 Free Software Foundation, Inc.
# 2008 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# 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
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# (at your option) any later version.
#
#
# This program is distributed in the hope that it will be useful,
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see .
# along with this program.  If not, see .
# This file was written by Fred Fish. (fnf@cygnus.com)
# This file was written by Fred Fish. (fnf@cygnus.com)
set ws "\[\r\n\t \]+"
set ws "\[\r\n\t \]+"
if $tracelevel then {
if $tracelevel then {
        strace $tracelevel
        strace $tracelevel
}
}
if { [skip_cplus_tests] } { continue }
if { [skip_cplus_tests] } { continue }
set testfile "templates"
set testfile "templates"
set srcfile ${testfile}.cc
set srcfile ${testfile}.cc
set binfile ${objdir}/${subdir}/${testfile}
set binfile ${objdir}/${subdir}/${testfile}
# Create and source the file that provides information about the compiler
# Create and source the file that provides information about the compiler
# used to compile the test case.
# used to compile the test case.
if [get_compiler_info ${binfile} "c++"] {
if [get_compiler_info ${binfile} "c++"] {
    return -1
    return -1
}
}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
     untested templates.exp
     untested templates.exp
     return -1
     return -1
}
}
#
#
#  Test printing of the types of templates.
#  Test printing of the types of templates.
#
#
proc test_ptype_of_templates {} {
proc test_ptype_of_templates {} {
    global gdb_prompt
    global gdb_prompt
    global ws
    global ws
    send_gdb "ptype T5\n"
    send_gdb "ptype T5\n"
    gdb_expect {
    gdb_expect {
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5 & operator=\\(T5 const ?&\\);${ws}T5\\(int\\);${ws}T5\\((T5 const|const T5) ?&\\);${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 $" {
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5 & operator=\\(T5 const ?&\\);${ws}T5\\(int\\);${ws}T5\\((T5 const|const T5) ?&\\);${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"
            pass "ptype T5"
        }
        }
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5\\(int\\);${ws}T5\\((T5 const|const T5) ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}T5 & operator=\\(T5 const ?&\\);${ws}\}\r\n$gdb_prompt $" {
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5\\(int\\);${ws}T5\\((T5 const|const T5) ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}T5 & operator=\\(T5 const ?&\\);${ws}\}\r\n$gdb_prompt $" {
            pass "ptype T5"
            pass "ptype T5"
        }
        }
        -re "type = class T5 \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}${ws}T5 \\(int\\);${ws}T5 \\(const class T5 &\\);${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 -- new with unsigned int" }
        -re "type = class T5 \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}${ws}T5 \\(int\\);${ws}T5 \\(const class T5 &\\);${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 -- new with unsigned int" }
        -re "type = class T5 \\{.*public:.*static int X;.*int x;.*int val;.*T5 \\(int\\);.*T5 \\(const class T5 &\\);.*void ~T5 \\(int\\);.*static void \\* new \\(unsigned long\\);.*static void delete \\(void ?\\*\\);.*int value \\((void|)\\);.*\\}\r\n$gdb_prompt $" { pass "ptype T5 -- new with unsigned long" }
        -re "type = class T5 \\{.*public:.*static int X;.*int x;.*int val;.*T5 \\(int\\);.*T5 \\(const class T5 &\\);.*void ~T5 \\(int\\);.*static void \\* new \\(unsigned long\\);.*static void delete \\(void ?\\*\\);.*int value \\((void|)\\);.*\\}\r\n$gdb_prompt $" { pass "ptype T5 -- new with unsigned long" }
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;((${ws}T5 & operator=\\(T5 const ?&\\);)|(${ws}T5\\(int\\);)|(${ws}T5\\((T5 const|const T5) ?&\\);)|(${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 $" {
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;((${ws}T5 & operator=\\(T5 const ?&\\);)|(${ws}T5\\(int\\);)|(${ws}T5\\((T5 const|const T5) ?&\\);)|(${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 (obsolescent gcc or gdb)"
            pass "ptype T5 (obsolescent gcc or gdb)"
        }
        }
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}void T5\\(int\\);${ws}void T5\\((T5 const|const T5) ?&\\);${ws}~T5\\(int\\);${ws}static void \\* operator new\\(unsigned( int| long|)\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}void T5\\(int\\);${ws}void T5\\((T5 const|const T5) ?&\\);${ws}~T5\\(int\\);${ws}static void \\* operator new\\(unsigned( int| long|)\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
            # This also triggers gdb/1113...
            # This also triggers gdb/1113...
            kfail "gdb/1111" "ptype T5"
            kfail "gdb/1111" "ptype T5"
        }
        }
        -re ".*$gdb_prompt $" {
        -re ".*$gdb_prompt $" {
            fail "ptype T5"
            fail "ptype T5"
        }
        }
        timeout {
        timeout {
            fail "ptype T5 (timeout)"
            fail "ptype T5 (timeout)"
        }
        }
    }
    }
    send_gdb "ptype t5i\n"
    send_gdb "ptype t5i\n"
    gdb_expect {
    gdb_expect {
        -re "type = class T5 \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5\\(int\\);${ws}T5\\(T5 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 -- with several fixes from 4.17" }
        -re "type = class T5 \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5\\(int\\);${ws}T5\\(T5 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 -- with several fixes from 4.17" }
        -re "type = class T5 \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5 \\(int\\);${ws}T5 \\(const class T5 &\\);${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 -- new with unsigned int" }
        -re "type = class T5 \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5 \\(int\\);${ws}T5 \\(const class T5 &\\);${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 -- new with unsigned int" }
        -re "type = class T5 \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5 \\(int\\);${ws}T5 \\(const class T5 &\\);${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 -- new with unsigned long" }
        -re "type = class T5 \\{${ws}public:${ws}static int X;${ws}int x;${ws}int val;\r\n${ws}T5 \\(int\\);${ws}T5 \\(const class T5 &\\);${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 -- new with unsigned long" }
        -re "type = class T5 \{.*public:.*static int X;.*int x;.*int val;.*.*T5 \\(int\\);.*.*void ~T5 \\(int\\).*.*.*int value \\((void|)\\);.*\}.*$gdb_prompt $" {
        -re "type = class T5 \{.*public:.*static int X;.*int x;.*int val;.*.*T5 \\(int\\);.*.*void ~T5 \\(int\\).*.*.*int value \\((void|)\\);.*\}.*$gdb_prompt $" {
            pass "ptype t5i"
            pass "ptype t5i"
        }
        }
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5 & operator=\\(T5 const ?&\\);${ws}T5\\(int\\);${ws}T5\\((T5 const|const T5) ?&\\);${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 $" {
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5 & operator=\\(T5 const ?&\\);${ws}T5\\(int\\);${ws}T5\\((T5 const|const T5) ?&\\);${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"
            pass "ptype t5i"
        }
        }
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5\\(int\\);${ws}T5\\((T5 const|const T5) ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}T5 & operator=\\(T5 const ?&\\);${ws}\}\r\n$gdb_prompt $" {
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}T5\\(int\\);${ws}T5\\((T5 const|const T5) ?&\\);${ws}~T5\\((void|)\\);${ws}static void \\* operator new\\(unsigned( int| long)?\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}T5 & operator=\\(T5 const ?&\\);${ws}\}\r\n$gdb_prompt $" {
            pass "ptype t5i"
            pass "ptype t5i"
        }
        }
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;((${ws}T5 & operator=\\(T5 const ?&\\);)|(${ws}T5\\(int\\);)|(${ws}T5\\(T5 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 $" {
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;((${ws}T5 & operator=\\(T5 const ?&\\);)|(${ws}T5\\(int\\);)|(${ws}T5\\(T5 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)"
            pass "ptype t5i (obsolescent gcc or gdb)"
        }
        }
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}void T5\\(int\\);${ws}void T5\\((T5 const|const T5) ?&\\);${ws}~T5\\(int\\);${ws}static void \\* operator new\\(unsigned( int| long|)\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
        -re "type = class T5 \{${ws}public:${ws}static int X;${ws}int x;${ws}int val;${ws}void T5\\(int\\);${ws}void T5\\((T5 const|const T5) ?&\\);${ws}~T5\\(int\\);${ws}static void \\* operator new\\(unsigned( int| long|)\\);${ws}static void operator delete\\(void ?\\*\\);${ws}int value\\((void|)\\);${ws}\}\r\n$gdb_prompt $" {
            # This also triggers gdb/1113...
            # This also triggers gdb/1113...
            kfail "gdb/1111" "ptype T5"
            kfail "gdb/1111" "ptype T5"
        }
        }
        -re ".*$gdb_prompt $" {
        -re ".*$gdb_prompt $" {
            fail "ptype t5i"
            fail "ptype t5i"
        }
        }
        timeout {
        timeout {
            fail "ptype t5i (timeout)"
            fail "ptype t5i (timeout)"
        }
        }
    }
    }
}
}
#
#
#  Test breakpoint setting on template methods.
#  Test breakpoint setting on template methods.
#
#
proc test_template_breakpoints {} {
proc test_template_breakpoints {} {
    global gdb_prompt
    global gdb_prompt
    global testfile
    global testfile
    global srcdir
    global srcdir
    global hp_aCC_compiler
    global hp_aCC_compiler
    send_gdb "break T5::T5\n"
    send_gdb "break T5::T5\n"
    gdb_expect {
    gdb_expect {
        -re "0. cancel.*\[\r\n\]*.1. all.*\[\r\n\]*.2. T5::T5\\(int\\) at .*\[\r\n\]*.3. T5::T5\\((T5 const|const T5) ?&\\) at .*\[\r\n\]*> $" {
        -re "0. cancel.*\[\r\n\]*.1. all.*\[\r\n\]*.2. T5::T5\\(int\\) at .*\[\r\n\]*.3. T5::T5\\((T5 const|const T5) ?&\\) at .*\[\r\n\]*> $" {
            gdb_test "0" \
            gdb_test "0" \
                "canceled" \
                "canceled" \
                "constructor breakpoint (obsolete format!)"
                "constructor breakpoint (obsolete format!)"
        }
        }
        -re ".0. cancel\[\r\n\]*.1. all\[\r\n\]*.2. T5::T5\\((T5 const|const T5) ?&\\) at .*templates.cc:.*\[\r\n\]*.3. T5::T5\\(int\\) at .*templates.cc:.*\[\r\n\]*> $" {
        -re ".0. cancel\[\r\n\]*.1. all\[\r\n\]*.2. T5::T5\\((T5 const|const T5) ?&\\) at .*templates.cc:.*\[\r\n\]*.3. T5::T5\\(int\\) at .*templates.cc:.*\[\r\n\]*> $" {
            gdb_test "0" \
            gdb_test "0" \
                "canceled" \
                "canceled" \
                "constructor breakpoint"
                "constructor breakpoint"
        }
        }
        -re "0. cancel.*\[\r\n\]*.1. all.*\[\r\n\]*.2. T5 at .*\[\r\n\]*.3. T5 at .*\[\r\n\]*> $" {
        -re "0. cancel.*\[\r\n\]*.1. all.*\[\r\n\]*.2. T5 at .*\[\r\n\]*.3. T5 at .*\[\r\n\]*> $" {
            setup_kfail "gdb/1062" "*-*-*"
            setup_kfail "gdb/1062" "*-*-*"
            gdb_test "0" \
            gdb_test "0" \
                "nonsense intended to insure that this test fails" \
                "nonsense intended to insure that this test fails" \
                "constructor breakpoint"
                "constructor breakpoint"
        }
        }
        -re ".*\n> $" {
        -re ".*\n> $" {
            gdb_test "0" \
            gdb_test "0" \
                    "nonsense intended to insure that this test fails" \
                    "nonsense intended to insure that this test fails" \
                    "constructor breakpoint (bad menu choices)"
                    "constructor breakpoint (bad menu choices)"
        }
        }
        -re ".*$gdb_prompt $" { fail "constructor breakpoint" }
        -re ".*$gdb_prompt $" { fail "constructor breakpoint" }
        default { fail "constructor breakpoint (timeout)" }
        default { fail "constructor breakpoint (timeout)" }
    }
    }
# See CLLbs14792
# See CLLbs14792
    if {$hp_aCC_compiler} {setup_xfail hppa*-*-* CLLbs14792}
    if {$hp_aCC_compiler} {setup_xfail hppa*-*-* CLLbs14792}
    gdb_test_multiple "break T5::~T5" "destructor_breakpoint" {
    gdb_test_multiple "break T5::~T5" "destructor_breakpoint" {
        -re "Breakpoint.*at.* file .*${testfile}.cc, line.*$gdb_prompt $"
        -re "Breakpoint.*at.* file .*${testfile}.cc, line.*$gdb_prompt $"
        {
        {
            pass "destructor breakpoint"
            pass "destructor breakpoint"
        }
        }
        -re "the class `T5' does not have destructor defined\r\nHint: try 'T5::~T5 or 'T5::~T5\r\n\\(Note leading single quote.\\)\r\n$gdb_prompt $"
        -re "the class `T5' does not have destructor defined\r\nHint: try 'T5::~T5 or 'T5::~T5\r\n\\(Note leading single quote.\\)\r\n$gdb_prompt $"
        {
        {
            kfail "gdb/1112" "destructor breakpoint"
            kfail "gdb/1112" "destructor breakpoint"
        }
        }
    }
    }
    gdb_test "break T5::value" \
    gdb_test "break T5::value" \
        "Breakpoint.*at.* file .*${testfile}.cc, line.*" \
        "Breakpoint.*at.* file .*${testfile}.cc, line.*" \
        "value method breakpoint"
        "value method breakpoint"
    delete_breakpoints
    delete_breakpoints
}
}
#
#
#  Test calling of template methods.
#  Test calling of template methods.
#
#
proc test_template_calls {} {
proc test_template_calls {} {
    global gdb_prompt
    global gdb_prompt
    global hp_aCC_compiler
    global hp_aCC_compiler
    if [target_info exists gdb,cannot_call_functions] {
    if [target_info exists gdb,cannot_call_functions] {
        setup_xfail "*-*-*" 2416
        setup_xfail "*-*-*" 2416
        fail "This target can not call functions"
        fail "This target can not call functions"
        return
        return
    }
    }
    if {!$hp_aCC_compiler} {setup_xfail hppa*-*-*}
    if {!$hp_aCC_compiler} {setup_xfail hppa*-*-*}
    send_gdb "print t5i.value()\n"
    send_gdb "print t5i.value()\n"
    gdb_expect {
    gdb_expect {
        -re ".* = 2\[\r\n\]*$gdb_prompt $" { pass "print t5i.value()" }
        -re ".* = 2\[\r\n\]*$gdb_prompt $" { pass "print t5i.value()" }
        -re "Cannot invoke functions on this machine.*$gdb_prompt $" {
        -re "Cannot invoke functions on this machine.*$gdb_prompt $" {
            fail "print t5i.value()"
            fail "print t5i.value()"
        }
        }
        -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
        -re "Cannot resolve .* to any overloaded instance.*$gdb_prompt $" {
            setup_xfail hppa*-*-* CLLbs16899
            setup_xfail hppa*-*-* CLLbs16899
            xfail "print t5i.value"
            xfail "print t5i.value"
        }
        }
        -re ".*$gdb_prompt $" { fail "print t5i.value()" }
        -re ".*$gdb_prompt $" { fail "print t5i.value()" }
        timeout { fail "print t5i.value() (timeout)" }
        timeout { fail "print t5i.value() (timeout)" }
    }
    }
}
}
proc do_tests {} {
proc do_tests {} {
    global prms_id
    global prms_id
    global bug_id
    global bug_id
    global subdir
    global subdir
    global objdir
    global objdir
    global srcdir
    global srcdir
    global binfile
    global binfile
    global gdb_prompt
    global gdb_prompt
    set prms_id 0
    set prms_id 0
    set bug_id 0
    set bug_id 0
    # Start with a fresh gdb.
    # Start with a fresh gdb.
    gdb_exit
    gdb_exit
    gdb_start
    gdb_start
    gdb_reinitialize_dir $srcdir/$subdir
    gdb_reinitialize_dir $srcdir/$subdir
    gdb_load $binfile
    gdb_load $binfile
    runto_main
    runto_main
    test_ptype_of_templates
    test_ptype_of_templates
    test_template_breakpoints
    test_template_breakpoints
    if [ runto_main] {
    if [ runto_main] {
        test_template_calls
        test_template_calls
    }
    }
}
}
do_tests
do_tests
# More tests for different kinds of template parameters,
# More tests for different kinds of template parameters,
# templates with partial specializations, nested templates, etc.
# templates with partial specializations, nested templates, etc.
# These have been tested only with HP aCC.  They probably won't
# These have been tested only with HP aCC.  They probably won't
# work with other compilers because of differences in mangling
# work with other compilers because of differences in mangling
# schemes.
# schemes.
# Added by Satish Pai  1997-09-25
# Added by Satish Pai  1997-09-25
# As of 2000-06-03, C++ support has been improved to the point that g++ can
# 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
# 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
# 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
# weren't breakpointing past a point where the below expressions were
# initialized in the actual source. - djb
# initialized in the actual source. - djb
send_gdb "b 770\n"
send_gdb "b 770\n"
gdb_expect {
gdb_expect {
                -re ".*$gdb_prompt $"
                -re ".*$gdb_prompt $"
}
}
send_gdb "c\n"
send_gdb "c\n"
gdb_expect {
gdb_expect {
                -re ".*$gdb_prompt $"
                -re ".*$gdb_prompt $"
}
}
send_gdb "print fint\n"
send_gdb "print fint\n"
gdb_expect {
gdb_expect {
   -re "\\$\[0-9\]* = \\{x = 0, t = 0\\}\r\n$gdb_prompt $" { pass "print fint" }
   -re "\\$\[0-9\]* = \\{x = 0, t = 0\\}\r\n$gdb_prompt $" { pass "print fint" }
   -re "$gdb_prompt $"                     { fail "print fint" }
   -re "$gdb_prompt $"                     { fail "print fint" }
   timeout                             { fail "(timeout) print fint" }
   timeout                             { fail "(timeout) print fint" }
}
}
send_gdb "print fvpchar\n"
send_gdb "print fvpchar\n"
gdb_expect {
gdb_expect {
   -re "\\$\[0-9\]* = \\{x = 0, t = 0x0\\}\r\n$gdb_prompt $" { pass "print fvpchar" }
   -re "\\$\[0-9\]* = \\{x = 0, t = 0x0\\}\r\n$gdb_prompt $" { pass "print fvpchar" }
   -re "$gdb_prompt $"                     { fail "print fvpchar" }
   -re "$gdb_prompt $"                     { fail "print fvpchar" }
   timeout                             { fail "(timeout) print fvpchar" }
   timeout                             { fail "(timeout) print fvpchar" }
}
}
# Template Foo
# Template Foo
# Neither stabs nor DWARF-2 contains type information about templates
# Neither stabs nor DWARF-2 contains type information about templates
# (as opposed to instantiations of templates), so in those
# (as opposed to instantiations of templates), so in those
# circumstances we expect GDB to not find a symbol.  HP has a debug
# 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
# format that contains more info, though, so it's also correct to
# print out template info.  (This affects several subsequent tests as
# print out template info.  (This affects several subsequent tests as
# well.)
# well.)
# NOTE: carlton/2003-02-26: However, because of a bug in the way GDB
# 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.
# handles nested types, we don't get this right in the DWARF-2 case.
send_gdb "ptype Foo\n"
send_gdb "ptype Foo\n"
gdb_expect {
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\r\n\[ \t\]*(class |)Foo\r\n\[ \t\]*(class |)Foo\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\ntemplate instantiations:\r\n\[ \t\]*(class |)Foo\r\n\[ \t\]*(class |)Foo\r\n\[ \t\]*(class |)Foo\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 = 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 \\{\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 $"
    -re "type = class Foo \\{\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.
    { # GCC 3.1, DWARF-2 output.
        kfail "gdb/57" "ptype Foo" }
        kfail "gdb/57" "ptype Foo" }
    -re "No symbol \"Foo\" in current context.\r\n$gdb_prompt $"
    -re "No symbol \"Foo\" in current context.\r\n$gdb_prompt $"
    { # GCC 2.95.3, stabs+ output.
    { # GCC 2.95.3, stabs+ output.
        pass "ptype Foo" }
        pass "ptype Foo" }
    -re "$gdb_prompt $"                     { fail "ptype Foo" }
    -re "$gdb_prompt $"                     { fail "ptype Foo" }
    timeout                             { fail "(timeout) ptype Foo" }
    timeout                             { fail "(timeout) ptype Foo" }
}
}
#    -re "type = class Foo \\{\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 $"
#    -re "type = class Foo \\{\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
# ptype Foo
send_gdb "ptype fint\n"
send_gdb "ptype fint\n"
gdb_expect {
gdb_expect {
   -re "type = (class |)Foo \\{\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 "type = (class |)Foo \\{\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 "type = (class |)Foo \\{\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 "type = (class |)Foo \\{\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" }
   -re "$gdb_prompt $"                     { fail "ptype fint" }
   timeout                             { fail "(timeout) ptype fint" }
   timeout                             { fail "(timeout) ptype fint" }
}
}
# ptype Foo
# ptype Foo
send_gdb "ptype fchar\n"
send_gdb "ptype fchar\n"
gdb_expect {
gdb_expect {
   -re "type = (class |)Foo \\{\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 "type = (class |)Foo \\{\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 "type = (class |)Foo \\{\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 "type = (class |)Foo \\{\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" }
   -re "$gdb_prompt $"                     { fail "ptype fchar" }
   timeout                             { fail "(timeout) ptype fchar" }
   timeout                             { fail "(timeout) ptype fchar" }
}
}
# ptype Foo
# ptype Foo
send_gdb "ptype fvpchar\n"
send_gdb "ptype fvpchar\n"
gdb_expect {
gdb_expect {
   -re "type = (class |)Foo \\{\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 "type = (class |)Foo \\{\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 "type = (class |)Foo \\{\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 "type = (class |)Foo \\{\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 "type = (class |)Foo \\{\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 $" {
   -re "type = (class |)Foo \\{\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 $" {
       kfail "gdb/1512" "ptype fvpchar"
       kfail "gdb/1512" "ptype fvpchar"
   }
   }
   -re "$gdb_prompt $"                     { fail "ptype fvpchar" }
   -re "$gdb_prompt $"                     { fail "ptype fvpchar" }
   timeout                             { fail "(timeout) ptype fvpchar" }
   timeout                             { fail "(timeout) ptype fvpchar" }
}
}
# print a function from Foo
# print a function from Foo
# This test is sensitive to whitespace matching, so we'll do it twice,
# This test is sensitive to whitespace matching, so we'll do it twice,
# varying the spacing, because of PR gdb/33.
# varying the spacing, because of PR gdb/33.
send_gdb "print Foo::foo\n"
send_gdb "print Foo::foo\n"
gdb_expect {
gdb_expect {
    -re "\\$\[0-9\]* = \\{.*char \\*\\((class |)Foo \\*(| const), int, .*char \\*\\)\\} $hex ::foo\\(int, .*char.*\\*\\)>\r\n$gdb_prompt $" { pass "print Foo::foo" }
    -re "\\$\[0-9\]* = \\{.*char \\*\\((class |)Foo \\*(| const), int, .*char \\*\\)\\} $hex ::foo\\(int, .*char.*\\*\\)>\r\n$gdb_prompt $" { pass "print Foo::foo" }
    -re "No symbol \"Foo\" in current context.\r\n$gdb_prompt $"
    -re "No symbol \"Foo\" in current context.\r\n$gdb_prompt $"
    {
    {
        # This used to be a kfail gdb/33.  That problem has been
        # This used to be a kfail gdb/33.  That problem has been
        # fixed, but now gdb/931 and gdb/1512 are rearing their ugly
        # fixed, but now gdb/931 and gdb/1512 are rearing their ugly
        # heads.
        # heads.
        kfail "gdb/931" "print Foo::foo"
        kfail "gdb/931" "print Foo::foo"
    }
    }
    -re "$gdb_prompt $"                     { fail "print Foo::foo" }
    -re "$gdb_prompt $"                     { fail "print Foo::foo" }
    timeout                             { fail "(timeout) print Foo::foo" }
    timeout                             { fail "(timeout) print Foo::foo" }
}
}
send_gdb "print Foo::foo\n"
send_gdb "print Foo::foo\n"
gdb_expect {
gdb_expect {
    -re "\\$\[0-9\]* = \\{.*char \\*\\((class |)Foo \\*(| const), int, .*char \\*\\)\\} $hex ::foo\\(int, .*char.*\\*\\)>\r\n$gdb_prompt $" { pass "print Foo::foo" }
    -re "\\$\[0-9\]* = \\{.*char \\*\\((class |)Foo \\*(| const), int, .*char \\*\\)\\} $hex ::foo\\(int, .*char.*\\*\\)>\r\n$gdb_prompt $" { pass "print Foo::foo" }
    -re "No symbol \"Foo\" in current context.\r\n$gdb_prompt $"
    -re "No symbol \"Foo\" in current context.\r\n$gdb_prompt $"
    {
    {
        # This used to be a kfail gdb/33.  That problem has been
        # This used to be a kfail gdb/33.  That problem has been
        # fixed, but now gdb/931 and gdb/1512 are rearing their ugly
        # fixed, but now gdb/931 and gdb/1512 are rearing their ugly
        # heads.
        # heads.
        kfail "gdb/931" "print Foo::foo"
        kfail "gdb/931" "print Foo::foo"
    }
    }
    -re "$gdb_prompt $"                     { fail "print Foo::foo" }
    -re "$gdb_prompt $"                     { fail "print Foo::foo" }
    timeout                             { fail "(timeout) print Foo::foo" }
    timeout                             { fail "(timeout) print Foo::foo" }
}
}
# Template Bar
# Template Bar
# same as Foo for g++
# same as Foo for g++
send_gdb "ptype Bar\n"
send_gdb "ptype Bar\n"
gdb_expect {
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\r\n\[ \t\]*(class |)Bar\r\n$gdb_prompt $" { pass "ptype Bar" }
    -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\r\n\[ \t\]*(class |)Bar\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 "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 {\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 $"
    -re "ptype Bar\r\ntype = class Bar {\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.
    { # GCC 3.1, DWARF-2 output.
        kfail "gdb/57" "ptype Bar" }
        kfail "gdb/57" "ptype Bar" }
    -re "No symbol \"Bar\" in current context.\r\n$gdb_prompt $"
    -re "No symbol \"Bar\" in current context.\r\n$gdb_prompt $"
    { # GCC 2.95.3, stabs+ output.
    { # GCC 2.95.3, stabs+ output.
        pass "ptype Bar" }
        pass "ptype Bar" }
    -re "$gdb_prompt $"                     { fail "ptype Bar" }
    -re "$gdb_prompt $"                     { fail "ptype Bar" }
    timeout                             { fail "(timeout) ptype Bar" }
    timeout                             { fail "(timeout) ptype Bar" }
}
}
# ptype Bar
# ptype Bar
send_gdb "ptype bint\n"
send_gdb "ptype bint\n"
gdb_expect {
gdb_expect {
   -re "type = (class |)Bar \\{\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 "type = (class |)Bar \\{\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 "type = (class |)Bar \\{\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 "type = (class |)Bar \\{\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" }
   -re "$gdb_prompt $"                     { fail "ptype bint" }
   timeout                             { fail "(timeout) ptype bint" }
   timeout                             { fail "(timeout) ptype bint" }
}
}
# ptype Bar3)>
# ptype Bar3)>
send_gdb "ptype bint2\n"
send_gdb "ptype bint2\n"
gdb_expect {
gdb_expect {
   -re "type = (class |)Bar \\{\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 "type = (class |)Bar \\{\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 "type = (class |)Bar \\{\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 "type = (class |)Bar \\{\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" }
   -re "$gdb_prompt $"                     { fail "ptype bint2" }
   timeout                             { fail "(timeout) ptype bint2" }
   timeout                             { fail "(timeout) ptype bint2" }
}
}
# Template Baz
# Template Baz
# Same as Foo, for g++
# Same as Foo, for g++
send_gdb "ptype Baz\n"
send_gdb "ptype Baz\n"
gdb_expect {
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\r\n\[ \t\]*(class |)Baz\r\n$gdb_prompt $" { pass "ptype Baz" }
    -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\r\n\[ \t\]*(class |)Baz\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 |)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 {\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 $"
    -re "type = class Baz {\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.
    { # GCC 3.1, DWARF-2 output.
        kfail "gdb/57" "ptype Baz" }
        kfail "gdb/57" "ptype Baz" }
    -re "type = class Baz {\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 $"
    -re "type = class Baz {\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.x, DWARF-2 output, running into gdb/57 and gdb/1512.
    { # GCC 3.x, DWARF-2 output, running into gdb/57 and gdb/1512.
        kfail "gdb/57" "ptype Baz" }
        kfail "gdb/57" "ptype Baz" }
    -re "No symbol \"Baz\" in current context.\r\n$gdb_prompt $"
    -re "No symbol \"Baz\" in current context.\r\n$gdb_prompt $"
    { # GCC 2.95.3, stabs+ output.
    { # GCC 2.95.3, stabs+ output.
        pass "ptype Baz" }
        pass "ptype Baz" }
    -re "$gdb_prompt $"                     { fail "ptype Baz" }
    -re "$gdb_prompt $"                     { fail "ptype Baz" }
    timeout                             { fail "(timeout) ptype Baz" }
    timeout                             { fail "(timeout) ptype Baz" }
}
}
# ptype Baz
# ptype Baz
send_gdb "ptype bazint\n"
send_gdb "ptype bazint\n"
gdb_expect {
gdb_expect {
   -re "type = (class |)Baz \\{\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 "type = (class |)Baz \\{\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 "type = (class |)Baz \\{\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 "type = (class |)Baz \\{\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" }
   -re "$gdb_prompt $"                     { fail "ptype bazint" }
   timeout                             { fail "(timeout) ptype bazint" }
   timeout                             { fail "(timeout) ptype bazint" }
}
}
# ptype Baz
# ptype Baz
send_gdb "ptype bazint2\n"
send_gdb "ptype bazint2\n"
gdb_expect {
gdb_expect {
   -re "type = (class |)Baz \\{\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 "type = (class |)Baz \\{\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 "type = (class |)Baz \\{\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 "type = (class |)Baz \\{\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" }
   -re "$gdb_prompt $"                     { fail "ptype bazint2" }
   timeout                             { fail "(timeout) ptype bazint2" }
   timeout                             { fail "(timeout) ptype bazint2" }
}
}
# Template Qux
# Template Qux
# Same as Foo for g++
# Same as Foo for g++
send_gdb "ptype Qux\n"
send_gdb "ptype Qux\n"
gdb_expect {
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\r\n\[ \t\]*(class |)Qux\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\\}\r\ntemplate instantiations:\r\n\[ \t\]*(class |)Qux\r\n\[ \t\]*(class |)Qux\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 = 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 {\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 $"
    -re "type = class Qux {\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.
    { # GCC 3.1, DWARF-2 output.
        kfail "gdb/57" "ptype Qux" }
        kfail "gdb/57" "ptype Qux" }
    -re "type = class Qux {\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 $"
    -re "type = class Qux {\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.x, DWARF-2 output; gdb/57 + gdb/1512.
    { # GCC 3.x, DWARF-2 output; gdb/57 + gdb/1512.
        kfail "gdb/57" "ptype Qux" }
        kfail "gdb/57" "ptype Qux" }
    -re "No symbol \"Qux\" in current context.\r\n$gdb_prompt $"
    -re "No symbol \"Qux\" in current context.\r\n$gdb_prompt $"
    { # GCC 2.95.3, stabs+ output.
    { # GCC 2.95.3, stabs+ output.
        pass "ptype Qux" }
        pass "ptype Qux" }
    -re "$gdb_prompt $"                     { fail "ptype Qux" }
    -re "$gdb_prompt $"                     { fail "ptype Qux" }
    timeout                             { fail "(timeout) ptype Qux" }
    timeout                             { fail "(timeout) ptype Qux" }
}
}
# pt Qux
# pt Qux
send_gdb "ptype quxint\n"
send_gdb "ptype quxint\n"
gdb_expect {
gdb_expect {
   -re "type = class Qux \\{\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 "type = class Qux \\{\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 "type = class Qux \\{\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 "type = class Qux \\{\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 "type = class Qux \\{\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 "type = class Qux \\{\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 "type = class Qux \\{\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 $" {
   -re "type = class Qux \\{\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 $" {
       kfail "gdb/1512" "ptype quxint"
       kfail "gdb/1512" "ptype quxint"
   }
   }
   -re "$gdb_prompt $"                     { fail "ptype quxint" }
   -re "$gdb_prompt $"                     { fail "ptype quxint" }
   timeout                             { fail "(timeout) ptype quxint" }
   timeout                             { fail "(timeout) ptype quxint" }
}
}
# pt Qux
# pt Qux
# commented out this as quxint2 declaration was commented out in
# commented out this as quxint2 declaration was commented out in
# templates.exp -- ovidiu
# templates.exp -- ovidiu
# send_gdb "ptype quxint2\n"
# send_gdb "ptype quxint2\n"
# gdb_expect {
# gdb_expect {
#    -re "type = class Qux \\{\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 "type = class Qux \\{\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" }
#    -re "$gdb_prompt $"                     { fail "ptype quxint2" }
#    timeout                             { fail "(timeout) ptype quxint2" }
#    timeout                             { fail "(timeout) ptype quxint2" }
# }
# }
# Template Spec
# Template Spec
# Same as Foo for g++
# Same as Foo for g++
send_gdb "ptype Spec\n"
send_gdb "ptype Spec\n"
gdb_expect {
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\r\n\[ \t\]*(class |)Spec\r\n$gdb_prompt $" { pass "ptype Spec" }
    -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\r\n\[ \t\]*(class |)Spec\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 |)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 {\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\r\n\[ \t\]*int spec\\(char\\);\r\n}\r\n$gdb_prompt $"
    -re "type = class Spec {\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.
    { # GCC 3.1, DWARF-2 output.
        kfail "gdb/57" "ptype Spec" }
        kfail "gdb/57" "ptype Spec" }
    -re "No symbol \"Spec\" in current context.\r\n$gdb_prompt $"
    -re "No symbol \"Spec\" in current context.\r\n$gdb_prompt $"
    { # GCC 2.95.3, stabs+ output.
    { # GCC 2.95.3, stabs+ output.
        pass "ptype Spec" }
        pass "ptype Spec" }
    -re "$gdb_prompt $"                     { fail "ptype Spec" }
    -re "$gdb_prompt $"                     { fail "ptype Spec" }
    timeout                             { fail "(timeout) ptype Spec" }
    timeout                             { fail "(timeout) ptype Spec" }
}
}
# pt Spec
# pt Spec
send_gdb "ptype siip\n"
send_gdb "ptype siip\n"
gdb_expect {
gdb_expect {
   -re "type = class Spec \\{\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 "type = class Spec \\{\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 "type = class Spec \\{\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 "type = class Spec \\{\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" }
   -re "$gdb_prompt $"                     { fail "ptype siip" }
   timeout                             { fail "(timeout) ptype siip" }
   timeout                             { fail "(timeout) ptype siip" }
}
}
# pt Garply
# pt Garply
send_gdb "ptype Garply\n"
send_gdb "ptype Garply\n"
gdb_expect {
gdb_expect {
   -re "type = class Garply \\{\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" }
   -re "type = class Garply \\{\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" }
   -re "type = class Garply \\{\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" }
   -re "type = class Garply \\{\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" }
   -re "$gdb_prompt $"                     { fail "ptype Garply" }
   -re "$gdb_prompt $"                     { fail "ptype Garply" }
   timeout                             { fail "(timeout) ptype Garply" }
   timeout                             { fail "(timeout) ptype Garply" }
}
}
# ptype of nested template name
# ptype of nested template name
send_gdb "ptype Garply >\n"
send_gdb "ptype Garply >\n"
gdb_expect {
gdb_expect {
   -re "type = (class |)Garply > \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*.*(class |)Garply t;\r\n\r\n\[ \t\]*.*(class |)Garply garply\\(int, (class |)Garply\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype Garply >" }
   -re "type = (class |)Garply > \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*.*(class |)Garply t;\r\n\r\n\[ \t\]*.*(class |)Garply garply\\(int, (class |)Garply\\);\r\n\\}\r\n$gdb_prompt $" { pass "ptype Garply >" }
   -re "type = (class |)Garply > \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*.*(class |)Garply t;\r\n\r\n\[ \t\]*(class |)Garply garply\\(int, (class |)Garply\\);.*\r\n\\}\r\n$gdb_prompt $" { pass "ptype Garply >" }
   -re "type = (class |)Garply > \\{\r\n\[ \t\]*public:\r\n\[ \t\]*int x;\r\n\[ \t\]*.*(class |)Garply t;\r\n\r\n\[ \t\]*(class |)Garply garply\\(int, (class |)Garply\\);.*\r\n\\}\r\n$gdb_prompt $" { pass "ptype Garply >" }
   -re "$gdb_prompt $"                     { fail "ptype Garply >" }
   -re "$gdb_prompt $"                     { fail "ptype Garply >" }
   timeout                             { fail "(timeout) ptype Garply >" }
   timeout                             { fail "(timeout) ptype Garply >" }
}
}
# print out a function from a nested template name
# print out a function from a nested template name
send_gdb "print Garply >::garply\n"
send_gdb "print Garply >::garply\n"
gdb_expect {
gdb_expect {
   -re "\\$\[0-9\]* = \\{(class |)Garply \\((class |)Garply > \\*(| const), int, (class |)Garply\\)\\} $hex \[ \t\]*>::garply\\(int, (class |)Garply\\)>\r\n$gdb_prompt $" { pass "print Garply >::garply" }
   -re "\\$\[0-9\]* = \\{(class |)Garply \\((class |)Garply > \\*(| const), int, (class |)Garply\\)\\} $hex \[ \t\]*>::garply\\(int, (class |)Garply\\)>\r\n$gdb_prompt $" { pass "print Garply >::garply" }
   -re ".*$gdb_prompt $" { fail "print Garply >::garply" }
   -re ".*$gdb_prompt $" { fail "print Garply >::garply" }
   timeout { fail "print Garply >::garply (timeout)" }
   timeout { fail "print Garply >::garply (timeout)" }
}
}
# djb - 06-03-2000
# djb - 06-03-2000
# Now should work fine
# Now should work fine
send_gdb "break Garply >::garply\n"
send_gdb "break Garply >::garply\n"
gdb_expect {
gdb_expect {
   -re "Breakpoint \[0-9\]* at $hex: file .*templates.cc, line.*\r\n$gdb_prompt $" { pass "break Garply >::garply" }
   -re "Breakpoint \[0-9\]* at $hex: file .*templates.cc, line.*\r\n$gdb_prompt $" { pass "break Garply >::garply" }
   -re ".*$gdb_prompt $" { fail "break Garply >::garply" }
   -re ".*$gdb_prompt $" { fail "break Garply >::garply" }
   timeout { fail "break Garply >::garply (timeout)" }
   timeout { fail "break Garply >::garply (timeout)" }
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.