/* Library interface to C++ front end.
- Copyright (C) 2014-2017 Free Software Foundation, Inc.
+ Copyright (C) 2014-2020 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.
return t;
}
- source_location get_source_location (const char *filename,
- unsigned int line_number)
+ location_t get_location_t (const char *filename,
+ unsigned int line_number)
{
if (filename == NULL)
return UNKNOWN_LOCATION;
filename = intern_filename (filename);
linemap_add (line_table, LC_ENTER, false, filename, line_number);
- source_location loc = linemap_line_start (line_table, line_number, 0);
+ location_t loc = linemap_line_start (line_table, line_number, 0);
linemap_add (line_table, LC_LEAVE, false, NULL, 0);
return loc;
}
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;
}
}
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;
static tree
build_named_class_type (enum tree_code code,
tree id,
- source_location loc)
+ location_t loc)
{
/* See at_fake_function_scope_p. */
gcc_assert (!at_function_scope_p ());
gcc_assert (!substitution_name);
}
- source_location loc = ctx->get_source_location (filename, line_number);
+ location_t loc = ctx->get_location_t (filename, line_number);
bool class_member_p = at_class_scope_p ();
bool ctor = false, dtor = false, assop = false;
tree_code opcode = ERROR_MARK;
unsigned int line_number)
{
plugin_context *ctx = static_cast<plugin_context *> (self);
- source_location loc = ctx->get_source_location (filename, line_number);
+ location_t loc = ctx->get_location_t (filename, line_number);
tree typedecl = convert_in (typedecl_in);
tree type = TREE_TYPE (typedecl);
tree lambda_expr = build_lambda_expr ();
- LAMBDA_EXPR_LOCATION (lambda_expr) = ctx->get_source_location (filename,
- line_number);
+ LAMBDA_EXPR_LOCATION (lambda_expr) = ctx->get_location_t (filename,
+ line_number);
tree type = begin_lambda_type (lambda_expr);
gcc_assert (is_new_type);
- source_location loc = ctx->get_source_location (filename, line_number);
+ location_t loc = ctx->get_location_t (filename, line_number);
tree type_decl = TYPE_NAME (type);
DECL_SOURCE_LOCATION (type_decl) = loc;
SET_OPAQUE_ENUM_P (type, false);
unsigned int line_number)
{
plugin_context *ctx = static_cast<plugin_context *> (self);
- source_location loc = ctx->get_source_location (filename, line_number);
+ location_t loc = ctx->get_location_t (filename, line_number);
gcc_assert (template_parm_scope_p ());
unsigned int line_number)
{
plugin_context *ctx = static_cast<plugin_context *> (self);
- source_location loc = ctx->get_source_location (filename, line_number);
+ location_t loc = ctx->get_location_t (filename, line_number);
gcc_assert (template_parm_scope_p ());
unsigned int line_number)
{
plugin_context *ctx = static_cast<plugin_context *> (self);
- source_location loc = ctx->get_source_location (filename, line_number);
+ location_t loc = ctx->get_location_t (filename, line_number);
gcc_assert (template_parm_scope_p ());
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);
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;
break;
default:
- result = cxx_sizeof_or_alignof_type (type, opcode, true);
+ /* Use the C++11 alignof semantics. */
+ 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--;
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));
}
unsigned int line_number)
{
plugin_context *ctx = static_cast<plugin_context *> (self);
- source_location loc = ctx->get_source_location (filename, line_number);
+ location_t loc = ctx->get_location_t (filename, line_number);
tree name = convert_in (template_decl);
tree targsl = targlist (targs);
unsigned int line_number)
{
plugin_context *ctx = static_cast<plugin_context *> (self);
- source_location loc = ctx->get_source_location (filename, line_number);
+ location_t loc = ctx->get_location_t (filename, line_number);
tree name = convert_in (template_decl);
tree tdecl = finish_template_type (name, targlist (args), false);;
cst = build_int_cst (type, value);
if (!TYPE_READONLY (type))
type = build_qualified_type (type, TYPE_QUAL_CONST);
- decl = build_decl (ctx->get_source_location (filename, line_number),
+ decl = build_decl (ctx->get_location_t (filename, line_number),
VAR_DECL, get_identifier (name), type);
TREE_STATIC (decl) = 1;
TREE_READONLY (decl) = 1;
TREE_TYPE (message) = char_array_type_node;
fix_string_type (message);
- source_location loc = ctx->get_source_location (filename, line_number);
+ location_t loc = ctx->get_location_t (filename, line_number);
bool member_p = at_class_scope_p ();