{ $$ = build_parse_node (INDIRECT_REF, $2); }
| '&' expr_or_declarator %prec UNARY
{ $$ = build_parse_node (ADDR_EXPR, $2); }
+ | '(' expr_or_declarator ')'
+ { $$ = $2; }
;
direct_notype_declarator:
| notype_qualified_id
{ push_nested_class (TREE_TYPE (OP0 ($$)), 3);
TREE_COMPLEXITY ($$) = current_class_depth; }
+ | '(' expr_or_declarator ')'
+ { $$ = finish_decl_parsing ($2); }
;
primary:
{ $$ = build_parse_node (CALL_EXPR, $$, empty_parms (), $3); }
| direct_notype_declarator '(' error ')' type_quals %prec '.'
{ $$ = build_parse_node (CALL_EXPR, $$, NULL_TREE, NULL_TREE); }
- | '(' expr_or_declarator ')'
- { $$ = finish_decl_parsing ($2); }
| '(' complex_notype_declarator ')'
{ $$ = $2; }
| direct_notype_declarator '[' nonmomentary_expr ']'
arg = TREE_TYPE (arg);
}
#endif
- if (TREE_CODE (arg) == FUNCTION_TYPE
- || TREE_CODE (arg) == METHOD_TYPE)
- arg = build_pointer_type (arg);
+ if (TREE_CODE (parm) != REFERENCE_TYPE)
+ {
+ if (TREE_CODE (arg) == FUNCTION_TYPE
+ || TREE_CODE (arg) == METHOD_TYPE)
+ arg = build_pointer_type (arg);
+ else if (TREE_CODE (arg) == ARRAY_TYPE)
+ arg = build_pointer_type (TREE_TYPE (arg));
+ else
+ arg = TYPE_MAIN_VARIANT (arg);
+ }
switch (unify (tparms, targs, ntparms, parm, arg, nsubsts))
{
TREE_PUBLIC (result) = 1;
DECL_EXTERNAL (result) = (DECL_INLINE (result)
&& ! flag_implement_inlines);
+ TREE_STATIC (result) = ! DECL_EXTERNAL (result);
}
else if (storage == ridpointers[(int) RID_EXTERN])
;
TREE_PUBLIC (tmp) = 1;
DECL_EXTERNAL (tmp) = (DECL_INLINE (tmp)
&& ! flag_implement_inlines);
+ TREE_STATIC (tmp) = ! DECL_EXTERNAL (tmp);
}
}