34eaf5422c
PR c++/9946: * symfile.c (reread_symbols): Clear template_symbols. * symtab.h (struct symbol) <is_cplus_template_function>: New field. (SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION): New macro. (struct template_symbol): New. * symtab.c (lookup_symbol_aux_local): Use cp_lookup_symbol_imports_or_template. * objfiles.h (struct objfile) <template_symbols>: New field. * objfiles.c (relocate_one_symbol): New function. (objfile_relocate1): Use it. Relocate isolated symbols. * gdbtypes.h (struct cplus_struct_type) <n_template_arguments, template_arguments>: New fields. (TYPE_N_TEMPLATE_ARGUMENTS): New macro. (TYPE_TEMPLATE_ARGUMENTS): Likewise. (TYPE_TEMPLATE_ARGUMENT): Likewise. (lookup_typename): Update. * gdbtypes.c (lookup_typename): Constify "block" argument. * dwarf2read.c: Include vec.h. (symbolp): New typedef. (read_func_scope): Read template arguments. Allocate a template_symbol when needed. (read_structure_type): Read template arguments. (new_symbol_full): New function, from new_symbol. Handle DW_TAG_template_type_param and DW_TAG_template_value_param. (new_symbol): Rewrite as wrapper. * cp-support.h (cp_lookup_symbol_imports_or_template): Declare. * cp-namespace.c: Include language.h. (search_symbol_list): New function. (cp_lookup_symbol_imports_or_template): Likewise. gdb/testsuite PR c++/9946: * gdb.cp/temargs.exp: New file. * gdb.cp/temargs.cc: New file.
102 lines
3.2 KiB
Text
102 lines
3.2 KiB
Text
# temargs.exp - Template argument tests
|
|
#
|
|
# Copyright 2010 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/>.
|
|
|
|
# This file is part of the gdb testsuite.
|
|
|
|
if {$tracelevel} {
|
|
strace $tracelevel
|
|
}
|
|
|
|
if {[skip_cplus_tests]} {
|
|
continue
|
|
}
|
|
|
|
set testfile "temargs"
|
|
set srcfile "${testfile}.cc"
|
|
|
|
if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
|
|
return -1
|
|
}
|
|
|
|
if {![runto_main]} {
|
|
return -1
|
|
}
|
|
|
|
set line [gdb_get_line_number "Breakpoint 1" $srcfile]
|
|
gdb_test "break $srcfile:$line" "Breakpoint 2.*" \
|
|
"set first breakpoint for temargs"
|
|
set line [gdb_get_line_number "Breakpoint 2" $srcfile]
|
|
gdb_test "break $srcfile:$line" "Breakpoint 3.*" \
|
|
"set second breakpoint for temargs"
|
|
set line [gdb_get_line_number "Breakpoint 3" $srcfile]
|
|
gdb_test "break $srcfile:$line" "Breakpoint 4.*" \
|
|
"set third breakpoint for temargs"
|
|
set line [gdb_get_line_number "Breakpoint 4" $srcfile]
|
|
gdb_test "break $srcfile:$line" "Breakpoint 5.*" \
|
|
"set fourth breakpoint for temargs"
|
|
|
|
#
|
|
# Tests in Base::base_m.
|
|
#
|
|
|
|
gdb_continue_to_breakpoint "continue to first breakpoint for temargs"
|
|
|
|
gdb_test "ptype T" "double" "test type of T in base_m"
|
|
gdb_test "print I" " = 23" "test value of I in base_m"
|
|
gdb_test "print P == &a_global" " = true" "test value of P in base_m"
|
|
setup_kfail "gcc/41736" *-*-*
|
|
gdb_test "print MP" "&S::f" "test value of MP in base_m"
|
|
|
|
#
|
|
# Tests in Inner::inner_m.
|
|
#
|
|
|
|
gdb_continue_to_breakpoint "continue to second breakpoint for temargs"
|
|
|
|
setup_kfail "gcc/45024" *-*-*
|
|
gdb_test "ptype T" "long" "test type of T in inner_m"
|
|
setup_kfail "gcc/45024" *-*-*
|
|
gdb_test "print I" " = 47" "test value of I in inner_m"
|
|
gdb_test "print P == &a_global" " = true" "test value of P in inner_m"
|
|
setup_kfail "gcc/41736" *-*-*
|
|
gdb_test "print MP" "&S::f" "test value of MP in inner_m"
|
|
gdb_test "whatis Z" "float" "test type of Z in inner_m"
|
|
|
|
#
|
|
# Tests in func.
|
|
#
|
|
|
|
gdb_continue_to_breakpoint "continue to third breakpoint for temargs"
|
|
|
|
gdb_test "ptype T" "unsigned char" "test type of T in func"
|
|
gdb_test "print I" " = 91" "test value of I in func"
|
|
gdb_test "print P == &a_global" " = true" "test value of P in func"
|
|
setup_kfail "gcc/41736" *-*-*
|
|
gdb_test "print MP" "&S::f" "test value of MP in func"
|
|
|
|
#
|
|
# Tests in Base::templ_m.
|
|
#
|
|
|
|
gdb_continue_to_breakpoint "continue to fourth breakpoint for temargs"
|
|
|
|
gdb_test "ptype T" "double" "test type of T in templ_m"
|
|
gdb_test "print I" " = 23" "test value of I in templ_m"
|
|
gdb_test "print P == &a_global" " = true" "test value of P in templ_m"
|
|
setup_kfail "gcc/41736" *-*-*
|
|
gdb_test "print MP" "&S::f" "test value of MP in templ_m"
|
|
gdb_test "whatis Q" "short" "test type of Q in templ_m"
|