aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2021-03-15Implement Ada operator overloadingTom Tromey8-35/+467
In the expression rewrite, I neglected to carry over support for Ada operator overloading. It turns out that there were no tests for this in-tree. This patch adds support for operator overloading, and adds the missing test. gdb/ChangeLog 2021-03-15 Tom Tromey <tromey@adacore.com> * ada-lang.c (numeric_type_p, integer_type_p): Return true for fixed-point. * ada-exp.y (maybe_overload): New function. (ada_wrap_overload): New function. (ada_un_wrap2, ada_wrap2, ada_wrap_op): Use maybe_overload. (exp1, simple_exp, relation, and_exp, and_then_exp, or_exp) (or_else_exp, xor_exp, primary): Update. gdb/testsuite/ChangeLog 2021-03-15 Tom Tromey <tromey@adacore.com> * gdb.ada/operator_call/twovecs.ads: New file. * gdb.ada/operator_call/twovecs.adb: New file. * gdb.ada/operator_call/opcall.adb: New file. * gdb.ada/operator_call.exp: New file.
2021-03-15Fix regression in Ada ptypeTom Tromey2-2/+7
This fixes PR ada/27545, which points out that a test in gdb.ada/tagged.exp started failing due to the expression rewrite. I didn't notice this failure because my system gcc-gnat debuginfo was out of date, and so the test was already failing in the baseline. Previously, the OP_VAR_VALUE case in ada_evaluate_subexp ended up doing a recursive call: arg1 = evaluate_subexp (nullptr, exp, pos, EVAL_NORMAL); However, during the rewrite I missed this fact and had the new code call the superclass implementation. This patch fixes the bug by changing this code to use a recursive call instead. gdb/ChangeLog 2021-03-15 Tom Tromey <tromey@adacore.com> PR ada/27545: * ada-lang.c (ada_var_value_operation::evaluate): Use recursive call for tagged type.
2021-03-15Fix Ada assignment resolutionTom Tromey7-1/+142
The expression rewrite missed an Ada resolution case. GDB previously knew how to disambiguate the right hand side of an assignment, but now it does not. This patch fixes the problem and adds the missing test case. gdb/ChangeLog 2021-03-15 Tom Tromey <tromey@adacore.com> * ada-exp.y (exp1): Handle resolution of the right hand side of an assignment. gdb/testsuite/ChangeLog 2021-03-15 Tom Tromey <tromey@adacore.com> * gdb.ada/enums_overload/enums_overload_main.adb: New file. * gdb.ada/enums_overload/enums_overload.ads: New file. * gdb.ada/enums_overload/enums_overload.adb: New file. * gdb.ada/enums_overload.exp: New file.
2021-03-15Fix bug in Ada aggregate assignmentTom Tromey8-11/+72
The expression rewrite caused a regression in the internal AdaCore test suite. The bug was that I had dropped a bit of code from aggregate assignment -- assign_aggregate used to return the container, which I thought was redundant, but which can actually change during the call. There was no test for this case in the tree, so I've added one. gdb/ChangeLog 2021-03-15 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_aggregate_operation::assign_aggregate): Return container. (ada_assign_operation::evaluate): Update. * ada-exp.h (class ada_aggregate_operation) <assign_aggregate>: Change return type. gdb/testsuite/ChangeLog 2021-03-15 Tom Tromey <tromey@adacore.com> * gdb.ada/assign_arr/target_wrapper.ads (IArray, Put, Do_Nothing): Declare. * gdb.ada/assign_arr/target_wrapper.adb: New file. * gdb.ada/assign_arr/main_p324_051.adb (IValue): New variable. Call Put. * gdb.ada/assign_arr.exp: Update.
2021-03-15gdb/fortran: Fix quad floating-point type for Intel compilers.Felix Willgerodt2-1/+8
Intel Fortran compilers emit the following DWARF for gdb.fortran/complex.f90: 0x00000071: DW_TAG_base_type DW_AT_name ("COMPLEX*32") DW_AT_encoding (DW_ATE_complex_float) DW_AT_byte_size (0x20) 0x00000078: DW_TAG_base_type DW_AT_name ("REAL*16") DW_AT_encoding (DW_ATE_float) DW_AT_byte_size (0x10) This results in GDB not reading the right values, as it wrongly assumes the default floatformat "floatformat_i387_ext" instead of "floatformat_ia64_quad_little". gdb/ChangeLog: 2021-03-15 Felix Willgerodt <felix.willgerodt@intel.com> * i386-tdep.c (i386_floatformat_for_type): Add COMPLEX*32 and REAL*16.
2021-03-15gdb: use make_scoped_restore to restore gdbpy_current_objfileAndrew Burgess9-6/+264
The current mechanism by which the Python gdb.current_objfile is maintained does not allow for nested auto-load events. It is assumed that once an auto-load script has finished loading then the current objfile should be set back to NULL. In a nested situation, we should be restoring the previous value. We already have an RAII class to handle save/restore type behaviour, so lets just switch to use that. The test is a little contrived, but is simple enough, and triggers the bug. The real use case might involve the auto-load script calling functions (either in the just-loaded object file, or in the main executable), which in turn trigger further auto-loads to occur. gdb/ChangeLog: * python/python.c (gdbpy_source_objfile_script): Use make_scoped_restore to restore gdbpy_current_objfile. (gdbpy_execute_objfile_script): Likewise. gdb/testsuite/ChangeLog: * gdb.python/py-auto-load-chaining-f1.c: New file. * gdb.python/py-auto-load-chaining-f1.o-gdb.py: New file. * gdb.python/py-auto-load-chaining-f2.c: New file. * gdb.python/py-auto-load-chaining-f2.o-gdb.py: New file. * gdb.python/py-auto-load-chaining.c: New file. * gdb.python/py-auto-load-chaining.exp: New file.
2021-03-14Use cu_header consistently in read_attribute_valueTom Tromey2-11/+16
read_attribute_value has a local cu_header variable, but then some spots in the function use cu->header instead. It seems better to me to prefer the local everywhere, so this patch makes this change. gdb/ChangeLog 2021-03-14 Tom Tromey <tom@tromey.com> * dwarf2/read.c (read_attribute_value): Use cu_header consistently.
2021-03-14Minor tweak to use die_reader_specs::abfdTom Tromey2-2/+7
For an experiment I'm working on, it would be convenient if die_reader_specs::cu could be NULL. This is fairly involved to implement, but I did notice one spot that could conveniently be updated. While making this trivial change, I also noticed a small, related formatting error. 2021-03-14 Tom Tromey <tom@tromey.com> * dwarf2/read.c (struct die_reader_specs) <abfd>: Fix formatting. (peek_die_abbrev): Use reader.abfd.
2021-03-14Set dwarf2_per_cu_data::m_header_read_inTom Tromey2-0/+7
I noticed that nothing in dwarf2/read.c sets dwarf2_per_cu_data::m_header_read_in. This patch adds the appropriate assignment. gdb/ChangeLog 2021-03-14 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_per_cu_data::get_header): Set m_header_read_in.
2021-03-13Constify abbrev_table::lookup_abbrevTom Tromey3-10/+20
This changes abbrev_table::lookup_abbrev to return a pointer to const, then fixes up the affected code. gdb/ChangeLog 2021-03-13 Tom Tromey <tom@tromey.com> * dwarf2/read.c (struct partial_die_info): Update. (peek_die_abbrev, skip_children, skip_one_die, read_full_die_1) (load_partial_dies, partial_die_info::partial_die_info): Update. * dwarf2/abbrev.h (lookup_abbrev): Constify.
2021-03-13Remove Irix 6 workaround from DWARF abbrev readerTom Tromey2-19/+13
abbrev_table::read has a workaround for Irix 6. The last release of Irix was in 2006, and (according to Wikipedia) hardware produced after 2007 cannot run Irix. I think this workaround can safely be retired. gdb/ChangeLog 2021-03-13 Tom Tromey <tom@tromey.com> * dwarf2/abbrev.c (abbrev_table::read): Remove Irix 6 workaround.
2021-03-12Use RAII to set the per-thread SIGSEGV handlerChristian Biesinger4-12/+51
This avoids using a thread-local extern variable, which causes link errors on some platforms, notably Cygwin. But I think this is a better pattern even outside of working around linker bugs because it encapsulates direct access to the variable inside the class, instead of having a global extern variable. The cygwin link error is: cp-support.o: in function `gdb_demangle(char const*, int)': /home/Christian/binutils-gdb/obj/gdb/../../gdb/cp-support.c:1619:(.text+0x6472): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `TLS init function for thread_local_segv_handler' /home/Christian/binutils-gdb/obj/gdb/../../gdb/cp-support.c:1619:(.text+0x648b): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `TLS init function for thread_local_segv_handler' collect2: error: ld returned 1 exit status 2021-03-12 Christian Biesinger <cbiesinger@google.com> PR threads/27239 * cp-support.c: Use scoped_segv_handler_restore. * event-top.c (thread_local_segv_handler): Made static. (scoped_segv_handler_restore::scoped_segv_handler_restore): New function. (scoped_segv_handler_restore::~scoped_segv_handler_restore): New function. * event-top.h (class scoped_segv_handler_restore): New class. (thread_local_segv_handler): Removed.
2021-03-12gdb/testsuite: resolve remaining duplicate test names in gdb.python/*.expAndrew Burgess7-8/+25
This commit resolves the remaining duplicate test names in the gdb.python/ directory, there's 1 duplicate per test script. In each case I have just extended some test names to make them more descriptive. gdb/testsuite/ChangeLog: * gdb.python/py-bad-printers.exp: Extend test names to make them unique. * gdb.python/py-events.exp: Likewise. * gdb.python/py-finish-breakpoint2.exp: Likewise. * gdb.python/py-frame-inline.exp: Likewise. * gdb.python/py-frame.exp: Likewise. * gdb.python/py-infthread.exp: Likewise.
2021-03-12gdb/testsuite: remove duplicate test from gdb.python/py-value-cc.expAndrew Burgess2-2/+4
While squashing duplicate test names I spotted an actual duplicate test, I suspect a copy & paste error in an earlier patch. I can see no reason why we should need to duplicate this test, so I'm removing one copy of it. gdb/testsuite/ChangeLog: * gdb.python/py-value-cc.exp: Remove a duplicate test.
2021-03-12gdb/testsuite: check the correct Python variable in testAndrew Burgess2-1/+6
While squashing duplicate test names I spotted what looked like a copy & paste error. During this test a Python variable is created, and then we call the type method on that variable. In one case we create a variable and then call the type method on a variable created for a previous test. I can see no reason why this should be what we want, it doesn't line up with the comments in the test script, so I've updated the test. Note, the expected result doesn't change, just the command issued (the test relates to stripping typedefs). gdb/testsuite/ChangeLog: * gdb.python/lib-types.exp: Update the test to check the correct python variable.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-explore-cc.expAndrew Burgess2-4/+9
Add additional text to some test names to make them unique. In one case, correct the test name (copy & paste error) to make it correctly reflect what the test is doing. gdb/testsuite/ChangeLog: * gdb.python/py-explore-cc.exp: Extend test names to make them unique.
2021-03-12gdb/testsuite: remove a duplicate testAndrew Burgess2-2/+4
I spotted a duplicate test name in this test script. Turns out it's an actual duplicate test. Delete one copy of this test. gdb/testsuite/ChangeLog: * gdb.python/py-lookup-type.exp: Remove duplicate test.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-symtab.expAndrew Burgess2-2/+9
Extend the names of some tests to make them unique. gdb/testsuite/ChangeLog: * gdb.python/py-symtab.exp: Extend test names to make them unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-prompt.expAndrew Burgess2-39/+51
Use with_test_prefix to make test names unique. gdb/testsuite/ChangeLog: * gdb.python/py-prompt.exp: Add with_test_prefix to make test names unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-block.expAndrew Burgess2-7/+15
Extend some test names to make them unique. gdb/testsuite/ChangeLog: * gdb.python/py-block.exp: Give tests unique names.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-pp-maint.expAndrew Burgess2-5/+15
Extend the test names with additional text to make them unique. gdb/testsuite/ChangeLog: * gdb.python/py-pp-maint.exp: Extend test names to make them unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-explore.expAndrew Burgess2-28/+35
Add a with_test_prefix to make test names unique. gdb/testsuite/ChangeLog: * gdb.python/py-explore.exp: Add with_test_prefix to make test names unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-finish-breakpoint.expAndrew Burgess2-13/+19
Make test names unique by just adding additional text to the test names. As this is a Python test that repeatedly imports the Python script I've just numbered the test names in this case rather than trying to come up with anything better, hence we have: import python scripts, 1 import python scripts, 2 ... import python scripts, 6 Not great, but hopefully good enough. Everything else has a slightly more descriptive test name. gdb/testsuite/ChangeLog: * gdb.python/py-finish-breakpoint.exp: Make test names unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-strfns.expAndrew Burgess2-1/+8
Wrap some code in `with_test_prefix` to make test names unique. gdb/testsuite/ChangeLog: * gdb.python/py-strfns.exp: Use with_test_prefix to make test names unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-format-string.expAndrew Burgess2-18/+23
Make use of `proc_with_prefix` for every test_* proc in order to make the test names unique within this test file. gdb/testsuite/ChangeLog: * gdb.python/py-format-string.exp: Use proc_with_prefix to make test names unique.
2021-03-12gdb/testsuite: make test names unique in gdb.python/py-mi.expAndrew Burgess2-156/+171
Use with_test_prefix to make the test names unique. gdb/testsuite/ChangeLog: * gdb.python/py-mi.exp: Use with_test_prefix to make test names unique.
2021-03-10Use bool for "parse_completion"Tom Tromey4-13/+24
Some spots in GDB already use bool for "parse_completion", but a few were still using int. This patch updates these to bool. I'm checking this in. gdb/ChangeLog 2021-03-10 Tom Tromey <tromey@adacore.com> * parser-defs.h (parser_state): Change completion to bool. <parse_completion>: Likewise. * ada-lang.h (ada_find_operator_symbol, ada_resolve_funcall) (ada_resolve_variable, ada_resolve_function): Update. * ada-lang.c (ada_find_operator_symbol): Change parse_completion to bool. (ada_resolve_funcall, ada_resolve_variable) (ada_resolve_function): Likewise.
2021-03-09Fix function call regression in new evaluatorTom Tromey5-1/+94
The internal AdaCore test suite revealed a bug in the new evaluator. A hunk of evaluate_funcall was not correctly transcribed. This was not caught in my original testing because the feature in question was apparently not tested in gdb. This patch fixes the oversight. The idea here is that ordinary function calls should use the function's formal parameter types as the expected types of subexpressions. Regression tested on x86-64 Fedora 32. gdb/ChangeLog 2021-03-09 Tom Tromey <tromey@adacore.com> * eval.c (operation::evaluate_funcall): Use function formal parameter types when evaluating. gdb/testsuite/ChangeLog 2021-03-09 Tom Tromey <tromey@adacore.com> * gdb.base/cast-call.exp: New file. * gdb.base/cast-call.c: New file.
2021-03-09gdb: fix field names of GDB's type main_type structureAndrew Burgess4-3/+155
In commit: commit 5b7d941b90d1a232dc144dc14850dd2fb63c35da Date: Fri Jan 22 12:21:09 2021 -0500 gdb: add owner-related methods to struct type two fields of struct maint_type were renamed. 'flag_objfile_owned' became 'm_flag_objfile_owned' and 'owner' became 'm_owner'. Update our python helper script to take this into account. I've added a basic test that uses the self-test framework to load the pretty printers, and print a type. The test relies on stopping in GDB's `value_print` function. gdb/ChangeLog: * gdb-gdb.py.in (StructMainTypePrettyPrinter) <owner_to_string>: Updated fields names flag_objfile_owned to m_flag_objfile_owned, and owner to m_owner. gdb/testsuite/ChangeLog: * gdb.gdb/python-helper.exp: New file.
2021-03-09gdb/fortran: Add 'LOC' intrinsic support.Felix Willgerodt7-1/+51
LOC(X) returns the address of X as an integer: https://gcc.gnu.org/onlinedocs/gfortran/LOC.html Before: (gdb) p LOC(r) No symbol "LOC" in current context. After: (gdb) p LOC(r) $1 = 0xffffdf48 gdb/ChangeLog: 2021-03-09 Felix Willgerodt <felix.willgerodt@intel.com> * f-exp.h (eval_op_f_loc): Declare. (expr::fortran_loc_operation): New typedef. * f-exp.y (exp): Handle UNOP_FORTRAN_LOC after parsing an UNOP_INTRINSIC. (f77_keywords): Add LOC keyword. * f-lang.c (eval_op_f_loc): New function. * std-operator.def (UNOP_FORTRAN_LOC): New operator. gdb/testsuite/ChangeLog: 2020-03-09 Felix Willgerodt <felix.willgerodt@intel.com> * gdb.fortran/intrinsics.exp: Add LOC tests.
2021-03-09gdb/fotran: add support for the 'shape' keywordAndrew Burgess8-0/+277
Add support for the SHAPE keyword to GDB's Fortran expression parser. gdb/ChangeLog: * f-exp.h (eval_op_f_array_shape): Declare. (fortran_array_shape_operation): New type. * f-exp.y (exp): Handle UNOP_FORTRAN_SHAPE after parsing UNOP_INTRINSIC. (f77_keywords): Add "shape" keyword. * f-lang.c (fortran_array_shape): New function. (eval_op_f_array_shape): New function. * std-operator.def (UNOP_FORTRAN_SHAPE): New operator. gdb/testsuite/ChangeLog: * gdb.fortran/shape.exp: New file. * gdb.fortran/shape.f90: New file.
2021-03-09gdb/fortran: add support for 'SIZE' keywordAndrew Burgess8-0/+359
Add support for the 'SIZE' keyword to the Fortran expression parser. This returns the number of elements either in an entire array (passing a single argument to SIZE), or in a particular dimension of an array (passing two arguments to SIZE). At this point I have not added support for the optional third argument to SIZE, which controls the exact integer type of the result. gdb/ChangeLog: * f-exp.y (eval_op_f_array_size): Declare 1 and 2 argument forms of this function. (expr::fortran_array_size_1arg): New type. (expr::fortran_array_size_2arg): Likewise. * f-exp.y (exp): Handle FORTRAN_ARRAY_SIZE after parsing UNOP_OR_BINOP_INTRINSIC. (f77_keywords): Add "size" keyword. * f-lang.c (fortran_array_size): New function. (eval_op_f_array_size): New function, has a 1 arg and 2 arg form. * std-operator.def (FORTRAN_ARRAY_SIZE): New operator. gdb/testsuite/ChangeLog: * gdb.fortran/size.exp: New file. * gdb.fortran/size.f90: New file.
2021-03-09gdb/fortran: add support for RANK keywordAndrew Burgess8-0/+189
gfortran supports the RANK keyword, see: https://gcc.gnu.org/onlinedocs/gfortran/RANK.html#RANK this commit adds support for this keyword to GDB's Fortran expression parser. gdb/ChangeLog: * f-exp.h (eval_op_f_rank): Declare. (expr::fortran_rank_operation): New typedef. * f-exp.y (exp): Handle UNOP_FORTRAN_RANK after parsing an UNOP_INTRINSIC. (f77_keywords): Add "rank" keyword. * f-lang.c (eval_op_f_rank): New function. * std-operator.def (UNOP_FORTRAN_RANK): New operator. gdb/testsuite/ChangeLog: * gdb.fortran/rank.exp: New file. * gdb.fortran/rank.f90: New file.
2021-03-08Remove some null checksTom Tromey3-16/+20
When not parsing for completion, parse_expression ensures that the resulting expression has operations. This patch removes a couple of unnecessary checks for this situation. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * printcmd.c (set_command): Remove null check. * value.c (init_if_undefined_command): Remove null check.
2021-03-08Use bound_minimal_symbol in var_msym_value_operationTom Tromey12-61/+61
This changes var_msym_value_operation to use a bound_minimal_symbol rather than separate minsym and objfile parameters. The main benefit of this is removing the possibly-confusing check_objfile overload for a plain minimal symbol. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parse.c (parser_state::push_symbol, parser_state::push_dollar): Update. * p-exp.y (variable): Update. * go-exp.y (variable): Update. * expprint.c (dump_for_expression): Use bound_minimal_symbol. Remove overload for objfile. * expop.h (eval_op_var_msym_value): Use bound_minimal_symbol parameter. (check_objfile): Likewise. (dump_for_expression): Likewise. Remove overload for objfile. (class var_msym_value_operation): Use bound_minimal_symbol. * eval.c (eval_op_var_msym_value): Use bound_minimal_symbol parameter. (var_msym_value_operation::evaluate_for_address) (var_msym_value_operation::evaluate_for_sizeof) (var_msym_value_operation::evaluate_for_cast): Update. * d-exp.y (PrimaryExpression): Update. * c-exp.y (variable): Update. * ax-gdb.c (var_msym_value_operation::do_generate_ax): Update. * ada-lang.c (ada_var_msym_value_operation::evaluate_for_cast): Update. * ada-exp.y (write_var_or_type): Update.
2021-03-08Change exp_uses_objfile to return boolTom Tromey3-5/+10
This change exp_uses_objfile to return bool. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parser-defs.h (exp_uses_objfile): Return bool. * parse.c (exp_uses_objfile): Return bool.
2021-03-08Remove EVAL_SKIPTom Tromey11-164/+56
EVAL_SKIP was needed in the old expression implementation due to its linearized tree structure. This is not needed in the new implementation, because it is trivial to not evaluate a subexpression. This patch removes the last vestiges of EVAL_SKIP. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * value.h (eval_skip_value): Don't declare. * opencl-lang.c (eval_opencl_assign): Update. * m2-lang.c (eval_op_m2_high, eval_op_m2_subscript): Update. * f-lang.c (eval_op_f_abs, eval_op_f_mod, eval_op_f_ceil) (eval_op_f_floor, eval_op_f_modulo, eval_op_f_cmplx): Remove. * expression.h (enum noside) <EVAL_SKIP>: Remove. * expop.h (typeof_operation::evaluate) (decltype_operation::evaluate, unop_addr_operation::evaluate) (unop_sizeof_operation::evaluate, assign_operation::evaluate) (cxx_cast_operation::evaluate): Update. * eval.c (eval_skip_value): Remove. (eval_op_scope, eval_op_var_entry_value) (eval_op_func_static_var, eval_op_string, eval_op_objc_selector) (eval_op_concat, eval_op_ternop, eval_op_structop_struct) (eval_op_structop_ptr, eval_op_member, eval_op_add, eval_op_sub) (eval_op_binary, eval_op_subscript, eval_op_equal) (eval_op_notequal, eval_op_less, eval_op_gtr, eval_op_geq) (eval_op_leq, eval_op_repeat, eval_op_plus, eval_op_neg) (eval_op_complement, eval_op_lognot, eval_op_ind) (eval_op_memval, eval_op_preinc, eval_op_predec) (eval_op_postinc, eval_op_postdec, eval_op_type) (eval_binop_assign_modify, eval_op_objc_msgcall) (eval_multi_subscript, logical_and_operation::evaluate) (logical_or_operation::evaluate, array_operation::evaluate) (operation::evaluate_for_cast) (var_msym_value_operation::evaluate_for_cast) (var_value_operation::evaluate_for_cast): Update. * c-lang.c (c_string_operation::evaluate): Update. * c-exp.h (objc_nsstring_operation::evaluate) (objc_selector_operation::evaluate): Update. * ada-lang.c (ada_assign_operation::evaluate) (eval_ternop_in_range, ada_unop_neg, ada_unop_in_range) (ada_atr_size): Update.
2021-03-08Merge namespace scopes in eval.cTom Tromey2-10/+4
The big deletion patch left some identical namespace scopes sitting next to one another. This patch removes the redundant "namespace expr"s. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c: Merge "namespace" scopes.
2021-03-08Inline expr_builder methodsTom Tromey3-16/+15
This inlines the expr_builder constructor and release method. These are straightforward, so this seemed simpler. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parser-defs.h (struct expr_builder) <expr_builder>: Inline. <release>: Inline. * parse.c (expr_builder::expr_builder, expr_builder::release): Remove.
2021-03-08Inline expression constructorTom Tromey3-12/+13
The struct expression constructor no longer does any real work, so this inlines it. The default destructor can also be used now as well. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * parse.c (expression::expression, expression::~expression): Remove. * expression.h (struct expression): Inline constructor. Remove destructor.
2021-03-08Remove BINOP_ENDTom Tromey7-100/+107
BINOP_END is used only as a "meaningless" value in various tables. This patch changes these to use OP_NULL instead, and removes BINOP_END. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (BINOP_END): Remove. * p-exp.y (tokentab3, tokentab2): Use OP_NULL, not BINOP_END. * go-exp.y (tokentab2): Use OP_NULL, not BINOP_END. * f-exp.y (dot_ops, f77_keywords): Use OP_NULL, not BINOP_END. * d-exp.y (tokentab2, ident_tokens): Use OP_NULL, not BINOP_END. * c-exp.y (tokentab3, tokentab2, ident_tokens): Use OP_NULL, not BINOP_END.
2021-03-08Remove OP_UNUSED_LASTTom Tromey2-3/+4
OP_UNUSED_LAST is no longer needed with C++ -- the trailing comma is fine. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * expression.h (enum exp_opcode) <OP_UNUSED_LAST>: Remove.
2021-03-08Remove OP_EXTENDED0Tom Tromey2-4/+4
OP_EXTENDED0 was only used for an assertion in the code to rewrite an expression into prefix form. That code is gone, so this patch removes the constant. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (OP_EXTENDED0): Remove.
2021-03-08Remove unused Ada opcodesTom Tromey2-43/+6
Several Ada expression opcodes are now unused, and can be removed. Most of these are handled in a different way by the code. OP_ATR_IMAGE, however, was never implemented. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (OP_NAME, OP_ATR_IMAGE, OP_ATR_MODULUS) (OP_OTHERS, OP_CHOICES, OP_POSITIONAL, OP_DISCRETE_RANGE): Remove.
2021-03-08Remove unused Modula-2 opcodesTom Tromey2-9/+5
As noted in an earlier patch, Modula-2 defined some opcodes but then never implemented them. This patch removes the unnecessary constants. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (UNOP_CAP, UNOP_CHR, UNOP_ORD, UNOP_FLOAT) (UNOP_MAX, UNOP_MIN, UNOP_ODD, UNOP_TRUNC, OP_M2_STRING): Remove.
2021-03-08Remove two Ada opcodesTom Tromey4-6/+10
The OP_ATR_MIN and OP_ATR_MAX constants aren't truly needed. Internally, they are converted to BINOP_MIN and BINOP_MAX. This patch removes them in favor of simple reuse. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * std-operator.def (OP_ATR_MIN, OP_ATR_MAX): Remove. * ada-lang.c (ada_binop_minmax): Update. * ada-exp.h (ada_binop_min_operation, ada_binop_max_operation): Use BINOP_MIN and BINOP_MAX.
2021-03-08Remove union exp_elementTom Tromey33-5316/+147
This removes union exp_element functions that either create such elements or walk them. struct expression no longer holds exp_elements. A couple of language_defn methods are also removed, as they are obsolete. Note that this patch also removes the print_expression code. The only in-tree caller of this was from dump_prefix_expression, which is only called when expression debugging is enabled. Implementing this would involve a fair amount of code, and it seems to me that prefix dumping is preferable anyway, as it is unambiguous. So, I have not reimplemented this feature. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * value.h (evaluate_subexp_with_coercion): Don't declare. * parse.c (exp_descriptor_standard): Remove. (expr_builder::expr_builder, expr_builder::release): Update. (expression::expression): Remove size_t parameter. (expression::~expression): Simplify. (expression::resize): Remove. (write_exp_elt, write_exp_elt_opcode, write_exp_elt_sym) (write_exp_elt_msym, write_exp_elt_block, write_exp_elt_objfile) (write_exp_elt_longcst, write_exp_elt_floatcst) (write_exp_elt_type, write_exp_elt_intern, write_exp_string) (write_exp_string_vector, write_exp_bitstring): Remove. * p-lang.h (class pascal_language) <opcode_print_table, op_print_tab>: Remove. * p-lang.c (pascal_language::op_print_tab): Remove. * opencl-lang.c (class opencl_language) <opcode_print_table>: Remove. * objc-lang.c (objc_op_print_tab): Remove. (class objc_language) <opcode_print_table>: Remove. * m2-lang.h (class m2_language) <opcode_print_table, op_print_tab>: Remove. * m2-lang.c (m2_language::op_print_tab): Remove. * language.h (struct language_defn) <post_parser, expression_ops, opcode_print_table>: Remove. * language.c (language_defn::expression_ops) (auto_or_unknown_language::opcode_print_table): Remove. * go-lang.h (class go_language) <opcode_print_table, op_print_tab>: Remove. * go-lang.c (go_language::op_print_tab): Remove. * f-lang.h (class f_language) <opcode_print_table>: Remove <op_print_tab>: Remove. * f-lang.c (f_language::op_print_tab): Remove. * expression.h (union exp_element): Remove. (struct expression): Remove size_t parameter from constructor. <resize>: Remove. <first_opcode>: Update. <nelts, elts>: Remove. (EXP_ELEM_TO_BYTES, BYTES_TO_EXP_ELEM): Remove. (evaluate_subexp_standard, print_expression, op_string) (dump_raw_expression): Don't declare. * expprint.c (print_expression, print_subexp) (print_subexp_funcall, print_subexp_standard, op_string) (dump_raw_expression, dump_subexp, dump_subexp_body) (dump_subexp_body_funcall, dump_subexp_body_standard): Remove. (dump_prefix_expression): Update. * eval.c (evaluate_subexp): Remove. (evaluate_expression, evaluate_type): Update. (evaluate_subexpression_type): Remove. (fetch_subexp_value): Remove "pc" parameter. Update. (extract_field_op, evaluate_struct_tuple, evaluate_funcall) (evaluate_subexp_standard, evaluate_subexp_for_address) (evaluate_subexp_with_coercion, evaluate_subexp_for_sizeof) (evaluate_subexp_for_cast): Remove. (parse_and_eval_type): Update. * dtrace-probe.c (dtrace_probe::compile_to_ax): Update. * d-lang.c (d_op_print_tab): Remove. (class d_language) <opcode_print_table>: Remove. * c-lang.h (c_op_print_tab): Don't declare. * c-lang.c (c_op_print_tab): Remove. (class c_language, class cplus_language, class asm_language, class minimal_language) <opcode_print_table>: Remove. * breakpoint.c (update_watchpoint, watchpoint_check) (watchpoint_exp_is_const, watch_command_1): Update. * ax-gdb.h (union exp_element): Don't declare. * ax-gdb.c (const_var_ref, const_expr, maybe_const_expr) (gen_repeat, gen_sizeof, gen_expr_for_cast, gen_expr) (gen_expr_binop_rest): Remove. (gen_trace_for_expr, gen_eval_for_expr, gen_printf): Update. * ada-lang.c (ada_op_print_tab): Remove. (class ada_language) <post_parser, opcode_print_table>: Remove.
2021-03-08Remove now-unused C evaluator codeTom Tromey7-483/+14
Now that the C parser has switched to the new style, there is no need for the old C evaluation code. This affects some other languages that were relying on the C code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * go-lang.c (go_language::expression_ops): Don't declare. * go-lang.h (class go_language) <expression_ops>: Remove. * opencl-lang.c (evaluate_subexp_opencl, exp_descriptor_opencl): Remove. (class opencl_language) <expression_ops>: Remove. * d-lang.c (class d_language) <expression_ops>: Remove. * c-lang.h (evaluate_subexp_c, exp_descriptor_c): Don't declare. * c-lang.c (evaluate_subexp_c, exp_descriptor_c): Remove. (class c_language, class cplus_language, class asm_language) (class minimal_language) <expression_ops>: Remove.
2021-03-08Remove now-unused Ada evaluator codeTom Tromey2-1760/+19
Now that the Ada parser has switched to the new style, there is no need for the old Ada evaluation code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * ada-lang.c (resolve_subexp, replace_operator_with_call) (evaluate_subexp_type, assign_aggregate) (aggregate_assign_positional, aggregate_assign_from_choices) (aggregate_assign_others, ada_evaluate_subexp_for_cast) (ada_evaluate_subexp, ADA_OPERATORS, ada_operator_length) (ada_operator_check, ada_forward_operator_length) (ada_dump_subexp_body, ada_print_subexp, ada_exp_descriptor): Remove. (post_parser): Update. (class ada_language) <expresssion_ops>: Remove.
2021-03-08Remove now-unused Modula-2 evaluator codeTom Tromey3-43/+7
Now that the Modula-2 parser has switched to the new style, there is no need for the old Modula-2 evaluation code. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * m2-lang.h (class m2_language) <expresssion_ops, exp_descriptor_modula2>: Remove. * m2-lang.c (evaluate_subexp_modula2) (m2_language::exp_descriptor_modula2): Remove.