Change streq to return bool
I wanted to use streq with std::unique in another (upcoming) patch in this seres, so I changed it to return bool. To my surprise, this lead to regressions. The cause turned out to be that streq was used as an htab callback -- by casting it to the correct function type. This sort of cast is invalid, so this patch adds a variant which is directly suitable for use by htab. (Note that I did not add an overload, as I could not get that to work with template deduction in the other patch.) ChangeLog 2018-04-05 Tom Tromey <tom@tromey.com> * completer.c (completion_tracker::completion_tracker): Remove cast. (completion_tracker::discard_completions): Likewise. * breakpoint.c (ambiguous_names_p): Remove cast. * ada-lang.c (_initialize_ada_language): Remove cast. * utils.h (streq): Update. (streq_hash): Add new declaration. * utils.c (streq): Return bool. (streq_hash): New function.
This commit is contained in:
parent
9be2c17a90
commit
459a2e4ccf
6 changed files with 37 additions and 12 deletions
|
@ -1,3 +1,15 @@
|
||||||
|
2018-04-05 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* completer.c (completion_tracker::completion_tracker): Remove
|
||||||
|
cast.
|
||||||
|
(completion_tracker::discard_completions): Likewise.
|
||||||
|
* breakpoint.c (ambiguous_names_p): Remove cast.
|
||||||
|
* ada-lang.c (_initialize_ada_language): Remove cast.
|
||||||
|
* utils.h (streq): Update.
|
||||||
|
(streq_hash): Add new declaration.
|
||||||
|
* utils.c (streq): Return bool.
|
||||||
|
(streq_hash): New function.
|
||||||
|
|
||||||
2018-04-05 Tom Tromey <tom@tromey.com>
|
2018-04-05 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* linespec.c (event_location_to_sals) <case ADDRESS_LOCATION>:
|
* linespec.c (event_location_to_sals) <case ADDRESS_LOCATION>:
|
||||||
|
|
|
@ -14722,9 +14722,8 @@ When enabled, the debugger will stop using the DW_AT_GNAT_descriptive_type\n\
|
||||||
DWARF attribute."),
|
DWARF attribute."),
|
||||||
NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
|
NULL, NULL, &maint_set_ada_cmdlist, &maint_show_ada_cmdlist);
|
||||||
|
|
||||||
decoded_names_store = htab_create_alloc
|
decoded_names_store = htab_create_alloc (256, htab_hash_string, streq_hash,
|
||||||
(256, htab_hash_string, (int (*)(const void *, const void *)) streq,
|
NULL, xcalloc, xfree);
|
||||||
NULL, xcalloc, xfree);
|
|
||||||
|
|
||||||
/* The ada-lang observers. */
|
/* The ada-lang observers. */
|
||||||
gdb::observers::new_objfile.attach (ada_new_objfile_observer);
|
gdb::observers::new_objfile.attach (ada_new_objfile_observer);
|
||||||
|
|
|
@ -13384,10 +13384,8 @@ static int
|
||||||
ambiguous_names_p (struct bp_location *loc)
|
ambiguous_names_p (struct bp_location *loc)
|
||||||
{
|
{
|
||||||
struct bp_location *l;
|
struct bp_location *l;
|
||||||
htab_t htab = htab_create_alloc (13, htab_hash_string,
|
htab_t htab = htab_create_alloc (13, htab_hash_string, streq_hash, NULL,
|
||||||
(int (*) (const void *,
|
xcalloc, xfree);
|
||||||
const void *)) streq,
|
|
||||||
NULL, xcalloc, xfree);
|
|
||||||
|
|
||||||
for (l = loc; l != NULL; l = l->next)
|
for (l = loc; l != NULL; l = l->next)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1469,7 +1469,7 @@ int max_completions = 200;
|
||||||
completion_tracker::completion_tracker ()
|
completion_tracker::completion_tracker ()
|
||||||
{
|
{
|
||||||
m_entries_hash = htab_create_alloc (INITIAL_COMPLETION_HTAB_SIZE,
|
m_entries_hash = htab_create_alloc (INITIAL_COMPLETION_HTAB_SIZE,
|
||||||
htab_hash_string, (htab_eq) streq,
|
htab_hash_string, streq_hash,
|
||||||
NULL, xcalloc, xfree);
|
NULL, xcalloc, xfree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1487,7 +1487,7 @@ completion_tracker::discard_completions ()
|
||||||
|
|
||||||
htab_delete (m_entries_hash);
|
htab_delete (m_entries_hash);
|
||||||
m_entries_hash = htab_create_alloc (INITIAL_COMPLETION_HTAB_SIZE,
|
m_entries_hash = htab_create_alloc (INITIAL_COMPLETION_HTAB_SIZE,
|
||||||
htab_hash_string, (htab_eq) streq,
|
htab_hash_string, streq_hash,
|
||||||
NULL, xcalloc, xfree);
|
NULL, xcalloc, xfree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
gdb/utils.c
13
gdb/utils.c
|
@ -2601,13 +2601,22 @@ strcmp_iw_ordered (const char *string1, const char *string2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A simple comparison function with opposite semantics to strcmp. */
|
/* See utils.h. */
|
||||||
|
|
||||||
int
|
bool
|
||||||
streq (const char *lhs, const char *rhs)
|
streq (const char *lhs, const char *rhs)
|
||||||
{
|
{
|
||||||
return !strcmp (lhs, rhs);
|
return !strcmp (lhs, rhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* See utils.h. */
|
||||||
|
|
||||||
|
int
|
||||||
|
streq_hash (const void *lhs, const void *rhs)
|
||||||
|
{
|
||||||
|
return streq ((const char *) lhs, (const char *) rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -89,7 +89,14 @@ extern int strcmp_iw (const char *string1, const char *string2);
|
||||||
|
|
||||||
extern int strcmp_iw_ordered (const char *, const char *);
|
extern int strcmp_iw_ordered (const char *, const char *);
|
||||||
|
|
||||||
extern int streq (const char *, const char *);
|
/* Return true if the strings are equal. */
|
||||||
|
|
||||||
|
extern bool streq (const char *, const char *);
|
||||||
|
|
||||||
|
/* A variant of streq that is suitable for use as an htab
|
||||||
|
callback. */
|
||||||
|
|
||||||
|
extern int streq_hash (const void *, const void *);
|
||||||
|
|
||||||
extern int subset_compare (const char *, const char *);
|
extern int subset_compare (const char *, const char *);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue