diff options
author | gingold <gingold@b72b5c32-5f01-0410-b925-b5c7b92870f7> | 2008-08-30 13:30:19 +0000 |
---|---|---|
committer | gingold <gingold@b72b5c32-5f01-0410-b925-b5c7b92870f7> | 2008-08-30 13:30:19 +0000 |
commit | cd9300765e7e3fd43e450777e98a778146f700c2 (patch) | |
tree | f013fea17ae4eee9c1649e63b99b9bfe377fafb4 /ortho/gcc | |
parent | 4b6571671497ecc1f846bfa49678254e14511fc9 (diff) | |
download | ghdl-cd9300765e7e3fd43e450777e98a778146f700c2.tar.gz ghdl-cd9300765e7e3fd43e450777e98a778146f700c2.tar.bz2 ghdl-cd9300765e7e3fd43e450777e98a778146f700c2.zip |
Switch to gcc 4.3
Don't use tagged types in grt (not supported by recent versions of GNAT)
Fix warnings
Diffstat (limited to 'ortho/gcc')
-rw-r--r-- | ortho/gcc/Makefile | 10 | ||||
-rw-r--r-- | ortho/gcc/Makefile.inc | 12 | ||||
-rw-r--r-- | ortho/gcc/ortho-lang.c | 102 | ||||
-rw-r--r-- | ortho/gcc/ortho_ident.adb | 1 |
4 files changed, 40 insertions, 85 deletions
diff --git a/ortho/gcc/Makefile b/ortho/gcc/Makefile index 63fb5e362..18fc0b106 100644 --- a/ortho/gcc/Makefile +++ b/ortho/gcc/Makefile @@ -2,9 +2,10 @@ ortho_srcdir=.. orthobe_srcdir=$(ortho_srcdir)/gcc agcc_objdir=. agcc_srcdir=$(ortho_srcdir)/gcc -AGCC_GCCSRC_DIR:=$(HOME)/dist/gcc-4.2.4 +AGCC_GCCSRC_DIR:=$(HOME)/dist/gcc-4.3.1 AGCC_GCCOBJ_DIR:=$(AGCC_GCCSRC_DIR)-objs/ SED=sed +GNATMAKE=gnatmake all: $(ortho_exec) @@ -15,12 +16,13 @@ ORTHO_PACKAGE=Ortho_Gcc $(ortho_exec): $(AGCC_DEPS) $(ORTHO_BASENAME).ads force - gnatmake -m -o $@ -g -aI$(ortho_srcdir) \ + $(GNATMAKE) -m -o $@ -g -aI$(ortho_srcdir) \ -aI$(ortho_srcdir)/gcc $(GNAT_FLAGS) ortho_gcc-main \ - -bargs -E -largs $(AGCC_OBJS) \ + -bargs -E -largs $(AGCC_OBJS) \ $(AGCC_GCCOBJ_DIR)libcpp/libcpp.a \ $(AGCC_GCCOBJ_DIR)libiberty/libiberty.a \ - $(AGCC_GCCOBJ_DIR)libdecnumber/libdecnumber.a #-static + $(AGCC_GCCOBJ_DIR)libdecnumber/libdecnumber.a \ + -lmpfr -lgmp #-static clean: agcc-clean $(RM) -f *.o *.ali ortho_nodes-main diff --git a/ortho/gcc/Makefile.inc b/ortho/gcc/Makefile.inc index ef6080848..8b7289ab4 100644 --- a/ortho/gcc/Makefile.inc +++ b/ortho/gcc/Makefile.inc @@ -27,24 +27,16 @@ AGCC_INC_FLAGS=-I$(AGCC_GCCOBJ_DIR)/gcc -I$(AGCC_GCCSRC_DIR)/include \ -I$(AGCC_GCCSRC_DIR)/libcpp/include AGCC_CFLAGS=-g -Wall -DIN_GCC $(AGCC_INC_FLAGS) -AGCC_LOCAL_OBJS=ortho-lang.o gcc-version.o +AGCC_LOCAL_OBJS=ortho-lang.o AGCC_DEPS := $(AGCC_LOCAL_OBJS) AGCC_OBJS := $(AGCC_LOCAL_OBJS) \ $(AGCC_GCCOBJ_DIR)gcc/toplev.o \ + $(AGCC_GCCOBJ_DIR)gcc/attribs.o \ $(AGCC_GCCOBJ_DIR)gcc/libbackend.a \ $(AGCC_GCCOBJ_DIR)libcpp/libcpp.a \ $(AGCC_GCCOBJ_DIR)libiberty/libiberty.a -gcc-version.c: $(AGCC_GCCSRC_DIR)/gcc/BASE-VER - -$(RM) -f $@ - echo '#include "version.h"' > $@ - echo "const char version_string[] = \""`cat $<` "(ghdl)\";" >> $@ - echo 'const char bug_report_url[] = "<URL:http://gna.org/projects/ghdl>";' >> $@ - -gcc-version.o: gcc-version.c - $(CC) -c -o $@ $< $(AGCC_CFLAGS) - ortho-lang.o: $(agcc_srcdir)/ortho-lang.c \ $(AGCC_GCCOBJ_DIR)gcc/gtype-vhdl.h \ $(AGCC_GCCOBJ_DIR)gcc/gt-vhdl-ortho-lang.h diff --git a/ortho/gcc/ortho-lang.c b/ortho/gcc/ortho-lang.c index a5037f93f..c37e39168 100644 --- a/ortho/gcc/ortho-lang.c +++ b/ortho/gcc/ortho-lang.c @@ -247,7 +247,7 @@ ortho_init (void) { tree n; - input_location.line = 0; + input_location = BUILTINS_LOCATION; /* Create a global binding. */ push_binding (); @@ -372,13 +372,6 @@ ortho_handle_option (size_t code, const char *arg, int value) } } -#if 0 -void -linemap_init (void *s) -{ -} -#endif - extern int lang_parse_file (const char *filename); static void @@ -391,6 +384,9 @@ ortho_parse_file (int debug) else filename = in_fnames[0]; + linemap_add (line_table, LC_ENTER, 0, filename ? filename :"*no-file*", 1); + input_location = linemap_line_start (line_table, 0, 252); + if (!lang_parse_file (filename)) errorcount++; else @@ -398,19 +394,7 @@ ortho_parse_file (int debug) cgraph_finalize_compilation_unit (); cgraph_optimize (); } -} - -static void -ortho_expand_function (tree fndecl) -{ - if (DECL_CONTEXT (fndecl) != NULL_TREE) - { - push_function_context (); - tree_rest_of_compilation (fndecl); - pop_function_context (); - } - else - tree_rest_of_compilation (fndecl); + linemap_add (line_table, LC_LEAVE, 0, NULL, 1); } /* Called by the back-end or by the front-end when the address of EXP @@ -610,6 +594,7 @@ builtin_function (const char *name, make_decl_rtl (decl); DECL_BUILT_IN_CLASS (decl) = class; DECL_FUNCTION_CODE (decl) = function_code; + DECL_SOURCE_LOCATION (decl) = input_location; return decl; } @@ -653,32 +638,6 @@ type_for_mode (enum machine_mode mode, int unsignedp) return type_for_size (GET_MODE_BITSIZE (mode), unsignedp); } -/* Return the unsigned version of a TYPE_NODE, a scalar type. */ -static tree -unsigned_type (tree type) -{ - return type_for_size (TYPE_PRECISION (type), 1); -} - -/* Return the signed version of a TYPE_NODE, a scalar type. */ -static tree -signed_type (tree type) -{ - return type_for_size (TYPE_PRECISION (type), 0); -} - -/* Return a type the same as TYPE except unsigned or signed according to - UNSIGNEDP. */ -static tree -signed_or_unsigned_type (int unsignedp, tree type) -{ - if (!INTEGRAL_TYPE_P (type) - || TYPE_UNSIGNED (type) == unsignedp) - return type; - else - return type_for_size (TYPE_PRECISION (type), unsignedp); -} - #undef LANG_HOOKS_NAME #define LANG_HOOKS_NAME "vhdl" #undef LANG_HOOKS_IDENTIFIER_SIZE @@ -752,23 +711,24 @@ const char * const tree_code_name[] = { union lang_tree_node GTY((desc ("0"), - chain_next ("(union lang_tree_node *)TREE_CHAIN (&%h.generic)"))) + chain_next ("(union lang_tree_node *) GENERIC_NEXT (&%h.generic)"))) { - union tree_node GTY ((tag ("0"), - desc ("tree_node_structure (&%h)"))) - generic; + union tree_node GTY ((tag ("0"))) generic; }; struct lang_decl GTY(()) { + char dummy; }; struct lang_type GTY (()) { + char dummy; }; struct language_function GTY (()) { + char dummy; }; struct chain_constr_type @@ -1004,8 +964,7 @@ new_alloca (tree rtype, tree size) cur_binding_level->save_stack = 1; args = tree_cons (NULL_TREE, fold_convert (size_type_node, size), NULL_TREE); - res = build3 (CALL_EXPR, ptr_type_node, stack_alloc_function_ptr, - args, NULL_TREE); + res = build_call_list (ptr_type_node, stack_alloc_function_ptr, args); return fold_convert (rtype, res); } @@ -1074,9 +1033,9 @@ new_float_literal (tree ltype, double value) else hi = s >> (8 * sizeof (HOST_WIDE_INT)); - res = build_int_cst_wide (ltype, lo, hi); + res = build_int_cst_wide (long_integer_type_node, lo, hi); REAL_VALUE_FROM_INT (r_sign, lo, hi, DFmode); - real_2expN (&r_exp, ex - 60); + real_2expN (&r_exp, ex - 60, DFmode); real_arithmetic (&r, MULT_EXPR, &r_sign, &r_exp); res = build_real (ltype, r); return res; @@ -1496,14 +1455,14 @@ ortho_build_addr (tree lvalue, tree atype) ortho_mark_addressable (base); - offset = fold_build2 (MULT_EXPR, TREE_TYPE (idx), idx, + idx = fold_convert (sizetype, idx); + offset = fold_build2 (MULT_EXPR, sizetype, idx, array_ref_element_size (lvalue)); base = array_to_pointer_conversion (base); base_type = TREE_TYPE (base); - res = build2 (PLUS_EXPR, base_type, - base, convert (base_type, offset)); + res = build2 (POINTER_PLUS_EXPR, base_type, base, offset); } else { @@ -1606,7 +1565,7 @@ new_value (tree lvalue) void new_debug_line_decl (int line) { - input_location.line = line; + input_location = linemap_line_start (line_table, line, 252); } void @@ -1806,6 +1765,8 @@ finish_subprogram_decl (struct o_inter_list *interfaces, tree *res) decl = build_decl (FUNCTION_DECL, interfaces->ident, build_function_type (interfaces->rtype, interfaces->param_list.first)); + DECL_SOURCE_LOCATION (decl) = input_location; + is_global = current_function_decl == NULL_TREE || interfaces->storage == o_storage_external; if (is_global) @@ -1876,7 +1837,7 @@ finish_subprogram_body (void) DECL_SAVED_TREE (func) = bind; /* Initialize the RTL code for the function. */ - allocate_struct_function (func); + allocate_struct_function (func, false); /* Store the end of the function. */ cfun->function_end_locus = input_location; @@ -1898,14 +1859,14 @@ finish_subprogram_body (void) cgraph_finalize_function (func, false); current_function_decl = parent; - cfun = NULL; + set_cfun (NULL); } void new_debug_line_stmt (int line) { - input_location.line = line; + input_location = linemap_line_start (line_table, line, 252); } void @@ -1948,10 +1909,9 @@ new_association (struct o_assoc_list *assocs, tree val) tree new_function_call (struct o_assoc_list *assocs) { - return build3 (CALL_EXPR, - TREE_TYPE (TREE_TYPE (assocs->subprg)), - build_function_ptr (assocs->subprg), - assocs->list.first, NULL_TREE); + return build_call_list (TREE_TYPE (TREE_TYPE (assocs->subprg)), + build_function_ptr (assocs->subprg), + assocs->list.first); } void @@ -1959,10 +1919,9 @@ new_procedure_call (struct o_assoc_list *assocs) { tree res; - res = build3 (CALL_EXPR, - TREE_TYPE (TREE_TYPE (assocs->subprg)), - build_function_ptr (assocs->subprg), - assocs->list.first, NULL_TREE); + res = build_call_list (TREE_TYPE (TREE_TYPE (assocs->subprg)), + build_function_ptr (assocs->subprg), + assocs->list.first); TREE_SIDE_EFFECTS (res) = 1; append_stmt (res); } @@ -1987,7 +1946,8 @@ new_func_return_stmt (tree value) res = DECL_RESULT (current_function_decl); assign = build2 (MODIFY_EXPR, TREE_TYPE (value), res, value); TREE_SIDE_EFFECTS (assign) = 1; - stmt = build1 (RETURN_EXPR, TREE_TYPE (value), assign); + stmt = build1 (RETURN_EXPR, void_type_node, assign); + TREE_SIDE_EFFECTS (stmt) = 1; append_stmt (stmt); } diff --git a/ortho/gcc/ortho_ident.adb b/ortho/gcc/ortho_ident.adb index c8acd58c5..1fac9abf9 100644 --- a/ortho/gcc/ortho_ident.adb +++ b/ortho/gcc/ortho_ident.adb @@ -7,6 +7,7 @@ package body Ortho_Ident is (Id : O_Ident; Str : Address; Size : Integer) return Boolean; pragma Import (C, Compare_Identifier_String); + pragma Warnings (Off, Compare_Identifier_String); function Get_Identifier (Str : String) return O_Ident is begin |