* typeck2.c (build_m_component_ref): Robustify.

From-SVN: r39731
This commit is contained in:
Mark Mitchell 2001-02-16 01:24:14 +00:00 committed by Mark Mitchell
parent e2c094827c
commit f1a3f197e1
3 changed files with 15 additions and 10 deletions

View File

@ -1,3 +1,7 @@
2001-02-15 Mark Mitchell <mark@codesourcery.com>
* typeck2.c (build_m_component_ref): Robustify.
2001-02-15 Alexandre Oliva <aoliva@redhat.com> 2001-02-15 Alexandre Oliva <aoliva@redhat.com>
* friend.c (do_friend): Don't take the nested [template] class * friend.c (do_friend): Don't take the nested [template] class

View File

@ -1093,6 +1093,10 @@ build_m_component_ref (datum, component)
return build_min_nt (DOTSTAR_EXPR, datum, component); return build_min_nt (DOTSTAR_EXPR, datum, component);
datum = decay_conversion (datum); datum = decay_conversion (datum);
if (datum == error_mark_node || component == error_mark_node)
return error_mark_node;
objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum)); objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
if (TYPE_PTRMEMFUNC_P (TREE_TYPE (component))) if (TYPE_PTRMEMFUNC_P (TREE_TYPE (component)))
@ -1100,18 +1104,15 @@ build_m_component_ref (datum, component)
type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (component))); type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (component)));
field_type = type; field_type = type;
} }
else else if (TYPE_PTRMEM_P (TREE_TYPE (component)))
{ {
type = TREE_TYPE (TREE_TYPE (component)); type = TREE_TYPE (TREE_TYPE (component));
field_type = TREE_TYPE (type); field_type = TREE_TYPE (type);
} }
else
if (datum == error_mark_node || component == error_mark_node)
return error_mark_node;
if (TREE_CODE (type) != OFFSET_TYPE && TREE_CODE (type) != METHOD_TYPE)
{ {
cp_error ("`%E' cannot be used as a member pointer, since it is of type `%T'", component, type); cp_error ("`%E' cannot be used as a member pointer, since it is of type `%T'",
component, TREE_TYPE (component));
return error_mark_node; return error_mark_node;
} }

View File

@ -1,7 +1,7 @@
// Build don't link: // Build don't link:
// crash test - XFAIL *-*-* // crash test
// Copyright (c) 2000 Free Software Foundation. // Copyright (c) 2000, 2001 Free Software Foundation.
// Distilled from a bug report by Eric Ford <eford@princeton.edu> // Distilled from a bug report by Eric Ford <eford@princeton.edu>
extern double *y; extern double *y;
@ -12,5 +12,5 @@ void SetInitCond(void)
{ {
int i; int i;
for(i = 2; i < nPoints; ++i) for(i = 2; i < nPoints; ++i)
y[i] = y[nPoints] .* (x[i]-x[1]) / (x[nPoints]-x[1]); // ERROR y[i] = y[nPoints] .* (x[i]-x[1]) / (x[nPoints]-x[1]); // ERROR - .*
} }