/* Library interface to C++ front end.
- Copyright (C) 2014-2018 Free Software Foundation, Inc.
+ Copyright (C) 2014-2021 Free Software Foundation, Inc.
This file is part of GCC. As it interacts with GDB through libcc1,
they all become a single program as regards the GNU GPL's requirements.
/* If TARGET_BVAL is anticipated but has not yet been
declared, pretend it is not there at all. */
|| (TREE_CODE (target_bval) == FUNCTION_DECL
- && DECL_ANTICIPATED (target_bval)
- && !DECL_HIDDEN_FRIEND_P (target_bval)))
+ && DECL_IS_UNDECLARED_BUILTIN (target_bval)))
binding->value = decl;
else if (TREE_CODE (target_bval) == TYPE_DECL
&& DECL_ARTIFICIAL (target_bval)
&& DECL_EXTERNAL (target_decl) && DECL_EXTERNAL (target_bval)
&& !DECL_CLASS_SCOPE_P (target_decl))
{
- duplicate_decls (decl, binding->value, /*newdecl_is_friend=*/false);
+ duplicate_decls (decl, binding->value);
ok = false;
}
else if (TREE_CODE (decl) == NAMESPACE_DECL
usable. */
tree this_val = lookup_name (get_identifier ("this"));
current_class_ref = !this_val ? NULL_TREE
- : cp_build_indirect_ref (this_val, RO_NULL, tf_warning_or_error);
+ : cp_build_indirect_ref (input_location, this_val, RO_NULL,
+ tf_warning_or_error);
current_class_ptr = this_val;
}
}
}
static inline tree
-safe_pushtag (tree name, tree type, tag_scope scope)
+safe_pushtag (tree name, tree type)
{
void (*save_oracle) (enum cp_oracle_request, tree identifier);
save_oracle = cp_binding_oracle;
cp_binding_oracle = NULL;
- tree ret = pushtag (name, type, scope);
+ tree ret = pushtag (name, type);
cp_binding_oracle = save_oracle;
}
static inline tree
-safe_pushdecl_maybe_friend (tree decl, bool is_friend)
+safe_pushdecl (tree decl)
{
void (*save_oracle) (enum cp_oracle_request, tree identifier);
save_oracle = cp_binding_oracle;
cp_binding_oracle = NULL;
- tree ret = pushdecl (decl, is_friend);
+ tree ret = pushdecl (decl);
cp_binding_oracle = save_oracle;
gcc_assert (TREE_CODE (used_ns) == NAMESPACE_DECL);
- finish_namespace_using_directive (used_ns, NULL_TREE);
+ finish_using_directive (used_ns, NULL_TREE);
return 1;
}
{
/* We can't be at local scope. */
gcc_assert (at_namespace_scope_p ());
- finish_namespace_using_decl (target, tcontext, identifier);
+ finish_nonmember_using_decl (tcontext, identifier);
}
return 1;
if (template_decl_p)
{
if (RECORD_OR_UNION_CODE_P (code))
- safe_pushtag (identifier, TREE_TYPE (decl), ts_current);
+ safe_pushtag (identifier, TREE_TYPE (decl));
else
decl = safe_push_template_decl (decl);
finish_member_declaration (tdecl);
}
else if (RECORD_OR_UNION_CODE_P (code))
- safe_pushtag (identifier, TREE_TYPE (decl), ts_current);
+ safe_pushtag (identifier, TREE_TYPE (decl));
else if (class_member_p)
finish_member_declaration (decl);
else
- decl = safe_pushdecl_maybe_friend (decl, false);
+ decl = safe_pushdecl (decl);
if ((ctor || dtor)
/* Don't crash after a duplicate declaration of a cdtor. */
reversal. */
tree save = DECL_CHAIN (decl);
DECL_CHAIN (decl) = NULL_TREE;
- clone_function_decl (decl, /*update_methods=*/true);
+ clone_cdtor (decl, /*update_methods=*/true);
gcc_assert (TYPE_FIELDS (current_class_type) == decl);
TYPE_FIELDS (current_class_type)
= nreverse (TYPE_FIELDS (current_class_type));
make_friend_class (type, TREE_TYPE (decl), true);
else
{
- DECL_FRIEND_P (decl) = true;
+ DECL_UNIQUE_FRIEND_P (decl) = true;
add_friend (type, decl, true);
}
}
tree res = identifier;
if (!scope)
- res = lookup_name_real (res, 0, 0, true, 0, 0);
+ res = lookup_name (res, LOOK_where::BLOCK_NAMESPACE);
else if (!TYPE_P (scope) || !dependent_scope_p (scope))
{
- res = lookup_qualified_name (scope, res, false, true);
+ res = lookup_qualified_name (scope, res, LOOK_want::NORMAL, true);
/* We've already resolved the name in the scope, so skip the
build_qualified_name call below. */
scope = NULL;
break;
case THROW_EXPR:
- result = build_throw (op0);
+ result = build_throw (input_location, op0);
break;
case TYPEID_EXPR:
case SIZEOF_EXPR:
case ALIGNOF_EXPR:
- result = cxx_sizeof_or_alignof_expr (op0, opcode, true);
+ result = cxx_sizeof_or_alignof_expr (input_location,
+ op0, opcode, true, true);
break;
case DELETE_EXPR:
case VEC_DELETE_EXPR:
- result = delete_sanity (op0, NULL_TREE, opcode == VEC_DELETE_EXPR,
+ result = delete_sanity (input_location, op0, NULL_TREE,
+ opcode == VEC_DELETE_EXPR,
global_scope_p, tf_error);
break;
default:
/* Use the C++11 alignof semantics. */
- result = cxx_sizeof_or_alignof_type (type, opcode, true, true);
+ result = cxx_sizeof_or_alignof_type (input_location, type,
+ opcode, true, true);
}
if (template_dependent_p)
gcc_expr operand2)
{
plugin_context *ctx = static_cast<plugin_context *> (self);
- tree (*build_cast)(tree type, tree expr, tsubst_flags_t complain) = NULL;
+ tree (*build_cast)(location_t loc, tree type, tree expr,
+ tsubst_flags_t complain) = NULL;
tree type = convert_in (operand1);
tree expr = convert_in (operand2);
if (!template_dependent_p)
processing_template_decl--;
- tree val = build_cast (type, expr, tf_error);
+ tree val = build_cast (input_location, type, expr, tf_error);
if (template_dependent_p)
processing_template_decl--;
case CHARS2 ('c', 'v'): // conversion with parenthesized expression list
gcc_assert (TYPE_P (type));
args = args_to_tree_list (values_in);
- result = build_functional_cast (type, args, tf_error);
+ result = build_functional_cast (input_location, type, args, tf_error);
break;
case CHARS2 ('t', 'l'): // conversion with braced expression list
if (!template_dependent_p)
processing_template_decl--;
- tree result = build_new (&placement, type, nelts, &initializer,
- global_scope_p, tf_error);
+ tree result = build_new (input_location, &placement, type, nelts,
+ &initializer, global_scope_p, tf_error);
if (template_dependent_p)
processing_template_decl--;
fn = STRIP_TEMPLATE (fn);
if (!DECL_FUNCTION_MEMBER_P (fn)
- && !DECL_LOCAL_FUNCTION_P (fn))
+ && !DECL_LOCAL_DECL_P (fn))
koenig_p = true;
}
}
if (op0)
type = TREE_TYPE (op0);
else
- {
- type = make_decltype_auto ();
- AUTO_IS_DECLTYPE (type) = true;
- }
+ type = make_decltype_auto ();
return convert_out (ctx->preserve (type));
}
TREE_STATIC (decl) = 1;
TREE_READONLY (decl) = 1;
cp_finish_decl (decl, cst, true, NULL, LOOKUP_ONLYCONVERTING);
- safe_pushdecl_maybe_friend (decl, false);
+ safe_pushdecl (decl);
return 1;
}
bool member_p = at_class_scope_p ();
- finish_static_assert (condition, message, loc, member_p);
+ finish_static_assert (condition, message, loc, member_p, false);
return 1;
}