forked from Imagelibrary/binutils-gdb
gdb
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.
This commit is contained in:
26
gdb/symtab.h
26
gdb/symtab.h
@@ -589,6 +589,10 @@ struct symbol
|
||||
/* Whether this is an inlined function (class LOC_BLOCK only). */
|
||||
unsigned is_inlined : 1;
|
||||
|
||||
/* True if this is a C++ function symbol with template arguments.
|
||||
In this case the symbol is really a "struct template_symbol". */
|
||||
unsigned is_cplus_template_function : 1;
|
||||
|
||||
/* Line number of this symbol's definition, except for inlined
|
||||
functions. For an inlined function (class LOC_BLOCK and
|
||||
SYMBOL_INLINED set) this is the line number of the function's call
|
||||
@@ -636,12 +640,34 @@ struct symbol
|
||||
#define SYMBOL_CLASS(symbol) (symbol)->aclass
|
||||
#define SYMBOL_IS_ARGUMENT(symbol) (symbol)->is_argument
|
||||
#define SYMBOL_INLINED(symbol) (symbol)->is_inlined
|
||||
#define SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION(symbol) \
|
||||
(symbol)->is_cplus_template_function
|
||||
#define SYMBOL_TYPE(symbol) (symbol)->type
|
||||
#define SYMBOL_LINE(symbol) (symbol)->line
|
||||
#define SYMBOL_SYMTAB(symbol) (symbol)->symtab
|
||||
#define SYMBOL_COMPUTED_OPS(symbol) (symbol)->ops.ops_computed
|
||||
#define SYMBOL_REGISTER_OPS(symbol) (symbol)->ops.ops_register
|
||||
#define SYMBOL_LOCATION_BATON(symbol) (symbol)->aux_value
|
||||
|
||||
/* An instance of this type is used to represent a C++ template
|
||||
function. It includes a "struct symbol" as a kind of base class;
|
||||
users downcast to "struct template_symbol *" when needed. A symbol
|
||||
is really of this type iff SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION is
|
||||
true. */
|
||||
|
||||
struct template_symbol
|
||||
{
|
||||
/* The base class. */
|
||||
struct symbol base;
|
||||
|
||||
/* The number of template arguments. */
|
||||
int n_template_arguments;
|
||||
|
||||
/* The template arguments. This is an array with
|
||||
N_TEMPLATE_ARGUMENTS elements. */
|
||||
struct symbol **template_arguments;
|
||||
};
|
||||
|
||||
|
||||
/* Each item represents a line-->pc (or the reverse) mapping. This is
|
||||
somewhat more wasteful of space than one might wish, but since only
|
||||
|
||||
Reference in New Issue
Block a user