From 09b59ee38099437254e739e8de2e44b98447a4e6 Mon Sep 17 00:00:00 2001 From: Daniel Berlin Date: Fri, 10 Mar 2000 08:02:58 +0000 Subject: [PATCH] Fix C++ overload support, see through references --- gdb/ChangeLog | 412 ++++++++++++++++++++++++++----------------------- gdb/defs.h | 23 +-- gdb/gdbtypes.c | 58 +++---- gdb/gdbtypes.h | 27 ++-- gdb/valops.c | 220 +++++++++++++++----------- 5 files changed, 410 insertions(+), 330 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a8b580a0605..24bc1245cc9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,33 @@ +2000-03-10 Daniel Berlin + Fix C++ overloading, add support for seeing through references. + + * defs.h (STREQ_IW): add STREQ_IW, like STREQ, except it's + whitespace insensitive + + * valops.c (find_overload_match): Handle STABS overloading for + C++. + (find_overload_match): Look in right place for function arguments + in the debug info. + (find_overload_match): Rather than giving up when we have >1 + perfect match, just choose one, especially since the + recommendation GDB gives ("disambiguate it by specifying function + signature"), is basically impossible. + (check_field_in): STREQ->STREQ_IW + (search_struct_field): STREQ->STREQ_IW + (find_method_list): STREQ->STREQ_IW + + * gdbtypes.c (rank_one_type): Add ability to see through + references. + (rank_one_type): strcmp->strcmp_iw, because the whitespace could + be different. + (rank_function): Rank function properly (was doing it wrong + before, comparing the wrong parts of the arrays) + (rank_one_type): Change #if 0 to #ifdef DEBUG_OLOAD. + + * gdbtypes.h: Add REFERENCE_CONVERSION_BADNESS for "badness" + associated with converting a non-reference to a reference. + + Fri Mar 10 11:44:55 2000 Andrew Cagney * MAINTAINERS: Devolve responsibility for domain maintenance. @@ -14,8 +44,8 @@ Fri Mar 10 11:44:55 2000 Andrew Cagney Thu Mar 9 14:21:07 2000 Andrew Cagney * MAINTAINERS (Core): Anthony Green is the Java - including - testsuite - maintainer. Reformat testsuite and language support - sections + testsuite - maintainer. Reformat testsuite and language support + sections 2000-03-08 Mark Kettenis @@ -51,7 +81,7 @@ Thu Mar 9 14:21:07 2000 Andrew Cagney 2000-03-06 Elena Zannoni - From Eli Zaretskii : + From Eli Zaretskii : * event-loop.c (poll_timers): Don't compare delta.tv_sec with zero, since time_t might be unsigned. @@ -128,13 +158,13 @@ Sun Mar 5 19:40:27 2000 Andrew Cagney (i386_linux_sigcontext_addr): New function. Recognize the names of the signal tranmpolines used by recent versions of the GNU C library, and add support for RT signals. - (LINUX_SIGCONTEXT_PC_OFFSET, LINUX_SIGCONTEXT_SP_OFFSET): New + (LINUX_SIGCONTEXT_PC_OFFSET, LINUX_SIGCONTEXT_SP_OFFSET): New defines. Moved here from config/i386/tm-linux.h. (i386_linux_sigtramp_saved_pc, i386_linux_sigtramp_saved_sp): Reimplement in terms of i386_linux_sigcontext_addr. * config/i386/tm-linux.h (LINUX_SIGCONTEXT_SIZE): Removed. - (LINUX_SIGCONTEXT_PC_OFFSET, LINUX_SIGCONTEXT_SP_OFFSET): - Moved to i386-tdep.c. + (LINUX_SIGCONTEXT_PC_OFFSET, LINUX_SIGCONTEXT_SP_OFFSET): + Moved to i386-tdep.c. (IN_SIGTRAMP): Redefine to call i386_linux_in_sigtramp. Sat Mar 4 19:38:11 2000 Andrew Cagney @@ -145,57 +175,57 @@ Sat Mar 4 19:38:11 2000 Andrew Cagney Sat Mar 4 17:23:06 2000 Andrew Cagney * MAINTAINERS: Frank Ch. Eigler and Andrew Cagney co-ordinate the - sim directory. + sim directory. Sat Mar 4 16:19:31 2000 Andrew Cagney * MAINTAINERS: Add Michael Snyder and Peter Schauer to list of - ``Blanket Write Privs'' maintainers. + ``Blanket Write Privs'' maintainers. Sat Mar 4 15:58:40 2000 Andrew Cagney From Sun 20 Feb 2000 Robert Lipe : * language.c (longest_local_hex_string_custom): Don't compile - 'long long' section if host doesn't have 'long long'. + 'long long' section if host doesn't have 'long long'. Sat Mar 4 15:45:38 2000 Andrew Cagney * language.c (longest_raw_hex_string): Comment out. Appears - unused. + unused. Sat Mar 4 13:02:09 2000 Andrew Cagney * utils.c (mcalloc), defs.h (mcalloc): Keep consistent with - "mmalloc.h" which means using PTRs. + "mmalloc.h" which means using PTRs. (init_malloc, msavestring, mstrsave): Convert to PTR free ISO-C. Sat Mar 4 11:49:21 2000 Andrew Cagney * defs.h (store_address, store_unsigned_integer, store_address): - Replace PTR with void* in delcaration. + Replace PTR with void* in delcaration. * findvar.c (extract_signed_integer, extract_unsigned_integer, - extract_long_unsigned_integer, extract_address, - store_signed_integer, store_unsigned_integer, store_address): - Convert definition to ISO-C. Replace PTR with void*. + extract_long_unsigned_integer, extract_address, + store_signed_integer, store_unsigned_integer, store_address): + Convert definition to ISO-C. Replace PTR with void*. Sat Mar 4 10:57:25 2000 Andrew Cagney * defs.h (make_cleanup_func): Document as deprecated. (make_cleanup_ftype): New typedef. Make signature consistent with - other function typedefs. Document as not be used out side of - make_cleanup code. Use in make_cleanup declarations. + other function typedefs. Document as not be used out side of + make_cleanup code. Use in make_cleanup declarations. (null_cleanup): Replace PTR with void*. - + * utils.c (make_cleanup, make_final_cleanup, make_run_cleanup, - make_exec_cleanup, make_exec_error_cleanup, make_my_cleanup, - null_cleanup): Change K&R definition to ISO-C using void* and - make_cleanup_fytpe. + make_exec_cleanup, make_exec_error_cleanup, make_my_cleanup, + null_cleanup): Change K&R definition to ISO-C using void* and + make_cleanup_fytpe. (discard_my_cleanups): Don't cast argument to free. 2000-03-03 Elena Zannoni * defs.h (struct continuation_arg): Change type of field 'data' - from PTR to void *. + from PTR to void *. * event-loop.h: Eliminate uses of PTR, use 'void *' instead. @@ -204,13 +234,13 @@ Sat Mar 4 10:57:25 2000 Andrew Cagney Fri Mar 3 15:39:34 2000 Andrew Cagney * Makefile.in (CONFIG_CLEAN, CONFIG_ALL, LN_S): Defined by - configure. + configure. (SUBDIR_MI_CLEAN, SUBDIR_GDBTK_CLEAN, SUBDIR_MI_ALL, - SUBDIR_GDBTK_ALL): Define. + SUBDIR_GDBTK_ALL): Define. (all-gdbtk, clean-gdbtk): New targets. (all): Add CONFIG_ALL as dependency. (clean): Add CONFIG_CLEAN as dependency. - + * configure.in (CONFIG_ALL, CONFIG_CLEAN): Define. (LN_S): Define. Delete GDBtk's link code. @@ -224,7 +254,7 @@ Fri Mar 3 13:12:34 2000 Andrew Cagney 2000-03-02 Elena Zannoni * config/alpha/alpha-linux.mh: Remove core-regset.o fron the - NATDEPFILES list. + NATDEPFILES list. 2000-03-02 Mark Kettenis @@ -250,25 +280,25 @@ Fri Mar 3 13:12:34 2000 Andrew Cagney Thu Mar 2 09:04:46 2000 Andrew Cagney - * MAINTAINERS: Daniel Berlin is C++ maintainer. + * MAINTAINERS: Daniel Berlin is C++ maintainer. Thu Mar 2 08:55:35 2000 Andrew Cagney * MAINTAINERS: Mark Kettenis is the x86 architcture maintainer and - a joint GNU/Linux/x86 maintainer. Nick Duffeck and Robert Lipe - share SCO/Unixware. Nick Duffek and Peter Schauer share - Solaris/x86. + a joint GNU/Linux/x86 maintainer. Nick Duffeck and Robert Lipe + share SCO/Unixware. Nick Duffek and Peter Schauer share + Solaris/x86. Wed Mar 1 22:12:35 2000 Andrew Cagney - + From Wed 23 Feb 2000 Fernando Nasser : * remote-sim.c (gdbsim_close): Call generic_mourn_inferior. - * remote-rdi.c (arm_rdi_close): Ditto. + * remote-rdi.c (arm_rdi_close): Ditto. Wed Mar 1 19:31:32 2000 Andrew Cagney * CONTRIBUTE (configure.in): Note that patches to configure are - not needed. + not needed. 2000-03-01 Mark Kettenis @@ -283,10 +313,10 @@ Wed Mar 1 00:49:06 2000 Andrew Cagney From 2000-02-28 Peter Schauer : Make NEW_PROC_ABI interface functional on Solaris x86. * sol-thread.c (ps_lgetLDT): Rewrite to use new - procfs_find_LDT_entry function from procfs.c, mostly copied from - lin-thread.c. + procfs_find_LDT_entry function from procfs.c, mostly copied from + lin-thread.c. * inferior.h, procfs.c (procfs_get_pid_fd): Removed, no longer - needed. + needed. Wed Mar 1 00:34:55 2000 Andrew Cagney @@ -296,11 +326,11 @@ Wed Mar 1 00:34:55 2000 Andrew Cagney Wed Mar 1 00:06:19 2000 Andrew Cagney From 1999-08-13 J.T. Conklin : - * config/i386/tm-i386.h (FRAME_INIT_SAVED_REGS): Replace - FRAME_FIND_SAVED_REGS. - (i386_frame_init_saved_regs): Replace i386_frame_find_saved_regs. - * i386-tdep.c (i386_frame_init_saved_regs, i386_pop_frame): - Update. + * config/i386/tm-i386.h (FRAME_INIT_SAVED_REGS): Replace + FRAME_FIND_SAVED_REGS. + (i386_frame_init_saved_regs): Replace i386_frame_find_saved_regs. + * i386-tdep.c (i386_frame_init_saved_regs, i386_pop_frame): + Update. Tue Feb 29 23:56:41 2000 Andrew Cagney @@ -322,7 +352,7 @@ Tue Feb 29 18:47:58 2000 Andrew Cagney to the list of targets which return FP values in FP registers. * i386-tdep.c (i386_extract_return_value): Add FIXME recommending - that this function be re-implemented using multi-arch. + that this function be re-implemented using multi-arch. Tue Feb 29 18:40:08 2000 Andrew Cagney @@ -345,24 +375,24 @@ Tue Feb 29 17:33:49 2000 Andrew Cagney From Wed, 23 Feb 2000 Fernando Nasser : * stack.c (backtrace_command_1), infrun.c (normal_stop): Check - that the target's stack was valid. + that the target's stack was valid. Tue Feb 29 15:14:56 2000 Andrew Cagney From 2000-02-22 Stephane Carrez : - * dwarf2read.c (read_address): Read 16-bits addresses. + * dwarf2read.c (read_address): Read 16-bits addresses. 2000-02-28 Scott Bambrough * arm-linux-nat.c (fetch_nw_fpe_*): - Renamed to fetch_nwfpe_* to use the same naming convention + Renamed to fetch_nwfpe_* to use the same naming convention as in the Linux kernel. Modified prototype to get rid of unused parameters. (store_nw_fpe_*): Renamed to store_nwfpe_* to use the same - naming convention as in the Linux kernel. Fixed calls to + naming convention as in the Linux kernel. Fixed calls to fetch_nwfpe_*. (store_fpregs): Fixed calls to store_nwfpe_*. Removed - unused variable. + unused variable. Mon Feb 28 18:24:32 2000 Andrew Cagney @@ -380,7 +410,7 @@ Mon Feb 28 13:34:54 2000 Andrew Cagney Mon Feb 28 10:58:45 2000 Andrew Cagney * MAINTAINERS: Mention mmalloc. Expand Host/Native and - Target/Architecture maintainers descriptions. + Target/Architecture maintainers descriptions. 2000-02-26 Mark Kettenis @@ -435,8 +465,8 @@ Mon Feb 28 10:58:45 2000 Andrew Cagney Sat Feb 26 17:15:16 2000 Andrew Cagney * MAINTAINERS: Chris Faylor is responsible for all MS Windows - systems. Note that Jim Blandy as maintainer for ``tracing - bytecode stuff'' + systems. Note that Jim Blandy as maintainer for ``tracing + bytecode stuff'' 2000-02-25 Fernando Nasser @@ -472,23 +502,23 @@ Wed Feb 23 23:27:48 2000 Andrew Cagney Thu Feb 24 18:42:15 2000 Andrew Cagney * configure.in (CONFIG_INSTALL, CONFIG_UNINSTALL): Set to - $(SUBDIR_*_INSTALL) when so configured. + $(SUBDIR_*_INSTALL) when so configured. * configure: Regenerate. - + * Makefile.in (CONFIG_INSTALL, CONFIG_UNINSTALL): Define using - configure. + configure. (install-only): Add dependency on $(CONFIG_INSTALL). Delete code - installing GDBtk. + installing GDBtk. (uninstall): Add dependency on $(CONFIG_UNINSTALL). (SUBDIR_MI_INSTALL, SUBDIR_MI_UNINSTALL, SUBDIR_GDBTK_UNINSTALL, - SUBDIR_GDBTK_INSTALL): Define. + SUBDIR_GDBTK_INSTALL): Define. (install-gdbtk): New target. Thu Feb 24 18:19:52 2000 Andrew Cagney * configure.in (SUBDIR_MI_CFLAGS): Fix typo, wrong brace. * configure: Regenerate. - + 2000-02-24 Christopher Faylor * configure.tgt: Add arm, mips, sh wince targets. @@ -529,7 +559,7 @@ Wed Feb 23 19:01:45 EST 2000 Nicholas Duffek Wed Feb 23 12:58:46 2000 Andrew Cagney * gdbarch.sh (dis_asm_read_memory): Change LEN to unsigned long. - Match ../include/dis-asm.h change. + Match ../include/dis-asm.h change. * gdbarch.h: Regenerate. * corefile.c (dis_asm_read_memory): Update. @@ -538,38 +568,38 @@ Mon Feb 21 13:57:27 2000 Andrew Cagney * configure.in (CONFIG_INITS): Fix typo, was CONFIG_INIT. (ENABLE_CFLAGS): Move initialization to start of file. (enable-gdbmi): Add new configure option --enable-gdbmi. When - selected and an ${srcdir}/mi directory is present enable MI - interface. + selected and an ${srcdir}/mi directory is present enable MI + interface. * configure: Regenerate. - + * Makefile.in (SUBDIR_MI_OBS, SUBDIR_MI_SRCS, SUBDIR_MI_DEPS, - SUBDIR_MI_INITS, SUBDIR_MI_LDFLAGS, SUBDIR_MI_CFLAGS): New macros. + SUBDIR_MI_INITS, SUBDIR_MI_LDFLAGS, SUBDIR_MI_CFLAGS): New macros. (CONFIG_OBS, CONFIG_SRCS, CONFIG_DEPS, CONFIG_INITS, - CONFIG_LDFLAGS): New macros. Initialized by autoconf via - @CONFIG...@. + CONFIG_LDFLAGS): New macros. Initialized by autoconf via + @CONFIG...@. (INTERNAL_LDFLAGS, CDEPS, LINTFILES, DEPFILES, SOURCES, - INIT_FILES): Use $(CONFIG_...) instead of @CONFIG...@. + INIT_FILES): Use $(CONFIG_...) instead of @CONFIG...@. * mi: New directory. MI interface to GDB. * defs.h (interpreter_p): Declare when UI_OUT. * top.c (gdb_init): When interpreter_p, check that the interpreter - was recognized by one of the linked in interpreters. + was recognized by one of the linked in interpreters. * main.c (interpreter_p): Define. (captured_main): When UI_OUT, check for ``-i '' option. * event-top.c (display_gdb_prompt): When interpreter_p, assume - interpreter displays prompt. + interpreter displays prompt. * breakpoint.c (print_it_typical, watchpoint_check, - print_one_breakpoint, mention): When MI include additional + print_one_breakpoint, mention): When MI include additional target status information. * infrun.c (print_stop_reason, normal_stop): Ditto. 2000-02-22 Jim Blandy * gdbarch.sh: Make the `default' field really default to zero, as - documented. + documented. Bring COERCE_FLOAT_TO_DOUBLE under gdbarch's control. * valops.c (COERCE_FLOAT_TO_DOUBLE): Rework definition to be @@ -582,8 +612,8 @@ Mon Feb 21 13:57:27 2000 Andrew Cagney * gdbarch.sh (coerce_float_to_double): New entry, replacing macro. * gdbarch.c, gdbarch.h: Regenerated. * tm-alpha.h, tm-fr30.h, tm-m32r.h, tm-mips.h, tm-hppa.h, - tm-rs6000.h, tm-sh.h, tm-sparc.h (COERCE_FLOAT_TO_DOUBLE): Change - definitions. + tm-rs6000.h, tm-sh.h, tm-sparc.h (COERCE_FLOAT_TO_DOUBLE): Change + definitions. * mips-tdep.c (mips_coerce_float_to_double): Supply our own custom function here. (mips_gdbarch_init): Install that as our coerce_float_to_double @@ -636,8 +666,8 @@ Mon Feb 21 13:57:27 2000 Andrew Cagney From Philippe De Muyter * event-loop.c (handle_file_event): In case of poll, enable - printing of informational message if an error/exception is - detected on the file descriptor. + printing of informational message if an error/exception is + detected on the file descriptor. 2000-02-21 Jim Kingdon @@ -646,33 +676,33 @@ Mon Feb 21 13:57:27 2000 Andrew Cagney Mon Feb 21 12:50:57 2000 Andrew Cagney * buildsym.c: Include "language.h" and "expression.h" for - longest_local_hex_string_custom. + longest_local_hex_string_custom. Mon Feb 21 11:17:18 2000 Andrew Cagney * gdbarch.sh: Include instead of . * gdbarch.c: Already updated by Wed Feb 9 18:59:16 2000 Andrew - Cagney . + Cagney . Mon Feb 21 11:03:01 2000 Andrew Cagney * MAINTAINERS: Update: IA-64 - Kevin Buettner; ARM - Fernando - nasser, Jim Ingham and Scott Bambrough; GNU/Linux ARM - Scott - Bambrough; event loop - Elena Zannoni; SDS and RDI/APD protocol - - to Fernando Nasser and Jim Ingham; KOD - Fernando Nasser; MI - - Andrew Cagney, Elena Zannoni and Fernando Nasser; Web pages - Jim - Kingdon. + nasser, Jim Ingham and Scott Bambrough; GNU/Linux ARM - Scott + Bambrough; event loop - Elena Zannoni; SDS and RDI/APD protocol - + to Fernando Nasser and Jim Ingham; KOD - Fernando Nasser; MI - + Andrew Cagney, Elena Zannoni and Fernando Nasser; Web pages - Jim + Kingdon. * MAINTAINERS: Add Nick Clifton to write after approval list. - + Mon Feb 21 10:30:39 2000 Andrew Cagney * MAINTAINERS: Add note on multiple maintainers. 2000-02-19 Philippe De Muyter - * cli-out.c (cli_table_header): Type of parameter `alignment' is - `enum ui_align', not `int'. - (cli_field_string, cli_field_skip): Likewise. + * cli-out.c (cli_table_header): Type of parameter `alignment' is + `enum ui_align', not `int'. + (cli_field_string, cli_field_skip): Likewise. 2000-02-18 Jim Blandy @@ -685,8 +715,8 @@ Mon Feb 21 10:30:39 2000 Andrew Cagney 2000-02-18 Elena Zannoni * remote.c (remote_async_detach): Use target_mourn_inferior(), to - make sure that all is cleaned up after we disconnect from the - target. + make sure that all is cleaned up after we disconnect from the + target. (remote_detach): Ditto. 2000-02-17 Fernando Nasser @@ -742,7 +772,7 @@ Mon Feb 21 10:30:39 2000 Andrew Cagney Wed Feb 16 19:00:02 2000 Andrew Cagney From 2000-01-26 Rodney Brown : - * procfs.c: Define MERGEPID if not defined. For osf4.0e. + * procfs.c: Define MERGEPID if not defined. For osf4.0e. 2000-02-15 Jason Molenda (jsm@bugshack.cygnus.com) @@ -756,11 +786,11 @@ Wed Feb 16 19:00:02 2000 Andrew Cagney to correct value for generic dummy frames. When using generic dummy frames, don't attempt to write TOC value or function to call into the call dummy. - (rs6000_push_arguments): Adapt USE_GENERIC_DUMMY_FRAMES + (rs6000_push_arguments): Adapt USE_GENERIC_DUMMY_FRAMES code to also handle the PowerOpen ABI. (ppc_push_return_address): Enable for all ports. * config/powerpc/tm-ppc-aix.h (USE_GENERIC_DUMMY_FRAMES, - PUSH_DUMMY_FRAME, PUSH_RETURN_ADDRESS, GET_SAVED_REGISTER, + PUSH_DUMMY_FRAME, PUSH_RETURN_ADDRESS, GET_SAVED_REGISTER, CALL_DUMMY_BREAKPOINT_OFFSET, CALL_DUMMY_LOCATION, CALL_DUMMY_ADDRESS, CALL_DUMMY_START_OFFSET): Override defaults provided by generic RS6000 definitions so that call dummies @@ -783,7 +813,7 @@ Wed Feb 16 19:00:02 2000 Andrew Cagney 2000-02-15 Jesper Skov Patch applied by Kevin Buettner - + * rs6000-tdep.c (skip_prologue): skip copying of argument registers to local variable registers. @@ -822,9 +852,9 @@ Mon Feb 14 15:20:26 2000 Andrew Cagney * config/i386/nbsd.mt (GDBSERVER_DEPFILES): Add low-nbsd.o * configure.tgt (i[3456]86-*-netbsd*): add gdbserver to - configdirs. + configdirs. * gdbserver/low-nbsd.c: New file. - + * gdbserver/Makefile.in: convert to autoconf. * gdbserver/configure.in: likewise. * gdbserver/configure: generate. @@ -836,9 +866,9 @@ Sun Feb 13 11:21:00 2000 Andrew Cagney Sun Feb 13 10:34:48 2000 Andrew Cagney * MAINTAINERS: Add Eli Zaretskii to djgpp maintiners. Add Kevin - Buettner to powerpc maintainers. Make Kevin Buettner the - GNU/LINUX PPC native maintainer. Add J.T. Conklin, Jim Kingdon - and Jason Molenda to write after aproval list. + Buettner to powerpc maintainers. Make Kevin Buettner the + GNU/LINUX PPC native maintainer. Add J.T. Conklin, Jim Kingdon + and Jason Molenda to write after aproval list. Sun Feb 13 10:18:44 2000 Andrew Cagney @@ -880,28 +910,28 @@ Sat Feb 12 01:08:21 EST 2000 Nicholas Duffek 2000-02-09 Mark Kettenis - * linux-thread.c: Include defs.h before gdb_wait.h. + * linux-thread.c: Include defs.h before gdb_wait.h. Wed Feb 9 18:59:16 2000 Andrew Cagney * Makefile.in (wait_h): Delete macro. Update all dependencies - specifying gdb_wait.h instead. + specifying gdb_wait.h instead. * ser-unix.c, ser-pipe.c, remote.c, remote-udi.c, remote-sds.c, - remote-os9k.c, remote-es.c, remote-rdp.c, remote-vx960.c, - remote-vx.c, remote-st.c, remote-nindy.c, remote-mm.c, - convex-xdep.c, convex-tdep.c, target.c, win32-nat.c, standalone.c, - remote-vxmips.c, remote-vxsparc.c, remote-vx68.c, remote-vx29k.c, - remote-sim.c, remote-rdi.c, remote-mips.c, remote-eb.c, - remote-e7000.c, remote-bug.c, remote-array.c, remote-adapt.c, - ppc-bdm.c, ocd.c, monitor.c, m3-nat.c, linux-thread.c, - infttrace.c, lin-thread.c, infptrace.c, gnu-nat.c, gdbarch.c, - fork-child.c, command.c: Include "gdb_wait.h" instead of - or . + remote-os9k.c, remote-es.c, remote-rdp.c, remote-vx960.c, + remote-vx.c, remote-st.c, remote-nindy.c, remote-mm.c, + convex-xdep.c, convex-tdep.c, target.c, win32-nat.c, standalone.c, + remote-vxmips.c, remote-vxsparc.c, remote-vx68.c, remote-vx29k.c, + remote-sim.c, remote-rdi.c, remote-mips.c, remote-eb.c, + remote-e7000.c, remote-bug.c, remote-array.c, remote-adapt.c, + ppc-bdm.c, ocd.c, monitor.c, m3-nat.c, linux-thread.c, + infttrace.c, lin-thread.c, infptrace.c, gnu-nat.c, gdbarch.c, + fork-child.c, command.c: Include "gdb_wait.h" instead of + or . * nindy-share/nindy.c, nindy-share/Onindy.c: Ditto. * gdb_wait.h: New file. Based on ../include/wait.h. Include - or and then define any missing WIF macros. + or and then define any missing WIF macros. Wed Feb 9 01:14:54 2000 Andrew Cagney @@ -912,15 +942,15 @@ Wed Feb 9 01:14:54 2000 Andrew Cagney 1999-08-23 J.T. Conklin - * top.c (remote_timeout): Change default to 2. Add comment - explaining history of changes to the default value. - * remote.c (_initialize_remote): Remove code that adds set/ - show remotetimeout, as that's also done in top.c + * top.c (remote_timeout): Change default to 2. Add comment + explaining history of changes to the default value. + * remote.c (_initialize_remote): Remove code that adds set/ + show remotetimeout, as that's also done in top.c 1999-10-18 J.T. Conklin - * m32r-stub.c, sparcl-stub.c, sparclet-stub.c (handle_exception): - Return E01 instead of P01 when 'P' command fails. + * m32r-stub.c, sparcl-stub.c, sparclet-stub.c (handle_exception): + Return E01 instead of P01 when 'P' command fails. 2000-02-05 J.T. Conklin @@ -965,13 +995,13 @@ Wed Feb 9 01:14:54 2000 Andrew Cagney 2000-02-04 Elena Zannoni * infrun.c (resume): Make just one call to target_resume(), instead - of four: set up correct parameters in all the cases ahead of time, - and do call at the end. + of four: set up correct parameters in all the cases ahead of time, + and do call at the end. 2000-02-04 Elena Zannoni * config/powerpc/tm-ppc-eabi.h: Define - SOFUN_ADDRESS_MAYBE_MISSING. + SOFUN_ADDRESS_MAYBE_MISSING. 2000-02-04 Fernando Nasser @@ -985,16 +1015,16 @@ Fri Feb 4 22:42:36 2000 Andrew Cagney (links): Link srcdir/gdbtk/library to gdbtcl2. * gdbtcl2: Moved to gdbtk/library. ChangeLog-gdbtk, gdbtk-cmds.c, gdbtk-hooks.c, gdbtk-variable.c, - gdbtk-varobj.c, gdbtk-wrapper.c, gdbtk-wrapper.h, gdbtk.c, - gdbtk.h: Moved to gdbtk/generic. + gdbtk-varobj.c, gdbtk-wrapper.c, gdbtk-wrapper.h, gdbtk.c, + gdbtk.h: Moved to gdbtk/generic. 2000-02-03 Elena Zannoni * printcmd.c (build_address_symbolic): New function. Returns all - the parts that are necessary to print an address in a symbolic - form. + the parts that are necessary to print an address in a symbolic + form. (print_address_symbolic): Split into a printing part and an - information building part, build_address_symbolic(). + information building part, build_address_symbolic(). * defs.h (build_address_symbolic): Export. @@ -1016,39 +1046,39 @@ Fri Feb 4 22:42:36 2000 Andrew Cagney 2000-02-01 Elena Zannoni * remote.c (getpkt_sane): New function. It is the old getpkt(), - which now returns a timeout indication. + which now returns a timeout indication. (getpkt): New function. Wrapper for getpkt_sane(), so that return - value can still be ignored. + value can still be ignored. Tue Feb 1 18:47:31 2000 Andrew Cagney * top.c (print_gdb_version): Print ``UI_OUT'' when configured with - UI_OUT. + UI_OUT. Tue Feb 1 00:17:12 2000 Andrew Cagney * ui-file.c, ui-file.h: Rename gdb-file.h, gdb-file.c. Rename - ``struct gdb_file'' to ``struct ui_file''. Delete typedef - GDB_FILE. - + ``struct gdb_file'' to ``struct ui_file''. Delete typedef + GDB_FILE. + * Makefile.in: Update. * ax-gdb.c, ax-general.c, ax.h, buildsym.c, c-lang.c, c-lang.h, - c-typeprint.c, c-valprint.c, ch-lang.c, ch-lang.h, ch-typeprint.c, - ch-valprint.c, command.c, command.h, convex-tdep.c, corefile.c, - cp-valprint.c, d10v-tdep.c, d30v-tdep.c, defs.h, expprint.c, - expression.h, f-lang.c, f-lang.h, f-typeprint.c, f-valprint.c, - frame.h, gdb-events.sh, gdb-file.c, gdb-file.h, gdbcmd.h, - gdbtypes.h, hppa-tdep.c, jv-lang.c, jv-lang.h, jv-typeprint.c, - jv-valprint.c, language.c, language.h, m2-lang.c, m2-lang.h, - m2-typeprint.c, m2-valprint.c, m3-nat.c, main.c, monitor.c, - printcmd.c, pyr-tdep.c, remote-mips.c, remote-sim.c, remote-udi.c, - remote.c, scm-lang.c, scm-lang.h, scm-valprint.c, ser-e7kpc.c, - ser-go32.c, ser-mac.c, ser-ocd.c, ser-unix.c, ser-unix.h, - serial.c, serial.h, stack.c, symfile.c, symmisc.c, tahoe-tdep.c, - target.c, target.h, top.c, top.h, typeprint.c, typeprint.h, - utils.c, v850ice.c, valprint.c, valprint.h, value.h, - config/pa/tm-hppa.h: Update. + c-typeprint.c, c-valprint.c, ch-lang.c, ch-lang.h, ch-typeprint.c, + ch-valprint.c, command.c, command.h, convex-tdep.c, corefile.c, + cp-valprint.c, d10v-tdep.c, d30v-tdep.c, defs.h, expprint.c, + expression.h, f-lang.c, f-lang.h, f-typeprint.c, f-valprint.c, + frame.h, gdb-events.sh, gdb-file.c, gdb-file.h, gdbcmd.h, + gdbtypes.h, hppa-tdep.c, jv-lang.c, jv-lang.h, jv-typeprint.c, + jv-valprint.c, language.c, language.h, m2-lang.c, m2-lang.h, + m2-typeprint.c, m2-valprint.c, m3-nat.c, main.c, monitor.c, + printcmd.c, pyr-tdep.c, remote-mips.c, remote-sim.c, remote-udi.c, + remote.c, scm-lang.c, scm-lang.h, scm-valprint.c, ser-e7kpc.c, + ser-go32.c, ser-mac.c, ser-ocd.c, ser-unix.c, ser-unix.h, + serial.c, serial.h, stack.c, symfile.c, symmisc.c, tahoe-tdep.c, + target.c, target.h, top.c, top.h, typeprint.c, typeprint.h, + utils.c, v850ice.c, valprint.c, valprint.h, value.h, + config/pa/tm-hppa.h: Update. * cli-out.c, cli-out.h, ui-out.c, ui-out.h, varobj.c: Update. 2000-01-31 Jason Molenda (jsm@bugshack.cygnus.com) @@ -1068,30 +1098,30 @@ Mon Jan 31 17:14:52 2000 Andrew Cagney * top.c (fputs_unfiltered_hook): Moved to tui/tui-file.c. * main.c (captured_main): Only use the legacy tui_file code when - linking in older code such as the TUI. + linking in older code such as the TUI. * gdb-file.h, gdb-file.c: New files. * utils.c, defs.h (struct gdb_file, gdb_file_new, gdb_file_delete, - null_file_isatty, null_file_rewind, null_file_put, - null_file_flush, null_file_write, null_file_fputs, - null_file_delete, gdb_file_data, gdb_flush, gdb_file_isatty, - gdb_file_rewind, gdb_file_put, gdb_file_write, fputs_unfiltered, - set_gdb_file_flush, set_gdb_file_isatty, set_gdb_file_rewind, - set_gdb_file_put, set_gdb_file_write, set_gdb_file_fputs, - set_gdb_file_data, struct accumulated_gdb_file, - do_gdb_file_xstrdup, gdb_file_xstrdup, struct mem_file): - mem_file_new, mem_file_delete, mem_fileopen, mem_file_rewind, - mem_file_put, mem_file_write, struct stdio_file): stdio_file_new, - stdio_file_delete, stdio_file_flush, stdio_file_write, - stdio_file_fputs, stdio_file_isatty, stdio_fileopen, gdb_fopen): - Moved to gdb-file.h and gdb-file.c. + null_file_isatty, null_file_rewind, null_file_put, + null_file_flush, null_file_write, null_file_fputs, + null_file_delete, gdb_file_data, gdb_flush, gdb_file_isatty, + gdb_file_rewind, gdb_file_put, gdb_file_write, fputs_unfiltered, + set_gdb_file_flush, set_gdb_file_isatty, set_gdb_file_rewind, + set_gdb_file_put, set_gdb_file_write, set_gdb_file_fputs, + set_gdb_file_data, struct accumulated_gdb_file, + do_gdb_file_xstrdup, gdb_file_xstrdup, struct mem_file): + mem_file_new, mem_file_delete, mem_fileopen, mem_file_rewind, + mem_file_put, mem_file_write, struct stdio_file): stdio_file_new, + stdio_file_delete, stdio_file_flush, stdio_file_write, + stdio_file_fputs, stdio_file_isatty, stdio_fileopen, gdb_fopen): + Moved to gdb-file.h and gdb-file.c. * utils.c (enum streamtype, struct tui_stream, tui_file_new, - tui_file_delete, tui_fileopen, tui_sfileopen, tui_file_isatty, - tui_file_rewind, tui_file_put, tui_file_fputs, - tui_file_get_strbuf, tui_file_adjust_strbuf, tui_file_flush, + tui_file_delete, tui_fileopen, tui_sfileopen, tui_file_isatty, + tui_file_rewind, tui_file_put, tui_file_fputs, + tui_file_get_strbuf, tui_file_adjust_strbuf, tui_file_flush, fputs_unfiltered_hook): - Moved to tui/tui-file.c and tui/tui-file.h. - + Moved to tui/tui-file.c and tui/tui-file.h. + * Makefile.in (COMMON_OBS): Add gdb-file.o, tui-file.o. (tui-file.o, gdb-file.o): Add dependencies. (corefile.o, main.o, utils.o, simmisc.o): Update dependencies. @@ -1120,18 +1150,18 @@ Mon Jan 31 17:14:52 2000 Andrew Cagney 2000-01-27 Jim Blandy * symtab.c (decode_line_1): Don't let commas that are within - quotes or parenthesis terminate the line spec. Don't use pp when - removing the final double quote of a double-quoted string. Don't - forget to skip the opening double quote. I have no clue whether - this change is correct; probably we've just moved this function - from one buggy place to another buggy place, and never came within - an outhouse whiff of correctness. + quotes or parenthesis terminate the line spec. Don't use pp when + removing the final double quote of a double-quoted string. Don't + forget to skip the opening double quote. I have no clue whether + this change is correct; probably we've just moved this function + from one buggy place to another buggy place, and never came within + an outhouse whiff of correctness. (find_toplevel_char): New function. 2000-01-27 Fernando Nasser * arm-tdep.c (arm_push_arguments): Set the thumb mode bit when - passing the pointer to a thumb function as an argument. + passing the pointer to a thumb function as an argument. 2000-01-27 Fernando Nasser @@ -1203,22 +1233,22 @@ Mon Jan 31 17:14:52 2000 Andrew Cagney * proc-why.c: New file. Add include of proc-utils.h. * procfs.c: Add includes of gdbthread.h, sys/wait.h, signal.h, - ctype.h, proc-utils.h. + ctype.h, proc-utils.h. (find_procinfo_or_die): Add braces to avoid ambiguous else clause. (open_procinfo_files): Conditionalize local variable tmp, to avoid - compiler warnings. + compiler warnings. (proc_iterate_over_mappings): Conditionalize local vars mapfd and - pathname. + pathname. (procfs_wait): Adjust format in some printf_filetered calls to - avoid compiler warnings. + avoid compiler warnings. (make_signal_thread_runnable): Ifdef 0. The calls to this function - are also ifdef'd 0 . + are also ifdef'd 0 . (procfs_resume): Add parentheses around '&&' operation. (procfs_set_exec_trap): Remove unused variable. (info_proc_cmd): Add braces to avoid ambiguous else clause. * Makefile.in (procfs.o, proc-api.o, proc-events.o, proc-flags.o, - proc-why.o): Update dependencies. + proc-why.o): Update dependencies. * config/sparc/sun4sol2.mh (NATDEPFILES): Change proc_*.o files to proc-*.o. @@ -1232,30 +1262,30 @@ Mon Jan 31 17:14:52 2000 Andrew Cagney 2000-01-17 Elena Zannoni * stack.c (print_frame_info_base): Break up into the frame info - (location) printing part and the rest (source line printing). + (location) printing part and the rest (source line printing). (print_frame): New function. Take care of printing the location - information. + information. Update copyright. * infrun.c (normal_stop): Use enum values rather than integers for the source_flag to be passed to show_and_print_stack_frame(). - Update copyright. - + Update copyright. + * frame.h (print_what): New enum for 'source' argument to - print_frame_info_base(). Use this instead of obscure numbers. + print_frame_info_base(). Use this instead of obscure numbers. Update copyright. - + Sun Jan 16 17:58:00 2000 David Taylor * event-top.c (stdin_event_handler): call quit_command rather than - exit -- run cleanups, give target code a chance to say goodbye to - the target. Fixes bug where the inferior processes were left - around on Solaris (and probably elsewhere) by the testsuite. + exit -- run cleanups, give target code a chance to say goodbye to + the target. Fixes bug where the inferior processes were left + around on Solaris (and probably elsewhere) by the testsuite. 2000-01-14 Mark Salter * v850-tdep.c (v850_target_architecture_hook): Setup correct - machine id for disassembly. + machine id for disassembly. 2000-01-13 Jim Blandy @@ -1296,7 +1326,7 @@ Thu Jan 13 23:34:17 EST 2000 Nicholas Duffek 2000-01-12 Elena Zannoni * thread.c (do_captured_thread_select): New function. Switch - current thread, safely from within catch_errors(). + current thread, safely from within catch_errors(). (gdb_thread_select): New function. Switch threads safely. (thread_command): Use gdb_thread_select(). Include ui-out.h. @@ -1358,7 +1388,7 @@ Thu Jan 13 23:34:17 EST 2000 Nicholas Duffek (proc_flags): combine flags that UnixWare splits into two locations. (proc_modify_flag): add support for PR_KLC (kill on last close). (proc_[un]set_kill_on_last_close): new functions. - + 2000-01-07 Elena Zannoni * infrun.c (normal_stop): Print out thread id when we stop. @@ -1390,14 +1420,14 @@ Thu Jan 13 23:34:17 EST 2000 Nicholas Duffek 2000-01-06 Elena Zannoni * breakpoint.c (until_break_command): Add an argument for the - continuation, the beginning of the cleanups set up by this - command. + continuation, the beginning of the cleanups set up by this + command. (until_break_command_continuation): Do cleanups until the one - passed in as argument instead of doing all of them. + passed in as argument instead of doing all of them. * infcmd.c (finish_command_continuation): Expect a new argument, - which indicates up to where to do cleanups. Update calls to - do_exec_cleanups to use this marker, instead of ALL_CLEANUPS. + which indicates up to where to do cleanups. Update calls to + do_exec_cleanups to use this marker, instead of ALL_CLEANUPS. (finish_command): Add another argument for the continuation: the starting cleanup for this command. diff --git a/gdb/defs.h b/gdb/defs.h index 9248c761de3..ede001b4a57 100644 --- a/gdb/defs.h +++ b/gdb/defs.h @@ -122,6 +122,7 @@ extern int core_addr_greaterthan (CORE_ADDR lhs, CORE_ADDR rhs); #define STRCMP(a,b) (*(a) == *(b) ? strcmp ((a), (b)) : (int)*(a) - (int)*(b)) #define STREQ(a,b) (*(a) == *(b) ? !strcmp ((a), (b)) : 0) +#define STREQ_IW(a,b) (*(a) == *(b) ? !strcmp_iw ((a), (b)) : 0) #define STREQN(a,b,c) (*(a) == *(b) ? !strncmp ((a), (b), (c)) : 0) /* The character GNU C++ uses to build identifiers that must be unique from @@ -516,11 +517,11 @@ extern void print_address_symbolic (CORE_ADDR, struct ui_file *, int, char *); extern int build_address_symbolic (CORE_ADDR addr, - int do_demangle, - char **name, - int *offset, - char **filename, - int *line, + int do_demangle, + char **name, + int *offset, + char **filename, + int *line, int *unmapped); extern void print_address_numeric (CORE_ADDR, int, struct ui_file *); @@ -619,8 +620,8 @@ extern struct command_line *read_command_lines (char *, int); extern void free_command_lines (struct command_line **); -/* To continue the execution commands when running gdb asynchronously. - A continuation structure contains a pointer to a function to be called +/* To continue the execution commands when running gdb asynchronously. + A continuation structure contains a pointer to a function to be called to finish the command, once the target has stopped. Such mechanism is used bt the finish and until commands, and in the remote protocol when opening an extended-remote connection. */ @@ -762,7 +763,7 @@ enum val_prettyprint extern int longest_to_int (LONGEST); -/* Assorted functions we can declare, now that const and volatile are +/* Assorted functions we can declare, now that const and volatile are defined. */ extern char *savestring (const char *, int); @@ -1160,9 +1161,9 @@ extern int event_loop_p; extern void (*init_ui_hook) (char *argv0); extern void (*command_loop_hook) (void); extern void (*show_load_progress) (const char *section, - unsigned long section_sent, - unsigned long section_size, - unsigned long total_sent, + unsigned long section_sent, + unsigned long section_size, + unsigned long total_sent, unsigned long total_size); extern void (*print_frame_info_listing_hook) (struct symtab * s, int line, int stopline, diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 20166722d3f..85e8743472d 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -410,7 +410,7 @@ lookup_member_type (type, domain) return (mtype); } -/* Allocate a stub method whose return type is TYPE. +/* Allocate a stub method whose return type is TYPE. This apparently happens for speed of symbol reading, since parsing out the arguments to the method is cpu-intensive, the way we are doing it. So, we will fill in arguments later. @@ -534,8 +534,8 @@ get_discrete_bounds (type, lowp, highp) case TYPE_CODE_CHAR: *lowp = 0; /* This round-about calculation is to avoid shifting by - TYPE_LENGTH (type) * TARGET_CHAR_BIT, which will not work - if TYPE_LENGTH (type) == sizeof (LONGEST). */ + TYPE_LENGTH (type) * TARGET_CHAR_BIT, which will not work + if TYPE_LENGTH (type) == sizeof (LONGEST). */ *highp = 1 << (TYPE_LENGTH (type) * TARGET_CHAR_BIT - 1); *highp = (*highp - 1) | *highp; return 0; @@ -679,7 +679,7 @@ init_simd_type (char *name, } -/* Smash TYPE to be a type of members of DOMAIN with type TO_TYPE. +/* Smash TYPE to be a type of members of DOMAIN with type TO_TYPE. A MEMBER is a wierd thing -- it amounts to a typed offset into a struct, e.g. "an int at offset 8". A MEMBER TYPE doesn't include the offset (that's the value of the MEMBER itself), but does @@ -750,7 +750,7 @@ type_name_no_tag (type) return TYPE_NAME (type); } -/* Lookup a primitive type named NAME. +/* Lookup a primitive type named NAME. Return zero if NAME is not a primitive type. */ struct type * @@ -939,7 +939,7 @@ lookup_template_type (name, type, block) return (SYMBOL_TYPE (sym)); } -/* Given a type TYPE, lookup the type of the component of type named NAME. +/* Given a type TYPE, lookup the type of the component of type named NAME. TYPE can be either a struct or union, or a pointer or reference to a struct or union. If it is a pointer or reference, its target type is automatically used. @@ -994,7 +994,7 @@ lookup_struct_elt_type (type, name, noerr) { char *t_field_name = TYPE_FIELD_NAME (type, i); - if (t_field_name && STREQ (t_field_name, name)) + if (t_field_name && STREQ_IW (t_field_name, name)) { return TYPE_FIELD_TYPE (type, i); } @@ -1045,7 +1045,7 @@ fill_in_vptr_fieldno (type) int i; /* We must start at zero in case the first (and only) baseclass is - virtual (and hence we cannot share the table pointer). */ + virtual (and hence we cannot share the table pointer). */ for (i = 0; i < TYPE_N_BASECLASSES (type); i++) { fill_in_vptr_fieldno (TYPE_BASECLASS (type, i)); @@ -1100,7 +1100,7 @@ get_destructor_fn_field (t, method_indexp, field_indexp) be a mistake, though--we might load in more symbols which contain a full definition for the type. - This used to be coded as a macro, but I don't think it is called + This used to be coded as a macro, but I don't think it is called often enough to merit such treatment. */ struct complaint stub_noname_complaint = @@ -1168,9 +1168,9 @@ check_typedef (type) { char *name = type_name_no_tag (type); /* FIXME: shouldn't we separately check the TYPE_NAME and the - TYPE_TAG_NAME, and look in STRUCT_NAMESPACE and/or VAR_NAMESPACE - as appropriate? (this code was written before TYPE_NAME and - TYPE_TAG_NAME were separate). */ + TYPE_TAG_NAME, and look in STRUCT_NAMESPACE and/or VAR_NAMESPACE + as appropriate? (this code was written before TYPE_NAME and + TYPE_TAG_NAME were separate). */ struct symbol *sym; if (name == NULL) { @@ -1378,7 +1378,7 @@ cfront_mangle_name (type, i, j) f = TYPE_FN_FIELDLIST1 (type, i); /* moved from below */ - /* kludge to support cfront methods - gdb expects to find "F" for + /* kludge to support cfront methods - gdb expects to find "F" for ARM_mangled names, so when we mangle, we have to add it here */ if (ARM_DEMANGLING) { @@ -1693,7 +1693,7 @@ chill_varying_type (type) return 1; } -/* Check whether BASE is an ancestor or base class or DCLASS +/* Check whether BASE is an ancestor or base class or DCLASS Return 1 if so, and 0 if not. Note: callers may want to check for identity of the types before calling this function -- identical types are considered to satisfy @@ -1797,7 +1797,7 @@ static struct vbase *current_vbase_list = NULL; items. The vbasetype pointer of each item in the list points to the type information for a virtual base of the argument DCLASS. - Helper function for virtual_base_list(). + Helper function for virtual_base_list(). Note: the list goes backward, right-to-left. virtual_base_list() copies the items out in reverse order. */ @@ -2136,8 +2136,8 @@ rank_function (parms, nparms, args, nargs) LENGTH_MATCH (bv) = (nargs != nparms) ? LENGTH_MISMATCH_BADNESS : 0; /* Now rank all the parameters of the candidate function */ - for (i = 1; i <= min_len; i++) - bv->rank[i] = rank_one_type (parms[i - 1], args[i - 1]); + for (i = 1; i < min_len; i++) + bv->rank[i] = rank_one_type (parms[i], args[i]); /* If more arguments than parameters, add dummy entries */ for (i = min_len + 1; i <= nargs; i++) @@ -2178,7 +2178,13 @@ rank_one_type (parm, arg) if (parm == arg) return 0; -#if 0 + /* See through references, since we can almost make non-references references*/ + if (TYPE_CODE (arg) == TYPE_CODE_REF) + return rank_one_type(TYPE_TARGET_TYPE(arg),parm) + REFERENCE_CONVERSION_BADNESS; + if (TYPE_CODE (parm) == TYPE_CODE_REF) + return rank_one_type(arg,TYPE_TARGET_TYPE(parm)) + REFERENCE_CONVERSION_BADNESS; + +#ifdef DEBUG_OLOAD /* Debugging only */ printf ("------ Arg is %s [%d], parm is %s [%d]\n", TYPE_NAME (arg), TYPE_CODE (arg), TYPE_NAME (parm), TYPE_CODE (parm)); @@ -2233,7 +2239,7 @@ rank_one_type (parm, arg) if (TYPE_LENGTH (arg) == TYPE_LENGTH (parm)) { /* Deal with signed, unsigned, and plain chars and - signed and unsigned ints */ + signed and unsigned ints */ if (TYPE_NOSIGN (parm)) { /* This case only for character types */ @@ -2246,16 +2252,16 @@ rank_one_type (parm, arg) { if (TYPE_UNSIGNED (arg)) { - if (!strcmp (TYPE_NAME (parm), TYPE_NAME (arg))) + if (!strcmp_iw (TYPE_NAME (parm), TYPE_NAME (arg))) return 0; /* unsigned int -> unsigned int, or unsigned long -> unsigned long */ - else if (!strcmp (TYPE_NAME (arg), "int") && !strcmp (TYPE_NAME (parm), "long")) + else if (!strcmp_iw (TYPE_NAME (arg), "int") && !strcmp_iw (TYPE_NAME (parm), "long")) return INTEGER_PROMOTION_BADNESS; /* unsigned int -> unsigned long */ else return INTEGER_COERCION_BADNESS; /* unsigned long -> unsigned int */ } else { - if (!strcmp (TYPE_NAME (arg), "long") && !strcmp (TYPE_NAME (parm), "int")) + if (!strcmp_iw (TYPE_NAME (arg), "long") && !strcmp_iw (TYPE_NAME (parm), "int")) return INTEGER_COERCION_BADNESS; /* signed long -> unsigned int */ else return INTEGER_CONVERSION_BADNESS; /* signed int/long -> unsigned int/long */ @@ -2263,9 +2269,9 @@ rank_one_type (parm, arg) } else if (!TYPE_NOSIGN (arg) && !TYPE_UNSIGNED (arg)) { - if (!strcmp (TYPE_NAME (parm), TYPE_NAME (arg))) + if (!strcmp_iw (TYPE_NAME (parm), TYPE_NAME (arg))) return 0; - else if (!strcmp (TYPE_NAME (arg), "int") && !strcmp (TYPE_NAME (parm), "long")) + else if (!strcmp_iw (TYPE_NAME (arg), "int") && !strcmp_iw (TYPE_NAME (parm), "long")) return INTEGER_PROMOTION_BADNESS; else return INTEGER_COERCION_BADNESS; @@ -2827,8 +2833,8 @@ recursive_dump_type (type, spaces) default: /* We have to pick one of the union types to be able print and test - the value. Pick cplus_struct_type, even though we know it isn't - any particular one. */ + the value. Pick cplus_struct_type, even though we know it isn't + any particular one. */ printfi_filtered (spaces, "type_specific "); gdb_print_host_address (TYPE_CPLUS_SPECIFIC (type), gdb_stdout); if (TYPE_CPLUS_SPECIFIC (type) != NULL) diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 3c124f06097..eefd8dda7a1 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -165,7 +165,7 @@ enum type_code #define TYPE_FLAG_TARGET_STUB (1 << 3) -/* Static type. If this is set, the corresponding type had +/* Static type. If this is set, the corresponding type had * a static modifier. * Note: This may be unnecessary, since static data members * are indicated by other means (bitpos == -1) @@ -368,7 +368,7 @@ struct type *fields; /* For types with virtual functions (TYPE_CODE_STRUCT), VPTR_BASETYPE - is the base class which defined the virtual function table pointer. + is the base class which defined the virtual function table pointer. For types that are pointer to member types (TYPE_CODE_MEMBER), VPTR_BASETYPE is the type that this pointer is a member of. @@ -439,7 +439,7 @@ struct cplus_struct_type /* The "declared_type" field contains a code saying how the user really declared this type, e.g., "class s", "union s", "struct s". - The 3 above things come out from the C++ compiler looking like classes, + The 3 above things come out from the C++ compiler looking like classes, but we keep track of the real declaration so we can give the correct information on "ptype". (Note: TEMPLATE may not belong in this list...) */ @@ -521,7 +521,7 @@ struct cplus_struct_type /* The function type for the method. (This comment used to say "The return value of the method", - but that's wrong. The function type + but that's wrong. The function type is expected here, i.e. something with TYPE_CODE_FUNC, and *not* the return-value type). */ @@ -575,7 +575,7 @@ struct cplus_struct_type } *fn_fieldlists; - /* If this "struct type" describes a template, then it + /* If this "struct type" describes a template, then it * has arguments. "template_args" points to an array of * template arg descriptors, of length "ntemplate_args". * The only real information in each of these template arg descriptors @@ -608,7 +608,7 @@ struct cplus_struct_type * * Fields in structure pointed to: * ->HAS_VTABLE : 0 => no virtual table, 1 => vtable present - * + * * ->PRIMARY_BASE points to the first non-virtual base class that has * a virtual table. * @@ -820,9 +820,9 @@ allocate_cplus_struct_type PARAMS ((struct type *)); #define TYPE_LOCALTYPE_LINE(thistype) (TYPE_CPLUS_SPECIFIC(thistype)->localtype_ptr->line) #define TYPE_IS_OPAQUE(thistype) (((TYPE_CODE (thistype) == TYPE_CODE_STRUCT) || \ - (TYPE_CODE (thistype) == TYPE_CODE_UNION)) && \ - (TYPE_NFIELDS (thistype) == 0) && \ - (TYPE_CPLUS_SPECIFIC (thistype) && (TYPE_NFN_FIELDS (thistype) == 0))) + (TYPE_CODE (thistype) == TYPE_CODE_UNION)) && \ + (TYPE_NFIELDS (thistype) == 0) && \ + (TYPE_CPLUS_SPECIFIC (thistype) && (TYPE_NFN_FIELDS (thistype) == 0))) @@ -1081,9 +1081,9 @@ count_virtual_fns PARAMS ((struct type *)); * typeinfo pointer, and dup base info pointer */ #define HP_ACC_VFUNC_START 4 -/* (Negative) Offset where virtual base offset entries begin +/* (Negative) Offset where virtual base offset entries begin * in the virtual table. Skips over metavtable pointer and - * the self-offset entry. + * the self-offset entry. * NOTE: NEGATE THIS BEFORE USING! The virtual base offsets * appear before the address point of the vtable (the slot * pointed to by the object's vtable pointer), i.e. at lower @@ -1129,9 +1129,10 @@ count_virtual_fns PARAMS ((struct type *)); #define POINTER_CONVERSION_BADNESS 2 /* Badness of conversion of pointer to void pointer */ #define VOID_PTR_CONVERSION_BADNESS 2 -/* Badness of convering derived to base class */ +/* Badness of converting derived to base class */ #define BASE_CONVERSION_BADNESS 2 - +/* Badness of converting from non-reference to reference*/ +#define REFERENCE_CONVERSION_BADNESS 2 /* Non-standard conversions allowed by the debugger */ /* Converting a pointer to an int is usually OK */ #define NS_POINTER_CONVERSION_BADNESS 10 diff --git a/gdb/valops.c b/gdb/valops.c index 5dc6b1e7fe7..e5233d7d849 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -240,8 +240,8 @@ value_cast (type, arg2) && TYPE_NAME (type) != 0) { /* Look in the type of the source to see if it contains the - type of the target as a superclass. If so, we'll need to - offset the object in addition to changing its type. */ + type of the target as a superclass. If so, we'll need to + offset the object in addition to changing its type. */ value_ptr v = search_struct_field (type_name_no_tag (type), arg2, 0, type2, 1); if (v) @@ -297,8 +297,8 @@ value_cast (type, arg2) value_ptr v; /* Look in the type of the source to see if it contains the - type of the target as a superclass. If so, we'll need to - offset the pointer rather than just change its type. */ + type of the target as a superclass. If so, we'll need to + offset the pointer rather than just change its type. */ if (TYPE_NAME (t1) != NULL) { v = search_struct_field (type_name_no_tag (t1), @@ -312,9 +312,9 @@ value_cast (type, arg2) } /* Look in the type of the target to see if it contains the - type of the source as a superclass. If so, we'll need to - offset the pointer rather than just change its type. - FIXME: This fails silently with virtual inheritance. */ + type of the source as a superclass. If so, we'll need to + offset the pointer rather than just change its type. + FIXME: This fails silently with virtual inheritance. */ if (TYPE_NAME (t2) != NULL) { v = search_struct_field (type_name_no_tag (t2), @@ -411,14 +411,14 @@ value_zero (type, lv) return val; } -/* Return a value with type TYPE located at ADDR. +/* Return a value with type TYPE located at ADDR. Call value_at only if the data needs to be fetched immediately; if we can be 'lazy' and defer the fetch, perhaps indefinately, call value_at_lazy instead. value_at_lazy simply records the address of - the data and sets the lazy-evaluation-required flag. The lazy flag - is tested in the VALUE_CONTENTS macro, which is used if and when - the contents are actually required. + the data and sets the lazy-evaluation-required flag. The lazy flag + is tested in the VALUE_CONTENTS macro, which is used if and when + the contents are actually required. Note: value_at does *NOT* handle embedded offsets; perform such adjustments before or after calling it. */ @@ -491,9 +491,9 @@ value_at_lazy (type, addr, sect) return val; } -/* Called only from the VALUE_CONTENTS and VALUE_CONTENTS_ALL macros, - if the current data for a variable needs to be loaded into - VALUE_CONTENTS(VAL). Fetches the data from the user's process, and +/* Called only from the VALUE_CONTENTS and VALUE_CONTENTS_ALL macros, + if the current data for a variable needs to be loaded into + VALUE_CONTENTS(VAL). Fetches the data from the user's process, and clears the lazy flag to indicate that the data in the buffer is valid. If the value is zero-length, we avoid calling read_memory, which would @@ -688,10 +688,10 @@ value_assign (toval, fromval) #endif } /* Assigning to the stack pointer, frame pointer, and other - (architecture and calling convention specific) registers may - cause the frame cache to be out of date. We just do this - on all assignments to registers for simplicity; I doubt the slowdown - matters. */ + (architecture and calling convention specific) registers may + cause the frame cache to be out of date. We just do this + on all assignments to registers for simplicity; I doubt the slowdown + matters. */ reinit_frame_cache (); break; @@ -929,8 +929,8 @@ value_addr (arg1) if (TYPE_CODE (type) == TYPE_CODE_REF) { /* Copy the value, but change the type from (T&) to (T*). - We keep the same location information, which is efficient, - and allows &(&X) to get the location containing the reference. */ + We keep the same location information, which is efficient, + and allows &(&X) to get the location containing the reference. */ arg2 = value_copy (arg1); VALUE_TYPE (arg2) = lookup_pointer_type (TYPE_TARGET_TYPE (type)); return arg2; @@ -1131,7 +1131,7 @@ default_push_arguments (nargs, args, sp, struct_return, struct_addr) #ifndef COERCE_FLOAT_TO_DOUBLE #define COERCE_FLOAT_TO_DOUBLE(formal, actual) \ (default_coerce_float_to_double ((formal), (actual))) -#endif +#endif /* A default function for COERCE_FLOAT_TO_DOUBLE: do the coercion only @@ -1199,16 +1199,16 @@ value_arg_coerce (arg, param_type, is_prototyped) type = builtin_type_int; } /* Currently all target ABIs require at least the width of an integer - type for an argument. We may have to conditionalize the following - type coercion for future targets. */ + type for an argument. We may have to conditionalize the following + type coercion for future targets. */ if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin_type_int)) type = builtin_type_int; break; case TYPE_CODE_FLT: /* FIXME: We should always convert floats to doubles in the - non-prototyped case. As many debugging formats include - no information about prototyping, we have to live with - COERCE_FLOAT_TO_DOUBLE for now. */ + non-prototyped case. As many debugging formats include + no information about prototyping, we have to live with + COERCE_FLOAT_TO_DOUBLE for now. */ if (!is_prototyped && COERCE_FLOAT_TO_DOUBLE (param_type, arg_type)) { if (TYPE_LENGTH (type) < TYPE_LENGTH (builtin_type_double)) @@ -1244,7 +1244,7 @@ value_arg_coerce (arg, param_type, is_prototyped) return value_cast (type, arg); } -/* Determine a function's address and its return type from its value. +/* Determine a function's address and its return type from its value. Calls error() if the function is not valid for calling. */ static CORE_ADDR @@ -1287,7 +1287,7 @@ find_function_addr (function, retval_type) else if (code == TYPE_CODE_INT) { /* Handle the case of functions lacking debugging info. - Their values are characters since their addresses are char */ + Their values are characters since their addresses are char */ if (TYPE_LENGTH (ftype) == 1) funaddr = value_as_pointer (value_addr (function)); else @@ -1335,7 +1335,7 @@ hand_function_call (function, nargs, args) /* CALL_DUMMY is an array of words (REGISTER_SIZE), but each word is in host byte order. Before calling FIX_CALL_DUMMY, we byteswap it and remove any extra bytes which might exist because ULONGEST is - bigger than REGISTER_SIZE. + bigger than REGISTER_SIZE. NOTE: This is pretty wierd, as the call dummy is actually a sequence of instructions. But CISC machines will have @@ -1471,8 +1471,8 @@ hand_function_call (function, nargs, args) for (i = nargs - 1; i >= 0; i--) { /* If we're off the end of the known arguments, do the standard - promotions. FIXME: if we had a prototype, this should only - be allowed if ... were present. */ + promotions. FIXME: if we had a prototype, this should only + be allowed if ... were present. */ if (i >= TYPE_NFIELDS (ftype)) args[i] = value_arg_coerce (args[i], NULL, 0); @@ -1484,25 +1484,25 @@ hand_function_call (function, nargs, args) args[i] = value_arg_coerce (args[i], param_type, is_prototyped); } - /*elz: this code is to handle the case in which the function to be called - has a pointer to function as parameter and the corresponding actual argument - is the address of a function and not a pointer to function variable. - In aCC compiled code, the calls through pointers to functions (in the body - of the function called by hand) are made via $$dyncall_external which - requires some registers setting, this is taken care of if we call - via a function pointer variable, but not via a function address. - In cc this is not a problem. */ + /*elz: this code is to handle the case in which the function to be called + has a pointer to function as parameter and the corresponding actual argument + is the address of a function and not a pointer to function variable. + In aCC compiled code, the calls through pointers to functions (in the body + of the function called by hand) are made via $$dyncall_external which + requires some registers setting, this is taken care of if we call + via a function pointer variable, but not via a function address. + In cc this is not a problem. */ if (using_gcc == 0) if (param_type) /* if this parameter is a pointer to function */ if (TYPE_CODE (param_type) == TYPE_CODE_PTR) if (TYPE_CODE (param_type->target_type) == TYPE_CODE_FUNC) - /* elz: FIXME here should go the test about the compiler used - to compile the target. We want to issue the error - message only if the compiler used was HP's aCC. - If we used HP's cc, then there is no problem and no need - to return at this point */ + /* elz: FIXME here should go the test about the compiler used + to compile the target. We want to issue the error + message only if the compiler used was HP's aCC. + If we used HP's cc, then there is no problem and no need + to return at this point */ if (using_gcc == 0) /* && compiler == aCC */ /* go see if the actual parameter is a variable of type pointer to function or just a function */ @@ -1591,8 +1591,8 @@ You must use a pointer to function type variable. Command ignored.", arg_name); int len = TYPE_LENGTH (value_type); #ifdef STACK_ALIGN /* MVS 11/22/96: I think at least some of this stack_align code is - really broken. Better to let PUSH_ARGUMENTS adjust the stack in - a target-defined manner. */ + really broken. Better to let PUSH_ARGUMENTS adjust the stack in + a target-defined manner. */ len = STACK_ALIGN (len); #endif if (INNER_THAN (1, 2)) @@ -1611,7 +1611,7 @@ You must use a pointer to function type variable. Command ignored.", arg_name); /* elz: on HPPA no need for this extra alignment, maybe it is needed on other architectures. This is because all the alignment is taken care - of in the above code (ifdef REG_STRUCT_HAS_ADDR) and in + of in the above code (ifdef REG_STRUCT_HAS_ADDR) and in hppa_push_arguments */ #ifndef NO_EXTRA_ALIGNMENT_NEEDED @@ -1642,7 +1642,7 @@ You must use a pointer to function type variable. Command ignored.", arg_name); function. Since this doesn't actually involve executing a JSR/BSR instruction, the return address must be set up by hand, either by pushing onto the stack or copying into a return-address register - as appropriate. Formerly this has been done in PUSH_ARGUMENTS, + as appropriate. Formerly this has been done in PUSH_ARGUMENTS, but that's overloading its functionality a bit, so I'm making it explicit to do it here. */ sp = PUSH_RETURN_ADDRESS (real_pc, sp); @@ -1652,7 +1652,7 @@ You must use a pointer to function type variable. Command ignored.", arg_name); if (!INNER_THAN (1, 2)) { /* If stack grows up, we must leave a hole at the bottom, note - that sp already has been advanced for the arguments! */ + that sp already has been advanced for the arguments! */ if (CALL_DUMMY_STACK_ADJUST_P) sp += CALL_DUMMY_STACK_ADJUST; sp = STACK_ALIGN (sp); @@ -1677,7 +1677,7 @@ You must use a pointer to function type variable. Command ignored.", arg_name); it doesn't cost us anything but space and if the function is pcc it will ignore this value, we will make that assumption. - Also note that on some machines (like the sparc) pcc uses a + Also note that on some machines (like the sparc) pcc uses a convention like gcc's. */ if (struct_return) @@ -1733,12 +1733,12 @@ You must use a pointer to function type variable. Command ignored.", arg_name); /* We stopped inside the FUNCTION because of a random signal. Further execution of the FUNCTION is not allowed. */ - if (unwind_on_signal_p) + if (unwind_on_signal_p) { /* The user wants the context restored. */ - /* We must get back to the frame we were before the dummy call. */ - POP_FRAME; + /* We must get back to the frame we were before the dummy call. */ + POP_FRAME; /* FIXME: Insert a bunch of wrap_here; name can be very long if it's a C++ name with arguments and stuff. */ @@ -2032,8 +2032,8 @@ typecmp (staticp, t1, t2) /* Array to pointer is a `trivial conversion' according to the ARM. */ /* We should be doing much hairier argument matching (see section 13.2 - of the ARM), but as a quick kludge, just check for the same type - code. */ + of the ARM), but as a quick kludge, just check for the same type + code. */ if (TYPE_CODE (t1[i]) != TYPE_CODE (VALUE_TYPE (t2[i]))) return i + 1; } @@ -2068,7 +2068,7 @@ search_struct_field (name, arg1, offset, type, looking_for_baseclass) { char *t_field_name = TYPE_FIELD_NAME (type, i); - if (t_field_name && STREQ (t_field_name, name)) + if (t_field_name && STREQ_IW (t_field_name, name)) { value_ptr v; if (TYPE_FIELD_STATIC (type, i)) @@ -2083,7 +2083,7 @@ search_struct_field (name, arg1, offset, type, looking_for_baseclass) if (t_field_name && (t_field_name[0] == '\0' || (TYPE_CODE (type) == TYPE_CODE_UNION - && STREQ (t_field_name, "else")))) + && STREQ_IW (t_field_name, "else")))) { struct type *field_type = TYPE_FIELD_TYPE (type, i); if (TYPE_CODE (field_type) == TYPE_CODE_UNION @@ -2124,11 +2124,11 @@ search_struct_field (name, arg1, offset, type, looking_for_baseclass) value_ptr v; struct type *basetype = check_typedef (TYPE_BASECLASS (type, i)); /* If we are looking for baseclasses, this is what we get when we - hit them. But it could happen that the base part's member name - is not yet filled in. */ + hit them. But it could happen that the base part's member name + is not yet filled in. */ int found_baseclass = (looking_for_baseclass && TYPE_BASECLASS_NAME (type, i) != NULL - && STREQ (name, TYPE_BASECLASS_NAME (type, i))); + && STREQ_IW (name, TYPE_BASECLASS_NAME (type, i))); if (BASETYPE_VIA_VIRTUAL (type, i)) { @@ -2270,7 +2270,7 @@ find_rt_vbase_offset (type, basetype, valaddr, offset, boffset_p, skip_p) * virtual base entries. Offset is negative -- virtual base entries * appear _before_ the address point of the virtual table. */ - /* pai: FIXME -- 32x64 problem, if word = 8 bytes, change multiplier + /* pai: FIXME -- 32x64 problem, if word = 8 bytes, change multiplier & use long type */ /* epstein : FIXME -- added param for overlay section. May not be correct */ @@ -2314,7 +2314,7 @@ search_struct_method (name, arg1p, args, offset, static_memfuncp, type) else if (cplus_demangle_opname (t_field_name, dem_opname, 0)) t_field_name = dem_opname; } - if (t_field_name && STREQ (t_field_name, name)) + if (t_field_name && !strcmp_iw (t_field_name, name)) { int j = TYPE_FN_FIELDLIST_LENGTH (type, i) - 1; struct fn_field *f = TYPE_FN_FIELDLIST1 (type, i); @@ -2351,7 +2351,7 @@ search_struct_method (name, arg1p, args, offset, static_memfuncp, type) if (TYPE_HAS_VTABLE (type)) { /* HP aCC compiled type, search for virtual base offset - according to HP/Taligent runtime spec. */ + according to HP/Taligent runtime spec. */ int skip; find_rt_vbase_offset (type, TYPE_BASECLASS (type, i), VALUE_CONTENTS_ALL (*arg1p), @@ -2366,8 +2366,8 @@ search_struct_method (name, arg1p, args, offset, static_memfuncp, type) char *base_valaddr; /* The virtual base class pointer might have been clobbered by the - user program. Make sure that it still points to a valid memory - location. */ + user program. Make sure that it still points to a valid memory + location. */ if (offset < 0 || offset >= TYPE_LENGTH (type)) { @@ -2467,13 +2467,13 @@ value_struct_elt (argp, args, name, static_memfuncp, err) /* if there are no arguments ...do this... */ /* Try as a field first, because if we succeed, there - is less work to be done. */ + is less work to be done. */ v = search_struct_field (name, *argp, 0, t, 0); if (v) return v; /* C++: If it was not found as a data field, then try to - return it as a pointer to a method. */ + return it as a pointer to a method. */ if (destructor_name_p (name, t)) error ("Cannot get value of destructor"); @@ -2525,8 +2525,8 @@ value_struct_elt (argp, args, name, static_memfuncp, err) else if (v == 0) { /* See if user tried to invoke data as function. If so, - hand it back. If it's not callable (i.e., a pointer to function), - gdb should give an error. */ + hand it back. If it's not callable (i.e., a pointer to function), + gdb should give an error. */ v = search_struct_field (name, *argp, 0, t, 0); } @@ -2570,7 +2570,7 @@ find_method_list (argp, method, offset, static_memfuncp, type, num_fns, basetype { /* pai: FIXME What about operators and type conversions? */ char *fn_field_name = TYPE_FN_FIELDLIST_NAME (type, i); - if (fn_field_name && STREQ (fn_field_name, method)) + if (fn_field_name && STREQ_IW (fn_field_name, method)) { *num_fns = TYPE_FN_FIELDLIST_LENGTH (type, i); *basetype = type; @@ -2736,13 +2736,16 @@ find_overload_match (arg_types, nargs, name, method, lax, obj, fsym, valp, symp, char *obj_type_name = NULL; char *func_name = NULL; + int i,j,len,len2; + struct type *domain; + struct fn_field *f; /* Get the list of overloaded methods or functions */ if (method) { obj_type_name = TYPE_NAME (VALUE_TYPE (obj)); /* Hack: evaluate_subexp_standard often passes in a pointer - value rather than the object itself, so try again */ + value rather than the object itself, so try again */ if ((!obj_type_name || !*obj_type_name) && (TYPE_CODE (VALUE_TYPE (obj)) == TYPE_CODE_PTR)) obj_type_name = TYPE_NAME (TYPE_TARGET_TYPE (VALUE_TYPE (obj))); @@ -2756,6 +2759,26 @@ find_overload_match (arg_types, nargs, name, method, lax, obj, fsym, valp, symp, obj_type_name, (obj_type_name && *obj_type_name) ? "::" : "", name); + domain=TYPE_DOMAIN_TYPE(fns_ptr[0].type); + len = TYPE_NFN_FIELDS (domain); + /*This stuff is for STABS, which won't give us the info we need directly in the types. + * We have to use the method stub conversion to get it. + * Be aware that this is by no means perfect, and if you use + * STABS, please move to DWARF-2, or something like it, because + * trying to improve overloading using STABS is really a waste + * of time. + */ + for (i = 0; i < len; i++) + { + f = TYPE_FN_FIELDLIST1 (domain, i); + len2 = TYPE_FN_FIELDLIST_LENGTH (domain, i); + + for (j = 0; j < len2; j++) + { + if (TYPE_FN_FIELD_STUB (f, j)) + check_stub_method (domain, i, j); + } + } } else { @@ -2763,12 +2786,12 @@ find_overload_match (arg_types, nargs, name, method, lax, obj, fsym, valp, symp, func_name = cplus_demangle (SYMBOL_NAME (fsym), DMGL_NO_OPTS); /* If the name is NULL this must be a C-style function. - Just return the same symbol. */ + Just return the same symbol. */ if (!func_name) - { + { *symp = fsym; - return 0; - } + return 0; + } oload_syms = make_symbol_overload_list (fsym); while (oload_syms[++i]) @@ -2782,14 +2805,28 @@ find_overload_match (arg_types, nargs, name, method, lax, obj, fsym, valp, symp, /* Consider each candidate in turn */ for (ix = 0; ix < num_fns; ix++) { - /* Number of parameters for current candidate */ - nparms = method ? TYPE_NFIELDS (fns_ptr[ix].type) - : TYPE_NFIELDS (SYMBOL_TYPE (oload_syms[ix])); + if (method) + { + /* For static member functions, we won't have a this pointer, but nothing + else seems to handle them right now, so we just pretend ourselves */ + nparms=0; + + if (TYPE_FN_FIELD_ARGS(fns_ptr,ix)) + { + while (TYPE_CODE(TYPE_FN_FIELD_ARGS(fns_ptr,ix)[nparms]) != TYPE_CODE_VOID) + nparms++; + } + } + else + { + /* If it's not a method, this is the proper place */ + nparms=TYPE_NFIELDS(SYMBOL_TYPE(oload_syms[ix])); + } /* Prepare array of parameter types */ parm_types = (struct type **) xmalloc (nparms * (sizeof (struct type *))); for (jj = 0; jj < nparms; jj++) - parm_types[jj] = method ? TYPE_FIELD_TYPE (fns_ptr[ix].type, jj) + parm_types[jj] = method ? (TYPE_FN_FIELD_ARGS(fns_ptr,ix)[jj]) : TYPE_FIELD_TYPE (SYMBOL_TYPE (oload_syms[ix]), jj); /* Compare parameter types to supplied argument types */ @@ -2830,12 +2867,16 @@ find_overload_match (arg_types, nargs, name, method, lax, obj, fsym, valp, symp, printf ("Overloaded method instance %s, # of parms %d\n", fns_ptr[ix].physname, nparms); else printf ("Overloaded function instance %s # of parms %d\n", SYMBOL_DEMANGLED_NAME (oload_syms[ix]), nparms); - for (jj = 0; jj <= nargs; jj++) + for (jj = 0; jj < nargs; jj++) printf ("...Badness @ %d : %d\n", jj, bv->rank[jj]); printf ("Overload resolution champion is %d, ambiguous? %d\n", oload_champ, oload_ambiguous); #endif } /* end loop over all candidates */ +/* Seems to be a better idea to just pick one if they have the exact same goodness. + * This is because there is no way to differentiate based on return type, which we need + * to in cases like overloads of .begin() */ +#if 0 if (oload_ambiguous) { if (method) @@ -2847,6 +2888,7 @@ find_overload_match (arg_types, nargs, name, method, lax, obj, fsym, valp, symp, error ("Cannot resolve overloaded function %s to unique instance; disambiguate by specifying function signature", func_name); } +#endif /* Check how bad the best match is */ for (ix = 1; ix <= nargs; ix++) @@ -2943,7 +2985,7 @@ check_field_in (type, name) for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--) { char *t_field_name = TYPE_FIELD_NAME (type, i); - if (t_field_name && STREQ (t_field_name, name)) + if (t_field_name && STREQ_IW (t_field_name, name)) return 1; } @@ -2960,7 +3002,7 @@ check_field_in (type, name) for (i = TYPE_NFN_FIELDS (type) - 1; i >= 0; --i) { - if (STREQ (TYPE_FN_FIELDLIST_NAME (type, i), name)) + if (STREQ_IW (TYPE_FN_FIELDLIST_NAME (type, i), name)) return 1; } @@ -3161,7 +3203,7 @@ value_struct_elt_for_reference (domain, offset, curtype, name, intype) * USING_ENC is the flag that distinguishes the two cases. * If it is 1, then the offset is for the enclosing object, * otherwise for the embedded object. - * + * * This currently works only for RTTI information generated * by the HP ANSI C++ compiler (aCC). g++ today (1997-06-10) * does not appear to support RTTI. This function returns a @@ -3481,8 +3523,8 @@ value_slice (array, lowbound, length) } } /* We should set the address, bitssize, and bitspos, so the clice - can be used on the LHS, but that may require extensions to - value_assign. For now, just leave as a non_lval. FIXME. */ + can be used on the LHS, but that may require extensions to + value_assign. For now, just leave as a non_lval. FIXME. */ } else { @@ -3522,10 +3564,10 @@ varying_to_slice (varray) return value_slice (value_primitive_field (varray, 0, 1, vtype), 0, length); } -/* Create a value for a FORTRAN complex number. Currently most of - the time values are coerced to COMPLEX*16 (i.e. a complex number - composed of 2 doubles. This really should be a smarter routine - that figures out precision inteligently as opposed to assuming +/* Create a value for a FORTRAN complex number. Currently most of + the time values are coerced to COMPLEX*16 (i.e. a complex number + composed of 2 doubles. This really should be a smarter routine + that figures out precision inteligently as opposed to assuming doubles. FIXME: fmb */ value_ptr -- 2.30.2