diff options
Diffstat (limited to 'gcc/ada/gcc-interface')
-rw-r--r-- | gcc/ada/gcc-interface/Make-lang.in | 2 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/Makefile.in | 33 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/misc.c | 3 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/trans.c | 8 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/utils.c | 21 |
5 files changed, 59 insertions, 8 deletions
diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in index 9c7b6e1496f..d51d3973b4d 100644 --- a/gcc/ada/gcc-interface/Make-lang.in +++ b/gcc/ada/gcc-interface/Make-lang.in @@ -322,7 +322,6 @@ GNAT_ADA_OBJS = \ ada/libgnat/g-spchge.o \ ada/libgnat/g-speche.o \ ada/libgnat/g-u3spch.o \ - ada/get_spark_xrefs.o \ ada/get_targ.o \ ada/ghost.o \ ada/libgnat/gnat.o \ @@ -352,7 +351,6 @@ GNAT_ADA_OBJS = \ ada/par_sco.o \ ada/prep.o \ ada/prepcomp.o \ - ada/put_spark_xrefs.o \ ada/put_scos.o \ ada/repinfo.o \ ada/restrict.o \ diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in index b1621d11b11..749dbbfec47 100644 --- a/gcc/ada/gcc-interface/Makefile.in +++ b/gcc/ada/gcc-interface/Makefile.in @@ -1,5 +1,5 @@ # Makefile for GNU Ada Compiler (GNAT). -# Copyright (C) 1994-2016 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. #This file is part of GCC. @@ -887,6 +887,37 @@ ifeq ($(strip $(filter-out arm% linux-androideabi,$(target_cpu) $(target_os))),) LIBRARY_VERSION := $(LIB_VERSION) endif +# AARCH64 QNX +ifeq ($(strip $(filter-out aarch64 %qnx,$(target_cpu) $(target_os))),) + LIBGNAT_TARGET_PAIRS = \ + a-intnam.ads<libgnarl/a-intnam__qnx.ads \ + s-inmaop.adb<libgnarl/s-inmaop__posix.adb \ + s-intman.adb<libgnarl/s-intman__qnx.adb \ + s-osinte.adb<libgnarl/s-osinte__qnx.adb \ + s-osinte.ads<libgnarl/s-osinte__qnx.ads \ + s-osprim.adb<libgnat/s-osprim__posix.adb \ + s-qnx.ads<libgnarl/s-qnx.ads \ + s-taprop.adb<libgnarl/s-taprop__qnx.adb \ + s-taspri.ads<libgnarl/s-taspri__posix.ads \ + s-tpopsp.adb<libgnarl/s-tpopsp__posix-foreign.adb \ + $(ATOMICS_TARGET_PAIRS) \ + $(ATOMICS_BUILTINS_TARGET_PAIRS) \ + system.ads<libgnat/system-qnx-aarch64.ads + + TOOLS_TARGET_PAIRS = indepsw.adb<indepsw-gnu.adb + + EXTRA_GNATRTL_TASKING_OBJS=s-qnx.o + EXTRA_LIBGNAT_OBJS+=sigtramp-qnx.o + EXTRA_LIBGNAT_SRCS+=sigtramp.h + EH_MECHANISM=-gcc + + SO_OPTS= -shared-libgcc -Wl,-soname, + MISCLIB= - lsocket + THREADSLIB = + GNATLIB_SHARED = gnatlib-shared-dual + LIBRARY_VERSION := $(LIB_VERSION) +endif + # Sparc Solaris ifeq ($(strip $(filter-out sparc% sun solaris%,$(target_cpu) $(target_vendor) $(target_os))),) LIBGNAT_TARGET_PAIRS = \ diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c index 4d7f432bff2..2cf5e51e91d 100644 --- a/gcc/ada/gcc-interface/misc.c +++ b/gcc/ada/gcc-interface/misc.c @@ -262,6 +262,9 @@ gnat_post_options (const char **pfilename ATTRIBUTE_UNUSED) /* No psABI change warnings for Ada. */ warn_psabi = 0; + /* No return type warnings for Ada. */ + warn_return_type = 0; + /* No caret by default for Ada. */ if (!global_options_set.x_flag_diagnostics_show_caret) global_dc->show_caret = false; diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index d22d82ad610..238b841139b 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -7695,12 +7695,12 @@ gnat_to_gnu (Node_Id gnat_node) /* Added Nodes */ /****************/ - /* Call markers are created by the ABE mechanism to capture the target of - a call along with other elaboration-related attributes which are either - unavailable of expensive to recompute. Call markers do not have static - and runtime semantics, and should be ignored. */ + /* Markers are created by the ABE mechanism to capture information which + is either unavailable of expensive to recompute. Markers do not have + and runtime semantics, and should be ignored. */ case N_Call_Marker: + case N_Variable_Reference_Marker: gnu_result = alloc_stmt_list (); break; diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index bad5aeade13..d7f9f3464ae 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -4706,6 +4706,7 @@ convert (tree type, tree expr) return fold (convert_to_real (type, expr)); case RECORD_TYPE: + /* Do a normal conversion between scalar and justified modular type. */ if (TYPE_JUSTIFIED_MODULAR_P (type) && !AGGREGATE_TYPE_P (etype)) { vec<constructor_elt, va_gc> *v; @@ -4717,9 +4718,27 @@ convert (tree type, tree expr) return gnat_build_constructor (type, v); } - /* ... fall through ... */ + /* In these cases, assume the front-end has validated the conversion. + If the conversion is valid, it will be a bit-wise conversion, so + it can be viewed as an unchecked conversion. */ + return unchecked_convert (type, expr, false); case ARRAY_TYPE: + /* Do a normal conversion between unconstrained and constrained array + type, assuming the latter is a constrained version of the former. */ + if (TREE_CODE (expr) == INDIRECT_REF + && ecode == ARRAY_TYPE + && TREE_TYPE (etype) == TREE_TYPE (type)) + { + tree ptr_type = build_pointer_type (type); + tree t = build_unary_op (INDIRECT_REF, NULL_TREE, + fold_convert (ptr_type, + TREE_OPERAND (expr, 0))); + TREE_READONLY (t) = TREE_READONLY (expr); + TREE_THIS_NOTRAP (t) = TREE_THIS_NOTRAP (expr); + return t; + } + /* In these cases, assume the front-end has validated the conversion. If the conversion is valid, it will be a bit-wise conversion, so it can be viewed as an unchecked conversion. */ |