aboutsummaryrefslogtreecommitdiff
path: root/gdb/ada-lang.c
AgeCommit message (Collapse)AuthorFilesLines
2021-03-08Implement Ada multiplicative operatorsTom Tromey1-1/+1
This implements the Ada multiplicative operators, using an existing template class. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_mult_binop): No longer static. * ada-exp.h (ada_binop_mul_operation ada_binop_div_operation) (ada_binop_rem_operation, ada_binop_mod_operation): New typedefs.
2021-03-08Introduce ada_binop_addsub_operationTom Tromey1-0/+40
This adds class ada_binop_addsub_operation, which implements the Ada + and - operators. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_addsub_operation::evaluate): New method. * ada-exp.h (class ada_binop_addsub_operation): New.
2021-03-08Split out some Ada type resolution codeTom Tromey1-99/+144
This splits some Ada type resolution code out of resolve_subexp into new functions that can be reused. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.h (ada_find_operator_symbol, ada_resolve_funcall) (ada_resolve_variable): Declare. * ada-lang.c (ada_find_operator_symbol, ada_resolve_funcall) (ada_resolve_variable): New functions. (resolve_subexp): Update.
2021-03-08Introduce ada_unop_range_operationTom Tromey1-1/+1
This adds class ada_unop_range_operation, which implements UNOP_IN_RANGE. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_in_range): No longer static. * ada-exp.h (class ada_unop_range_operation): New.
2021-03-08Implement some Ada unary operationsTom Tromey1-4/+4
This implements a few Ada unary operations, using the existing unop_operation template class. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_neg, ada_atr_tag, ada_atr_size, ada_abs): No longer static. * ada-exp.h (ada_neg_operation, ada_atr_tag_operation) (ada_atr_size_operation, ada_abs_operation): New typedefs.
2021-03-08Introduce ada_ternop_range_operationTom Tromey1-0/+11
This adds class ada_ternop_range_operation, which implements TERNOP_IN_RANGE. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_ternop_range_operation::evaluate): New method. * ada-exp.h (class ada_ternop_range_operation): New.
2021-03-08Introduce ada_qual_operationTom Tromey1-0/+9
This adds class ada_qual_operation, which implements UNOP_QUAL. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_qual_operation::evaluate): New method. * ada-exp.h (class ada_qual_operation): New.
2021-03-08Introduce ada_string_operationTom Tromey1-0/+13
This adds class ada_string_operation, which implements string constants for Ada. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_string_operation::evaluate): New method. * ada-exp.h (class ada_string_operation): New.
2021-03-08Introduce ada_wrapped_operationTom Tromey1-0/+29
This adds class ada_wrapped_operation, which is used to wrap some generic operations with a bit of Ada-specific handling. This corresponds to the old "default" case in ada_evaluate_subexp. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_wrapped_operation::evaluate): New method. * ada-exp.h: New file.
2021-03-08Split out ada_binop_expTom Tromey1-13/+24
This splits BINOP_EXP into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_exp): New function. (ada_evaluate_subexp): Use it.
2021-03-08Change value_val_atr to ada_val_atrTom Tromey1-7/+5
This renames value_val_atr to ada_val_atr, changing its parameters to more closely mirror other expression helpers. The EVAL_AVOID_SIDE_EFFECTS case is moved into this function as well. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_val_atr): Rename from value_val_atr. Change parameters. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_binop_minmaxTom Tromey1-8/+19
This splits OP_ATR_MIN and OP_ATR_MAX into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_minmax): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_unop_atrTom Tromey1-116/+128
This splits some Ada attribute operations into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_atr): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_binop_in_boundsTom Tromey1-22/+31
This splits BINOP_IN_BOUNDS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_binop_in_bounds): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_ternop_sliceTom Tromey1-70/+83
This splits TERNOP_SLICE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_ternop_slice): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_equal_binopTom Tromey1-11/+23
This splits BINOP_EQUAL and BINOP_NOTEQUAL into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_equal_binop): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_mult_binopTom Tromey1-11/+22
This splits BINOP_MUL into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_mult_binop): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_absTom Tromey1-5/+16
This splits UNOP_ABS into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_abs): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_atr_sizeTom Tromey1-15/+26
This splits OP_ATR_SIZE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_atr_size): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_atr_tagTom Tromey1-5/+15
This splits OP_ATR_TAG into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_atr_tag): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_unop_in_rangeTom Tromey1-27/+38
This splits UNOP_IN_RANGE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_in_range): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out ada_unop_negTom Tromey1-7/+15
This splits UNOP_NEG into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (ada_unop_neg): New function. (ada_evaluate_subexp): Use it.
2021-03-08Split out eval_ternop_in_rangeTom Tromey1-12/+22
This splits TERNOP_IN_RANGE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (eval_ternop_in_range): New function. (ada_evaluate_subexp): Use it.
2021-03-06Fix build bug in ada-lang.cTom Tromey1-2/+2
An earlier patch of mine introduced a build failure in ada-lang.c. A couple of "to_string" calls were not namespace-qualified. In the failing setup, the std string_view is being used, and so (apparently) ADL doesn't find gdb::to_string. This patch, from the bug, fixes the problem. gdb/ChangeLog 2021-03-06 Chernov Sergey <klen_s@mail.ru> PR gdb/27528: * ada-lang.c (ada_fold_name): Use gdb::to_string.
2021-03-04Use "bool" in ada-lang.cTom Tromey1-10/+10
Christian suggested switching an "int" in ada-lang.c to "bool" instead. This patch makes this change. Tested on x86-64 Fedora 32. gdb/ChangeLog 2021-03-04 Tom Tromey <tromey@adacore.com> * ada-lang.c (struct match_data) <found_sym>: Now bool. (aux_add_nonlocal_symbols): Update. (ada_add_block_symbols): Change "found_sym" to bool.
2021-03-03Minor Ada-related cleanupsTom Tromey1-16/+18
This patch addresses some review comments that I forgot to deal with in an earlier patch. See the comments here: https://sourceware.org/pipermail/gdb-patches/2021-February/176278.html For the most part this is fixing up comments, but it also includes adding a constructor and initializers to "match_data". Regression tested on x86-64 Fedora 32. gdb/ChangeLog 2021-03-03 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_resolve_function): Update comment. (is_nonfunction, add_symbols_from_enclosing_procs) (remove_extra_symbols): Likewise. (struct match_data): Add constructor, initializers. (add_nonlocal_symbols): Remove memset. (aux_add_nonlocal_symbols): Update comment. (ada_add_block_renamings, add_nonlocal_symbols) (ada_add_all_symbols): Likewise. * ada-exp.y (write_var_or_type): Clean up trailing whitespace.
2021-03-02Rewrite GNAT-encoded fixed point types in DWARF readerTom Tromey1-150/+2
gdb currently supports two different styles of fixed-point. The original style, where fixed point types are "GNAT encoded", is handled primarily in the Ada code. The newer style, encoded using DWARF, is handled by the core of gdb. This patch changes gdb to read the GNAT encodings in the DWARF reader as well. This removes some code and unifies the two paths. As a result, GNAT-encoded fixed-point now works a bit better. One possible drawback of this change is that, if someone uses stabs, then fixed-point might now stop working. I consider stabs to be fully obsolete, though, so I don't intend to address this. gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.c (cast_from_gnat_encoded_fixed_point_type) (cast_to_gnat_encoded_fixed_point_type): Remove. (ada_value_cast, ada_evaluate_subexp): Update. (gnat_encoded_fixed_point_type_info) (ada_is_gnat_encoded_fixed_point_type) (gnat_encoded_fixed_point_delta) (gnat_encoded_fixed_point_scaling_factor): Remove. * ada-lang.h (ada_is_gnat_encoded_fixed_point_type) (gnat_encoded_fixed_point_delta) (gnat_encoded_fixed_point_scaling_factor): Don't declare. * ada-typeprint.c (print_gnat_encoded_fixed_point_type): Remove. (ada_print_type): Update. * ada-valprint.c (ada_value_print_num): Update. * dwarf2/read.c (ada_get_gnat_encoded_number) (ada_get_gnat_encoded_ratio): New functions. (finish_fixed_point_type): Use them. Add parameters. (GNAT_FIXED_POINT_SUFFIX): New define. (gnat_encoded_fixed_point_type_info): New function. (read_base_type): Handle gnat encodings. gdb/testsuite/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * gdb.ada/fixed_points.exp: Remove most special cases for minimal encodings.
2021-03-02Use std::string rather than grow_vectTom Tromey1-76/+26
This removes the "GROW_VECT" macro and helper function in favor of simply using std::string in a few spots. gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_fold_name, ada_variant_discrim_name) (ada_enum_name, scan_discrim_bound, to_fixed_range_type): Use std::string. (GROW_VECT): Remove. (grow_vect): Remove.
2021-03-02Return a vector from ada_lookup_symbol_listTom Tromey1-183/+116
This changes ada_lookup_symbol_list to return a std::vector, and changes various other helper functions to follow. This simplifies the code, and makes it more type-safe (by using a vector where an obstack had been used). gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.h (ada_lookup_symbol_list): Return a vector. * ada-lang.c (resolve_subexp): Update. (ada_resolve_function): Accept a vector. (is_nonfunction, add_defn_to_vec) (add_symbols_from_enclosing_procs): Likewise. (num_defns_collected, defns_collected): Remove. (remove_extra_symbols): Return a vector. (remove_irrelevant_renamings): Return void. (ada_add_local_symbols): Accept a vector. (struct match_data) <obstackp>: Remove. <resultp>: New member. (aux_add_nonlocal_symbols): Update. (ada_add_block_renamings, add_nonlocal_symbols) (ada_add_all_symbols): Accept a vector. (ada_lookup_symbol_list_worker, ada_lookup_symbol_list): Return a vector. (ada_lookup_symbol): Update. (ada_add_block_symbols): Accept a vector. (get_var_value, iterate_over_symbols): Update. * ada-exp.y (block_lookup, write_var_or_type, write_name_assoc): Update.
2021-03-02Simplify resolve_subexp by using C++ algorithmsTom Tromey1-29/+28
This changes resolve_subexp to use any_of and the erase-remove idiom to simplify the code somewhat. This simplifies the next patch a bit. gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.c (resolve_subexp): Use any_of and erase-remove idiom.
2021-03-02Use new for ada_symbol_cacheTom Tromey1-40/+11
This changes the ada_symbol_cache to be allocated with 'new' and managed via unique_ptr. This simplifies the code somewhat. Also, ada_clear_symbol_cache is changed so that it does not allocate a symbol cache just to clear it. gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.c (struct ada_symbol_cache) <cache_space>: Now an auto_obstack. <root>: Initialize. (ada_pspace_data): Remove destructor. <sym_cache>: Now a unique_ptr. (ada_init_symbol_cache, ada_free_symbol_cache): Remove. (ada_get_symbol_cache): Use 'new'. (ada_clear_symbol_cache): Rewrite.
2021-03-02Check objfile->sf in ada-lang.cTom Tromey1-7/+9
Most places in gdb that reference objfile->sf also check that it is not null. It is valid for it to be null, because find_sym_fns can return null for some kinds of object file. However, it's rare to encounter this scenario with Ada code. I only encountered it when looking at a fork of gdb that, I believe, makes its own objfiles without setting 'sf'. This patch changes ada-lang.c to check this field before using it. This avoids any potential crash here. There's no test case because I'm not even sure this is possible to trip over with an unmodified gdb. There are some other unchecked uses in gdb, but at a quick glance they all seem to be involved with symbol reading, which of course won't happen when sf==null. gdb/ChangeLog 2021-03-02 Tom Tromey <tromey@adacore.com> * ada-lang.c (add_nonlocal_symbols): Handle case where objfile->sf is null.
2021-02-17Fix completion related libstdc++ assert when using -D_GLIBCXX_DEBUGKevin Buettner1-2/+2
This commit fixes a libstdc++ assertion failure encountered when running gdb.base/completion.exp. In order to see this problem, GDB must be built with the follow CFLAGS and CXXFLAGS as part of the configure line: CFLAGS='-D_GLIBCXX_DEBUG' CXXFLAGS='-D_GLIBCXX_DEBUG' (Also, this problem was encountered using Fedora rawhide. It might not be reproducible in Fedora versions prior to Fedora 34.) Using the gdb.base/completion.exp test program, the problem can be observed as follows: [kev@rawhide-1 gdb]$ ./gdb -q testsuite/outputs/gdb.base/completion/completion Reading symbols from testsuite/outputs/gdb.base/completion/completion... (gdb) start Temporary breakpoint 1 at 0x401179: file ../../worktree-master/gdb/testsuite/gdb.base/break.c, line 43. Starting program: testsuite/outputs/gdb.base/completion/completion Temporary breakpoint 1, main (argc=1, argv=0x7fffffffd718, envp=0x7fffffffd728) at ../../worktree-master/gdb/testsuite/gdb.base/break.c:43 43 if (argc == 12345) { /* an unlikely value < 2^16, in case uninited */ /* set breakpoint 6 here */ (gdb) p <TAB>/usr/include/c++/11/string_view:211: constexpr const value_type& std::basic_string_view<_CharT, _Traits>::operator[](std::basic_string_view<_CharT, _Traits>::size_type) const [with _CharT = char; _Traits = std::char_traits<char>; std::basic_string_view<_CharT, _Traits>::const_reference = const char&; std::basic_string_view<_CharT, _Traits>::size_type = long unsigned int]: Assertion '__pos < this->_M_len' failed. Aborted (core dumped) (Note that I added "<TAB>" to make it clear where the tab key was pressed.) gdb/ChangeLog: * ada-lang.c (ada_fold_name): Check for non-empty string prior to accessing it. (ada_lookup_name_info): Likewise.
2021-02-09Avoid crash from coerce_unspec_val_to_typeTom Tromey1-3/+7
With a certain Ada program, ada-lang.c:coerce_unspec_val_to_type can cause a crash. This function may copy a value, and in the particular case in the crash, the new value's type is smaller than the original type. This causes coerce_unspec_val_to_type to create a lazy value -- but the original value is also not_lval, so later, when the value is un-lazied, gdb asserts. As with the previous patch, we believe there is a compiler bug here, but it is difficult to reproduce, so we're not completely certain. In the particular case we saw, the original value has record type, and the record holds some variable-length arrays. This leads to the type's length being 0. At the same time, the value is optimized out. This patch changes coerce_unspec_val_to_type to handle an optimized-out value correctly. It also slightly restructures this code to avoid a crash should a not_lval value wind up here. This is a purely defensive change. This change also made it clear that value_contents_copy_raw can now be made static, so that is also done. gdb/ChangeLog 2021-02-09 Tom Tromey <tromey@adacore.com> * ada-lang.c (coerce_unspec_val_to_type): Avoid making lazy not_lval value. * value.c (value_contents_copy_raw): Now static. * value.h (value_contents_copy_raw): Don't declare.
2021-01-28gdb: rename get_type_arch to type::archSimon Marchi1-3/+2
... and update all users. gdb/ChangeLog: * gdbtypes.h (get_type_arch): Rename to... (struct type) <arch>: ... this, update all users. Change-Id: I0e3ef938a0afe798ac0da74a9976bbd1d082fc6f
2021-01-28gdb: rename type::{arch,objfile} -> type::{arch_owner,objfile_owner}Simon Marchi1-2/+2
I think this makes the names of the methods clearer, especially for the arch. The type::arch method (which gets the arch owner, or NULL if the type is not arch owned) is easily confused with the get_type_arch method (which returns an arch no matter what). The name "arch_owner" will make it intuitive that the method returns NULL if the type is not arch-owned. Also, this frees the type::arch name, so we will be able to morph the get_type_arch function into the type::arch method. gdb/ChangeLog: * gdbtypes.h (struct type) <arch>: Rename to... <arch_owner>: ... this, update all users. <objfile>: Rename to... <objfile_owner>: ... this, update all users. Change-Id: Ie7c28684c7b565adec05a7619c418c69429bd8c0
2021-01-25Specially handle array contexts in Ada expression resolutionTom Tromey1-3/+19
A user noticed that the Ada expression code in gdb did not automatically disambiguate an enumerator in an array context. That is, an expression like "print array(enumerator)" is not ambiguous, even if "enumerator" is declared in multiple enumerations, because the correct one can be found by examining the array's index type. This patch changes the Ada expression resolution code to handle this case. gdb/ChangeLog 2021-01-25 Tom Tromey <tromey@adacore.com> * ada-lang.c (resolve_subexp): Handle array context. gdb/testsuite/ChangeLog 2021-01-25 Tom Tromey <tromey@adacore.com> * gdb.ada/local-enum.exp: Add enumerator resolution test.
2021-01-22gdb: remove TYPE_OBJFILE macroSimon Marchi1-2/+2
Change all users to use the type::objfile method instead. gdb/ChangeLog: * gdbtypes.h (TYPE_OBJFILE): Remove, change all users to use the type::objfile method instead. Change-Id: I6b3f580913fb1fb0cf986b176dba8db68e1fabf9
2021-01-07Fix regression in Ada do_full_matchTom Tromey1-2/+8
An earlier patch to ada-lang.c:do_full_match introduced a subtle change to the semantics. The previous code did: - if (strncmp (sym_name, search_name, search_name_len) == 0 - && is_name_suffix (sym_name + search_name_len)) - return true; - - if (startswith (sym_name, "_ada_") whereas the new code unconditionally skips a leading "_ada_". The difference occurs if the lookup name itself starts with "_ada_". In this case, the symbol won't match. Normally this doesn't seem to be a problem. However, it caused a regression on one particular (internal) test case on one particular platform. This patch changes the code to handle this case. I don't know how to write a reliable test case for this, so no test is included. 2021-01-07 Tom Tromey <tromey@adacore.com> * ada-lang.c (do_full_match): Conditionally skip "_ada_" prefix.
2021-01-07Fix regression in Ada aggregate assignmentTom Tromey1-1/+1
A recent upstream patch of mine caused a regression in aggregate assignment. The bug was that add_component_interval didn't properly update the array contents in one resize case. I found furthermore that there was no test case that would provoke this failure. This patch fixes the bug and introduces a test. gdb/ChangeLog 2021-01-07 Tom Tromey <tromey@adacore.com> * ada-lang.c (add_component_interval): Start loop using vector's updated size. gdb/testsuite/ChangeLog 2021-01-07 Tom Tromey <tromey@adacore.com> * gdb.ada/assign_arr.exp: Add 'others' test.
2021-01-06Fix fixed-point binary operation type handlingTom Tromey1-19/+39
Testing showed that gdb was not correctly handling some fixed-point binary operations correctly. Addition and subtraction worked by casting the result to the type of left hand operand. So, "fixed+int" had a different type -- and different value -- from "int+fixed". Furthermore, for multiplication and division, it does not make sense to first cast both sides to the fixed-point type. For example, this can prevent "f * 1" from yielding "f", if 1 is not in the domain of "f". Instead, this patch changes gdb to use the value. (This is somewhat different from Ada semantics, as those can yield a "universal fixed point".) This includes a new test case. It is only run in "minimal" mode, as the old-style fixed point works differently, and is obsolete, so I have no plans to change it. gdb/ChangeLog 2021-01-06 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_evaluate_subexp) <BINOP_ADD, BINOP_SUB>: Do not cast result. * valarith.c (fixed_point_binop): Handle multiplication and division specially. * valops.c (value_to_gdb_mpq): New function. (value_cast_to_fixed_point): Use it. gdb/testsuite/ChangeLog 2021-01-06 Tom Tromey <tromey@adacore.com> * gdb.ada/fixed_points/pck.ads (Delta4): New constant. (FP4_Type): New type. (FP4_Var): New variable. * gdb.ada/fixed_points/fixed_points.adb: Update. * gdb.ada/fixed_points.exp: Add tests for binary operators.
2021-01-01Update copyright year range in all GDB filesJoel Brobecker1-1/+1
This commits the result of running gdb/copyright.py as per our Start of New Year procedure... gdb/ChangeLog Update copyright year range in copyright header of all GDB files.
2020-12-16Change parameters to language_defn::post_parserTom Tromey1-4/+5
In the expression rewrite, Ada type resolution will be done at parse time rather than in a post-parse pass. At this point, language_defn::post_parser will be removed. However, for this to work, the information available to post_parser must be made available during the actual parse. This patch refactors this code slightly to make this possible. In particular, "void_context_p" is passed to the parser_state constructor, and the parser state is then passed to the post_parser method. gdb/ChangeLog 2020-12-16 Tom Tromey <tom@tromey.com> * rust-exp.y (rust_lex_tests): Update. * parser-defs.h (parser_state): Add void_p parameter. <void_context_p>: New member. * parse.c (parse_exp_in_context): Update. * language.h (language_defn::post_parser): Remove void_context_p, completing, tracker parameters. Add parser state. * ada-lang.c (ada_language::post_parser): Update.
2020-12-16Change void_context_p to boolTom Tromey1-1/+1
This patch changes void_context_p to bool, as a prerequisite to the change to post_parser that I submitted here: https://sourceware.org/pipermail/gdb-patches/2020-December/174080.html Tested by rebuilding. Note that nothing in-tree passes true here. I don't know why this is, but there is a use of this internally in AdaCore's tree. I will try to submit that patch, if it is needed. (And if not, I will come back around and remove this.) gdb/ChangeLog 2020-12-16 Tom Tromey <tom@tromey.com> * parse.c (parse_exp_1, parse_expression_for_completion): Update. (parse_exp_in_context): Change void_context_p to bool. * language.h (struct language_defn) <post_parser>: Change void_context_p to bool. * ada-lang.c (class ada_language) <post_parser>: Update.
2020-12-15C++-ify Ada component interval handlingTom Tromey1-74/+35
The Ada component interval handling code, used for aggregate assignments, does a pre-pass over the sub-expressions so that it can size an array. For my expression rewrite, it was handy to C++-ify this. gdb/ChangeLog 2020-12-15 Tom Tromey <tom@tromey.com> * ada-lang.c (num_component_specs): Remove. (assign_aggregate): Update. (aggregate_assign_positional, aggregate_assign_from_choices) (aggregate_assign_others, add_component_interval): Change arguments.
2020-12-14Handle block-local names for AdaTom Tromey1-23/+42
GNAT can generate a mangled name with "B_N" (where N is a number) in the middle, like "hello__B_1__fourth.0". This is used for names local to a block. Multiple levels of block-local name can also occur, a possibility that was neglected by v1 of this patch. This patch changes gdb to handle these names. The wild name matcher is updated a straightforward way. The full matcher is rewritten. The hash function is updated to ensure that this works. This version does not seem to have the performance problems that affected v1. In particular, the previously-slow "bt" problem has been fixed. gdb/ChangeLog 2020-12-14 Tom Tromey <tromey@adacore.com> * dictionary.c (language_defn::search_name_hash): Ignore "B". * ada-lang.c (advance_wild_match): Ignore "B". (full_match): Remove. (do_full_match): Rewrite. gdb/testsuite/ChangeLog 2020-12-14 Tom Tromey <tromey@adacore.com> * gdb.ada/nested.exp: Add new tests. * gdb.ada/nested/hello.adb (Fourth, Fifth): New procedures.
2020-12-14Use exact match in get_var_valueTom Tromey1-3/+5
get_var_value is only used when an exact match is needed. This changes this function to ensure this sort of matching is done. gdb/ChangeLog 2020-12-14 Tom Tromey <tromey@adacore.com> * ada-lang.c (get_var_value): Only consider exact matches.
2020-12-11Make bp_location derive from refcounted_objectTom Tromey1-1/+1
This changes bp_location to derive from refcounted_object, introduces a ref_ptr specialization for this type, and then changes bpstats::bp_location_at to use that specialization. This removes some manual reference counting and simplifies the code. gdb/ChangeLog 2020-12-11 Tom Tromey <tom@tromey.com> * inline-frame.c (stopped_by_user_bp_inline_frame): Update. * ada-lang.c (check_status_exception): Update. * breakpoint.c (free_bp_location): Remove. (decref_bp_location): Use bp_location_ref_policy. (bpstats::bpstats): Don't call incref_bp_location. (bpstats::~bpstats): Remove. (bpstats::bpstats): Update. (bpstat_check_watchpoint, bpstat_check_breakpoint_conditions) (bp_location::bp_location): Update. (incref_bp_location): Remove. (bkpt_print_it): Update. * breakpoint.h (class bp_location): Derive from refcounted_object. (struct bpstats): Remove destructor. <bp_location_at>: Now a bp_location_ref_ptr. <refc>: Remove. (bp_location_ref_ptr): New typedef. (struct bp_location_ref_policy): New.
2020-12-10Fix off-by-one error in ada_fold_nameKevin Buettner1-1/+2
I'm seeing a libstdc++ assertion failure when running GDB's "maint selftest" command when GDB is configured with the following CFLAGS and CXXFLAGS as part of the configure line: CFLAGS='-D_GLIBCXX_DEBUG -g3 -O0' CXXFLAGS='-D_GLIBCXX_DEBUG -g3 -O0' This is what I see when running the self tests: (gdb) maint selftest Running selftest aarch64-analyze-prologue. Running selftest aarch64-process-record. Running selftest arm-record. Running selftest arm_analyze_prologue. Running selftest array_view. Running selftest child_path. Running selftest cli_utils. Running selftest command_structure_invariants. Running selftest copy_bitwise. Running selftest copy_integer_to_size. Running selftest cp_remove_params. Running selftest cp_symbol_name_matches. Running selftest dw2_expand_symtabs_matching. /usr/include/c++/11/string_view:211: constexpr const value_type& std::basic_string_view<_CharT, _Traits>::operator[](std::basic_string_view<_CharT, _Traits>::size_type) const [with _CharT = char; _Traits = std::char_traits<char>; std::basic_string_view<_CharT, _Traits>::const_reference = const char&; std::basic_string_view<_CharT, _Traits>::size_type = long unsigned int]: Assertion '__pos < this->_M_len' failed. Aborted (core dumped) Here's a partial stack trace: #0 0x00007ffff6ef6262 in raise () from /lib64/libc.so.6 #1 0x00007ffff6edf8a4 in abort () from /lib64/libc.so.6 #2 0x00000000004249bf in std::__replacement_assert ( __file=0xef7480 "/usr/include/c++/11/string_view", __line=211, __function=0xef7328 "constexpr const value_type& std::basic_string_view<_CharT, _Traits>::operator[](std::basic_string_view<_CharT, _Traits>::size_type) const [with _CharT = char; _Traits = std::char_traits<char>; std::ba"..., __condition=0xef7311 "__pos < this->_M_len") at /usr/include/c++/11/x86_64-redhat-linux/bits/c++config.h:2624 #3 0x0000000000451737 in std::basic_string_view<char, std::char_traits<char> >::operator[] (this=0x7fffffffc200, __pos=8) at /usr/include/c++/11/string_view:211 #4 0x00000000004329f5 in ada_fold_name (name="function") at /ironwood1/sourceware-git/rawhide-master/bld/../../worktree-master/gdb/ada-lang.c:988 And, looking at frame #4... (top-gdb) up 4 at /ironwood1/sourceware-git/rawhide-master/bld/../../worktree-master/gdb/ada-lang.c:988 988 fold_buffer[i] = tolower (name[i]); (top-gdb) p i $1 = 8 (top-gdb) p name.size() $2 = 8 My patch adjusts the comparison to only copy name.size() characters from the string. I've added a separate statement for NUL character termination of fold_buffer[]. gdb/ChangeLog: * ada-lang.c (ada_fold_name): Fix off-by-one error.
2020-12-09Use add_angle_brackets in ada_lookup_encoded_symbolTom Tromey1-1/+1
Joel recently pointed out add_angle_brackets to me. This patch changes one spot in ada-lang.c to use this function rather than doing it on its own. gdb/ChangeLog 2020-12-09 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_lookup_encoded_symbol): Use add_angle_brackets.