/* Helper routines for C++ support in GDB.
- Copyright (C) 2003-2015 Free Software Foundation, Inc.
+ Copyright (C) 2003-2016 Free Software Foundation, Inc.
Contributed by David Carlton and by Kealia, Inc.
':' may be in the args of a template spec. This isn't intended to be
a complete test, just cheap and documentary. */
if (strchr (name, '<') == NULL && strchr (name, '(') == NULL)
- gdb_assert (strchr (name, ':') == NULL);
+ gdb_assert (strstr (name, "::") == NULL);
sym = lookup_symbol_in_static_block (name, block, domain);
if (sym.symbol != NULL)
lang_this = lookup_language_this (language_def (language_cplus), block);
if (lang_this.symbol == NULL)
- return (struct block_symbol) {NULL, NULL};
+ return null_block_symbol;
type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (lang_this.symbol)));
/* If TYPE_NAME is NULL, abandon trying to find this symbol.
This can happen for lambda functions compiled with clang++,
which outputs no name for the container class. */
if (TYPE_NAME (type) == NULL)
- return (struct block_symbol) {NULL, NULL};
+ return null_block_symbol;
/* Look for symbol NAME in this class. */
sym = cp_lookup_nested_symbol (type, name, block, domain);
struct block_symbol klass_sym;
struct type *klass_type;
- /* The test here uses <= instead of < because Fortran also uses this,
- and the module.exp testcase will pass "modmany::" for NAME here. */
- gdb_assert (prefix_len + 2 <= strlen (name));
- gdb_assert (name[prefix_len + 1] == ':');
+ /* Check for malformed input. */
+ if (prefix_len + 2 > strlen (name) || name[prefix_len + 1] != ':')
+ return null_block_symbol;
/* Find the name of the class and the name of the method, variable, etc. */
if (klass_sym.symbol == NULL)
{
do_cleanups (cleanup);
- return (struct block_symbol) {NULL, NULL};
+ return null_block_symbol;
}
klass_type = SYMBOL_TYPE (klass_sym.symbol);
}
}
- return (struct block_symbol) {NULL, NULL};
+ return null_block_symbol;
}
/* Helper function that searches an array of symbols for one named NAME. */
block = BLOCK_SUPERBLOCK (block);
}
- return (struct block_symbol) {NULL, NULL};
+ return null_block_symbol;
}
/* Searches for NAME in the current namespace, and by applying
return sym;
}
- return (struct block_symbol) {NULL, NULL};
+ return null_block_symbol;
}
/* Look up a symbol named NESTED_NAME that is nested inside the C++
"cp_lookup_nested_symbol (...) = NULL"
" (func/method)\n");
}
- return (struct block_symbol) {NULL, NULL};
+ return null_block_symbol;
default:
internal_error (__FILE__, __LINE__,