call.c (build_object_call): Don't look at DECL_NAME for a type.
* call.c (build_object_call): Don't look at DECL_NAME for a type. (pt.c): Or CP_TYPE_QUALS for an ERROR_MARK. (typeck.c): Or TYPE_MAIN_VARIANT for a type. From-SVN: r27068
This commit is contained in:
parent
06315a9a89
commit
f0bcd16877
4 changed files with 19 additions and 6 deletions
|
@ -1,5 +1,9 @@
|
|||
1999-05-20 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* call.c (build_object_call): Don't look at DECL_NAME for a type.
|
||||
(pt.c): Or CP_TYPE_QUALS for an ERROR_MARK.
|
||||
(typeck.c): Or TYPE_MAIN_VARIANT for a type.
|
||||
|
||||
* pt.c (for_each_template_parm): Rework to match documentation.
|
||||
Don't be fooled by a COMPONENT_REF with no TREE_TYPE.
|
||||
|
||||
|
|
|
@ -2336,7 +2336,11 @@ build_object_call (obj, args)
|
|||
return error_mark_node;
|
||||
}
|
||||
|
||||
if (DECL_NAME (cand->fn) == ansi_opname [CALL_EXPR])
|
||||
/* Since cand->fn will be a type, not a function, for a conversion
|
||||
function, we must be careful not to unconditionally look at
|
||||
DECL_NAME here. */
|
||||
if (TREE_CODE (cand->fn) == FUNCTION_DECL
|
||||
&& DECL_NAME (cand->fn) == ansi_opname [CALL_EXPR])
|
||||
return build_over_call (cand, mem_args, LOOKUP_NORMAL);
|
||||
|
||||
obj = convert_like (TREE_VEC_ELT (cand->convs, 0), obj);
|
||||
|
|
|
@ -6541,6 +6541,8 @@ tsubst (t, args, complain, in_decl)
|
|||
}
|
||||
|
||||
f = make_typename_type (ctx, f);
|
||||
if (f == error_mark_node)
|
||||
return f;
|
||||
return cp_build_qualified_type (f,
|
||||
CP_TYPE_QUALS (f)
|
||||
| CP_TYPE_QUALS (t));
|
||||
|
|
|
@ -5077,17 +5077,20 @@ build_conditional_expr (ifexp, op1, op2)
|
|||
ifexp = op1 = save_expr (ifexp);
|
||||
}
|
||||
|
||||
type1 = TREE_TYPE (op1);
|
||||
code1 = TREE_CODE (type1);
|
||||
type2 = TREE_TYPE (op2);
|
||||
code2 = TREE_CODE (type2);
|
||||
if (op1 == error_mark_node || op2 == error_mark_node
|
||||
|| type1 == error_mark_node || type2 == error_mark_node)
|
||||
return error_mark_node;
|
||||
|
||||
ifexp = cp_convert (boolean_type_node, ifexp);
|
||||
|
||||
if (TREE_CODE (ifexp) == ERROR_MARK)
|
||||
return error_mark_node;
|
||||
|
||||
/* C++: REFERENCE_TYPES must be dereferenced. */
|
||||
type1 = TREE_TYPE (op1);
|
||||
code1 = TREE_CODE (type1);
|
||||
type2 = TREE_TYPE (op2);
|
||||
code2 = TREE_CODE (type2);
|
||||
|
||||
if (code1 == REFERENCE_TYPE)
|
||||
{
|
||||
op1 = convert_from_reference (op1);
|
||||
|
|
Loading…
Add table
Reference in a new issue