* ch-lang.c (evaluate_subexp_chill case MULTI_SUBSCRIPT): Error

if "function" is pointer to non-function.
Fixes PR chill/9095.
This commit is contained in:
Per Bothner 1996-03-05 07:48:20 +00:00
parent 4b29551786
commit 02e6e53d84
2 changed files with 13 additions and 9 deletions

View File

@ -1,3 +1,8 @@
Mon Mar 4 23:44:16 1996 Per Bothner <bothner@kalessin.cygnus.com>
* ch-lang.c (evaluate_subexp_chill case MULTI_SUBSCRIPT): Error
if "function" is pointer to non-function.
Mon Mar 4 17:47:03 1996 Stan Shebs <shebs@andros.cygnus.com>
* top.c (print_gdb_version): Update copyright year.

View File

@ -423,6 +423,10 @@ evaluate_subexp_chill (expect_type, exp, pos, noside)
switch (TYPE_CODE (type))
{
case TYPE_CODE_PTR:
type = check_typedef (TYPE_TARGET_TYPE (type));
if (!type || TYPE_CODE (type) || TYPE_CODE_FUNC)
error ("reference value used as function");
/* ... fall through ... */
case TYPE_CODE_FUNC:
/* It's a function call. */
if (noside == EVAL_AVOID_SIDE_EFFECTS)
@ -433,16 +437,11 @@ evaluate_subexp_chill (expect_type, exp, pos, noside)
argvec = (value_ptr *) alloca (sizeof (value_ptr) * (nargs + 2));
argvec[0] = arg1;
tem = 1;
if (type && TYPE_CODE (type) == TYPE_CODE_PTR)
type = check_typedef (TYPE_TARGET_TYPE (type));
if (type && TYPE_CODE (type) == TYPE_CODE_FUNC)
for (; tem <= nargs && tem <= TYPE_NFIELDS (type); tem++)
{
for (; tem <= nargs && tem <= TYPE_NFIELDS (type); tem++)
{
argvec[tem]
= evaluate_subexp_chill (TYPE_FIELD_TYPE (type, tem-1),
exp, pos, noside);
}
argvec[tem]
= evaluate_subexp_chill (TYPE_FIELD_TYPE (type, tem-1),
exp, pos, noside);
}
for (; tem <= nargs; tem++)
argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);