4322eb6c0e
* diagnostic.h (set_internal_error_function): Renamed. * toplev.h (internal_error): Renamed from fatal. (pfatal_with_name): Deleted. (fatal_io_error): Now has printf-style arguments. * diagnostic.c (pfatal_with_name): Deleted. (fatal_io_error): Rework to have args in printf-style. (set_internal_error_function): Renamed from set_fatal_function. (internal_error): Renamed from fatal. (error_recursion, fancy_abort): Call internal_error instead of fatal. * dwarf2out.c (get_cfa_from_loc_descr): Likewise. * emit-rtl.c (gen_realpart, gen_imagpart): Likewise. * expr.c (check_max_integer_computation_mode, expand_expr): Likewise. * flow.c (verify_flow_info): Likewise. * config/arm/arm.c (thumb_unexpanded_epilogue): Likewise. * config/mips/mips.c (save_restore_insns): Likewise. * cp/init.c (build_java_class_ref): Likewise. (dsp16xx_reg_class_from_letter): Likewise. (limit_reload_class, double_reg_to_memory): Likewise. (print_operand_address, emit_1600_code_shift): Likewise. (gen_tst_reg, gen_compare_reg): Likewise. * config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise. * cp/decl.c (pushdecl): Likewise. * java/check-init.c (check_init): Likewise. * java/expr.c (java_lang_expand_expr): Likewise. * java/jcf-parse.c (get_constant): Likewise. * java/mangle.c (java_mangle_decl): Likewise. * java/parse.y (make_nested_class_name, java_complete_lhs): Likewise. (operator_string): Likewise. * except.c (duplicate_eh_handlers): Call abort instead of fatal. * flow.c (verify_flow_info): Likewise. * ch/convert.c (convert): Likewise. * ch/except.c (pop_handler, chill_check_no_handlers): Likewise. * ch/expr.c (chill_expand_expr): Likewise. * ch/parse.c (peek_token_, pushback_token, require): Likewise. * config/arm/arm.c (thumb_load_double_from_address): Likewise. * config/avr/avr.c (pttreg_to_str, unique_section): Likewise. (avr_normalize_condition): Likewise. * config/c4x/c4x.c (c4x_emit_libcall, c4x_valid_operands): Likewise. * config/dsp16xx/dsp16xx.c (dsp16xx_reg_class_from_letter): Likewise. (limit_reload_class, double_reg_to_memory): Likewise. (print_operand_address, emit_1600_code_shift): Likewise. (gen_tst_reg, gen_compare_reg): Likewise. * config/m68hc11/m68hc11.c (m68hc11_emit_libcall): Likewise. * cp/decl.c (pushdecl): Likewise. * java/check-init.c (check_init): Likewise. * java/class.c (build_class_ref): Likewise. * java/constants.c (write_constant_pool): Likewise. * java/decl.c (start_java_method): Likewise. * java/expr.c (push_type, java_stack_pop, java_stack_swap): Likewise. (java_stack_dup, encode_newarray_type): Likewise. (build_java_array_length_access): Likewise. (build_java_check_indexed_type, expand_java_pushc): Likewise. (build_java_soft_divmod, build_invokeinterface): Likewise. * java/java-tree.h (INNER_CLASS_P): Likewise. * java/jcf-parse.c (parse_signature, get_name_constant): Likewise. (give_name_to_class, get_class_constant): Likewise. * java/jcf-write.c (CHECK_PUT, CHECK_OP, get_access_flags): Likewise. (find_constant_index, generate_bytecode_conditional): Likewise. (generate_bytecode_insns, perform_relocations): Likewise. * java/lex.c (java_unget_unicode, java_lex): Likewise. * java/mangle.c (mangle_type, mangle_record_type): Likewise. (mangle_pointer_type, mangle_array_type, init_mangling): Likewise. (finish_mangling): Likewise. * java/parse.h (MARK_FINAL_PARMS): Likewise. * java/parse.y (pop_current_osb, unreachable_stmt_error): Likewise. (obtain_incomplete_type, java_complete_class): Likewise. (java_check_regular_methods, java_complete_expand_method): Likewise. (cut_identifier_in_qualified, check_deprecation): Likewise. (patch_invoke, find_applicable_accessible_methods_list): Likewise. (java_complete_lhs, lookup_name_in_blocks): Likewise. (check_final_variable_indirect_assignment, build_unaryop): Likewise. * java/typeck.c (set_local_type, parse_signature_type): Likewise. (parse_signature_string, build_java_signature): Likewise; (set_java_signature): Likewise. * java/verify.c (type_stack_dup, CHECK_PC_IN_RANGE): Likewise. * c-parse.in (methoddef): Call fatal_error instead of fatal. * objc/objc-act.c (build_ivar_chain): Likewise. * cp/except.c (decl_is_java_type): Likewise. * cp/init.c (build_java_class_ref): Likewise. * cp/init.c (build_new_1): Likewise. * f/com.c (ffecom_init_0): Likewise. * java/class.c (add_method, build_static_field_ref): Likewise. * java/expr.c (build_known_method_ref, expand_invoke): Likewise. * java/jcf-parse.c (get_constant, jcf_parse): Likewise. * java/lex.c (java_new_new_lexer): Likewise. * java/jv-scan.c (main): Likewise. (fatal_error): Renamed from fatal. * dwarfout.c (dwarfout_init): Call fatal_io_error instead of pfatal_with_name. * graph.c (clean_graph_dump_file): Likewise. * profile.c (init_branch_prob): Likewise. * ch/grant.c (write_grant_file): Likewise. * ch/lex.c (init_parse, same_file, yywrap): Likewise. * f/com.c (init_parse): Likewise. * java/jcf-parse.c (yyparse): Likewise. * objc/objc-act.c (objc_init): Likewise. * java/jcf-parse.c (jcf_parse_source): Call fatal_io_error, not fatal. (yyparse): Likewise. * java/jcf-write.c (make_class_file_name, write_classfile): Likewise. * java/lex.c (java_get_line_col): Likewise. * hash.c (hash_allocate): Don't check for failure returns from obstack functions that can't fail. (hash_table_init_n, hash_table_init): Likewise; also now return void. * hash.h (hash_table_init_n, hash_table_init): Now return void. * cp/decl.c (build_typename_type): hash_table_init now returns void. * ch/lang.c (GNU_xref_begin, GNU_xref_end): Deleted. * ch/lex.c (convert_bitstring): Delete check for alloca failure. * config/dsp16xx/dsp16xx.c (dsp16xx_invalid_register_for_compare): Deleted. * config/dsp16xx/dsp16xx.md (unnamed cmphi): Call abort instead of it. * f/com.c (ffecom_decode_include_option_): Make errors non-fatal. * f/lex.c (ffelex_cfelex_, ffelex_get_directive_line_): Likewise. (ffelex_hash_): Likewise. * config/arm/arm.c (arm_override_options): Likewise. * config/avr/avr.c (avr_override_options): Likewise. * config/c4x/c4x.c (c4x_expand_prologue): Likewise. * config/dsp16xx/dsp16xx.c (function_prologue): Likewise. * config/h8300/h8300.c (h8300_init_once): Likewise. * config/mips/mips.c (override_options): Likewise. * config/i386/i386.c (override_options): Likewise, rework. * config/m68k/m68k.c (override_options): Likewise. * cp/decl.c (init_decl_processing): Likewise. * java/jcf-parse.c (load_class): Likewise. * config/dsp16xx/dsp16xx.c (print_operand): Call output_operand_lossage instead of fatal. * config/mips/mips.c (print_operand): Likewise. * java/lex.c (byteswap_init, need_byteswap): Only #ifdef HAVE_ICONV. * objc/objc_act.c (objc_check_decl): Remove unneeded fatal call. (get_object_reference): Likewise. From-SVN: r39444
306 lines
7.5 KiB
C
306 lines
7.5 KiB
C
/* Language-specific hook definitions for CHILL front end.
|
||
Copyright (C) 1992, 1993, 1994, 1998, 1999, 2000, 2001
|
||
Free Software Foundation, Inc.
|
||
|
||
This file is part of GNU CC.
|
||
|
||
GNU CC is free software; you can redistribute it and/or modify
|
||
it under the terms of the GNU General Public License as published by
|
||
the Free Software Foundation; either version 2, or (at your option)
|
||
any later version.
|
||
|
||
GNU CC is distributed in the hope that it will be useful,
|
||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU General Public License for more details.
|
||
|
||
You should have received a copy of the GNU General Public License
|
||
along with GNU CC; see the file COPYING. If not, write to
|
||
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||
Boston, MA 02111-1307, USA. */
|
||
|
||
|
||
#include "config.h"
|
||
#include "system.h"
|
||
#include "tree.h"
|
||
#include "ch-tree.h"
|
||
#include "lex.h"
|
||
#include "input.h"
|
||
#include "toplev.h"
|
||
#include "rtl.h"
|
||
#include "expr.h"
|
||
|
||
/* Type node for boolean types. */
|
||
|
||
tree boolean_type_node;
|
||
|
||
/* True if STRING(INDEX) yields a CHARS(1) (or BOOLS(1)) rather than
|
||
a CHAR (or BOOL). Also, makes CHARS(1) similar for CHAR,
|
||
and BOOLS(1) similar to BOOL. This is for compatibility
|
||
for the 1984 version of Z.200.*/
|
||
int flag_old_strings = 0;
|
||
|
||
/* This is set non-zero to force user input tokens to lower case.
|
||
This is non-standard. See Z.200, page 8. */
|
||
int ignore_case = 1;
|
||
|
||
/* True if reserved and predefined words ('special' words in the Z.200
|
||
terminology) are in uppercase. Obviously, this had better not be
|
||
true if we're ignoring input case. */
|
||
int special_UC = 0;
|
||
|
||
/* The actual name of the input file, regardless of any #line directives */
|
||
const char* chill_real_input_filename;
|
||
extern FILE* finput;
|
||
|
||
static int deep_const_expr PARAMS ((tree));
|
||
static void chill_print_error_function PARAMS ((const char *));
|
||
|
||
/* Return 1 if the expression tree given has all
|
||
constant nodes as its leaves,otherwise. */
|
||
|
||
static int
|
||
deep_const_expr (exp)
|
||
tree exp;
|
||
{
|
||
enum chill_tree_code code;
|
||
int length;
|
||
int i;
|
||
|
||
if (exp == NULL_TREE)
|
||
return 0;
|
||
|
||
code = TREE_CODE (exp);
|
||
length = first_rtl_op (TREE_CODE (exp));
|
||
|
||
/* constant leaf? return TRUE */
|
||
if (TREE_CODE_CLASS (code) == 'c')
|
||
return 1;
|
||
|
||
/* Recursively check next level down. */
|
||
for (i = 0; i < length; i++)
|
||
if (! deep_const_expr (TREE_OPERAND (exp, i)))
|
||
return 0;
|
||
return 1;
|
||
}
|
||
|
||
|
||
tree
|
||
const_expr (exp)
|
||
tree exp;
|
||
{
|
||
if (TREE_CODE (exp) == INTEGER_CST)
|
||
return exp;
|
||
if (TREE_CODE (exp) == CONST_DECL)
|
||
return const_expr (DECL_INITIAL (exp));
|
||
if (TREE_CODE_CLASS (TREE_CODE (exp)) == 'd'
|
||
&& DECL_INITIAL (exp) != NULL_TREE
|
||
&& TREE_READONLY (exp))
|
||
return DECL_INITIAL (exp);
|
||
if (deep_const_expr (exp))
|
||
return exp;
|
||
if (TREE_CODE (exp) != ERROR_MARK)
|
||
error ("non-constant expression");
|
||
return error_mark_node;
|
||
}
|
||
|
||
/* Each of the functions defined here
|
||
is an alternative to a function in objc-actions.c. */
|
||
|
||
/* Used by c-lex.c, but only for objc. */
|
||
tree
|
||
lookup_interface (arg)
|
||
tree arg ATTRIBUTE_UNUSED;
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
int
|
||
maybe_objc_comptypes (lhs, rhs)
|
||
tree lhs ATTRIBUTE_UNUSED, rhs ATTRIBUTE_UNUSED;
|
||
{
|
||
return -1;
|
||
}
|
||
|
||
tree
|
||
maybe_building_objc_message_expr ()
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
int
|
||
recognize_objc_keyword ()
|
||
{
|
||
return 0;
|
||
}
|
||
|
||
void
|
||
lang_init_options ()
|
||
{
|
||
}
|
||
|
||
/* used by print-tree.c */
|
||
|
||
void
|
||
lang_print_xnode (file, node, indent)
|
||
FILE *file ATTRIBUTE_UNUSED;
|
||
tree node ATTRIBUTE_UNUSED;
|
||
int indent ATTRIBUTE_UNUSED;
|
||
{
|
||
}
|
||
|
||
/*
|
||
* process chill-specific compiler command-line options
|
||
* do not complain if the option is not recognised
|
||
*/
|
||
int
|
||
lang_decode_option (argc, argv)
|
||
int argc;
|
||
char **argv;
|
||
{
|
||
char *p = argv[0];
|
||
static int explicit_ignore_case = 0;
|
||
if (!strcmp(p, "-lang-chill"))
|
||
; /* do nothing */
|
||
else if (!strcmp (p, "-fruntime-checking"))
|
||
{
|
||
range_checking = 1;
|
||
empty_checking = 1;
|
||
}
|
||
else if (!strcmp (p, "-fno-runtime-checking"))
|
||
{
|
||
range_checking = 0;
|
||
empty_checking = 0;
|
||
runtime_checking_flag = 0;
|
||
}
|
||
else if (!strcmp (p, "-flocal-loop-counter"))
|
||
flag_local_loop_counter = 1;
|
||
else if (!strcmp (p, "-fno-local-loop-counter"))
|
||
flag_local_loop_counter = 0;
|
||
else if (!strcmp (p, "-fold-strings"))
|
||
flag_old_strings = 1;
|
||
else if (!strcmp (p, "-fno-old-strings"))
|
||
flag_old_strings = 0;
|
||
else if (!strcmp (p, "-fignore-case"))
|
||
{
|
||
explicit_ignore_case = 1;
|
||
if (special_UC)
|
||
{
|
||
error ("Ignoring case upon input and");
|
||
error ("making special words uppercase wouldn't work.");
|
||
}
|
||
else
|
||
ignore_case = 1;
|
||
}
|
||
else if (!strcmp (p, "-fno-ignore-case"))
|
||
ignore_case = 0;
|
||
else if (!strcmp (p, "-fspecial_UC"))
|
||
{
|
||
if (explicit_ignore_case)
|
||
{
|
||
error ("Making special words uppercase and");
|
||
error (" ignoring case upon input wouldn't work.");
|
||
}
|
||
else
|
||
special_UC = 1, ignore_case = 0;
|
||
}
|
||
else if (!strcmp (p, "-fspecial_LC"))
|
||
special_UC = 0;
|
||
else if (!strcmp (p, "-fpack"))
|
||
maximum_field_alignment = BITS_PER_UNIT;
|
||
else if (!strcmp (p, "-fno-pack"))
|
||
maximum_field_alignment = 0;
|
||
else if (!strcmp (p, "-fchill-grant-only"))
|
||
grant_only_flag = 1;
|
||
else if (!strcmp (p, "-fgrant-only"))
|
||
grant_only_flag = 1;
|
||
/* user has specified a seize-file path */
|
||
else if (p[0] == '-' && p[1] == 'I')
|
||
register_seize_path (&p[2]);
|
||
if (!strcmp(p, "-itu")) /* Force Z.200 semantics */
|
||
{
|
||
pedantic = 1; /* FIXME: new flag name? */
|
||
flag_local_loop_counter = 1;
|
||
}
|
||
else
|
||
return c_decode_option (argc, argv);
|
||
|
||
return 1;
|
||
}
|
||
|
||
static void
|
||
chill_print_error_function (file)
|
||
const char *file;
|
||
{
|
||
static tree last_error_function = NULL_TREE;
|
||
static struct module *last_error_module = NULL;
|
||
|
||
if (last_error_function == current_function_decl
|
||
&& last_error_module == current_module)
|
||
return;
|
||
|
||
last_error_function = current_function_decl;
|
||
last_error_module = current_module;
|
||
|
||
if (file)
|
||
fprintf (stderr, "%s: ", file);
|
||
|
||
if (current_function_decl == global_function_decl
|
||
|| current_function_decl == NULL_TREE)
|
||
{
|
||
if (current_module == NULL)
|
||
fprintf (stderr, "At top level:\n");
|
||
else
|
||
fprintf (stderr, "In module %s:\n",
|
||
IDENTIFIER_POINTER (current_module->name));
|
||
}
|
||
else
|
||
{
|
||
const char *kind = "function";
|
||
const char *name = (*decl_printable_name) (current_function_decl, 2);
|
||
fprintf (stderr, "In %s `%s':\n", kind, name);
|
||
}
|
||
}
|
||
|
||
/* Print an error message for invalid use of an incomplete type.
|
||
VALUE is the expression that was used (or 0 if that isn't known)
|
||
and TYPE is the type that was invalid. */
|
||
|
||
void
|
||
incomplete_type_error (value, type)
|
||
tree value ATTRIBUTE_UNUSED;
|
||
tree type ATTRIBUTE_UNUSED;
|
||
{
|
||
error ("internal error - use of undefined type");
|
||
}
|
||
|
||
/* Return the typed-based alias set for T, which may be an expression
|
||
or a type. Return -1 if we don't do anything special. */
|
||
|
||
HOST_WIDE_INT
|
||
lang_get_alias_set (t)
|
||
tree t ATTRIBUTE_UNUSED;
|
||
{
|
||
/* ??? Need to figure out what the rules are. Certainly we'd need
|
||
to handle union-like things, and probably variant records.
|
||
Until then, turn off type-based aliasing completely. */
|
||
return 0;
|
||
}
|
||
|
||
void
|
||
lang_init ()
|
||
{
|
||
chill_real_input_filename = input_filename;
|
||
|
||
/* the beginning of the file is a new line; check for # */
|
||
/* With luck, we discover the real source file's name from that
|
||
and put it in input_filename. */
|
||
|
||
ungetc (check_newline (), finput);
|
||
|
||
/* set default grant file */
|
||
set_default_grant_file ();
|
||
|
||
print_error_function = chill_print_error_function;
|
||
}
|