aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
AgeCommit message (Collapse)AuthorFilesLines
2018-12-03[Ada] Spelling fixes and minor reformattingGary Dismukes10-16/+24
2018-12-03 Gary Dismukes <dismukes@adacore.com> gcc/ada/ * exp_ch3.adb, libgnarl/s-taasde.adb, libgnarl/s-taenca.adb, libgnarl/s-tarest.adb, libgnarl/s-tasini.adb, libgnarl/s-taskin.ads, libgnarl/s-tasren.adb, libgnarl/s-tassta.adb, libgnarl/s-tasuti.adb: Spelling fixes and minor reformatting. From-SVN: r266756
2018-12-03[Ada] Fix recent regression on array aggregate with dynamic subtypeEric Botcazou2-38/+54
This prevents either a crash or an assertion failure in gigi on an array with dynamic subtype that is wrongly flagged as static by the front-end because of a recent improvement made in the handling of nested aggregates. The patch reuses the existing Static_Array_Aggregate predicate instead of fixing the problematic test, pluging a few loopholes in the process. The predicate is conservatively correct but should be good enough in practice. 2018-12-03 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * exp_aggr.adb (Convert_To_Positional): Use Static_Array_Aggregate to decide whether to set Compile_Time_Known_Aggregate on an already flat aggregate. (Expand_Array_Aggregate): Remove test on Compile_Time_Known_Aggregate that turns out to be dead and simplify. (Is_Static_Component): New predicate extracted from... (Static_Array_Aggregate): ...here. Test neither Is_Tagged_Type nor Is_Controlled for the type, but test whether the component type has discriminants. Use the Is_Static_Component predicate consistently for the positional and named cases. gcc/testsuite/ * gnat.dg/array32.adb, gnat.dg/array32.ads: New testcase. From-SVN: r266755
2018-12-03[Ada] Fix internal error on package instantiation on private typeEric Botcazou3-2/+41
This fixes an assertion failure in gigi triggered by the instantiation of a generic package, in a visible part of another package, done on a private type whose full view is a type derived from a scalar or an access type. The problem is that the front-end creates and inserts two different freeze nodes in the expanded tree for the partial and the full views of the private subtype created by the instantiation, which is not correct: partial and full views of a given (sub)type must point to the same freeze node, if any. The patch also adds an assertion checking this property in the front-end so as to catch the inconsistency higher in the chain. 2018-12-03 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * freeze.adb (Freeze_Entity): Do not freeze the partial view of a private subtype if its base type is also private with delayed freeze before the full type declaration of the base type has been seen. * sem_ch7.adb (Preserve_Full_Attributes): Add assertion on freeze node. gcc/testsuite/ * gnat.dg/generic_inst2.adb, gnat.dg/generic_inst2.ads, gnat.dg/generic_inst2_c.ads: New testcase. From-SVN: r266754
2018-12-03[Ada] Fix problematic overloading of operator in Ada 95 modeEric Botcazou2-1/+6
The change reverts the test deciding whether an initialization procedure can be inherited from parent to derived type to the original implementation, which allowed inheriting a null procedure. This prevents the creation of another null initialization procedure for the derived type, which in turn can avoid an artificial overloading which can wreak havoc in the analysis of private declarations of a package. 2018-12-03 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * exp_ch3.adb (Build_Record_Init_Proc): Inherit an initialization procedure if it is present, even if it is null. gcc/testsuite/ * gnat.dg/overload2.adb, gnat.dg/overload2_p.adb, gnat.dg/overload2_p.ads, gnat.dg/overload2_q.adb, gnat.dg/overload2_q.ads: New testcase. From-SVN: r266753
2018-12-03[Ada] A task not executing an entry call consumes an Entry_Call slotPatrick Bernardi14-52/+135
This patch resolves the issue where the ATC Level of a task's first Entry_Call slot corresponds to a task not currently making an entry call. Consequently, the first slot is never used to record an entry call. To resolve this, the ATC Level of a such a task is now one less than the first index of the Entry_Call array (and as result, the ATC level corresponding to a completed task is now two less than the first index of this array). To aid the maintainability of code using ATC levels new constants are introduced to represent key ATC nesting levels and comments are introduce for the ATC level definitions. As a result of this change, the GNAT Extended Ravenscar Profile now works with the full runtime. The restricted runtime had assumed that the first Entry_Call slot would be the only slot used for entry calls and would only initialise this slot (and System.Tasking.Protected_Objects.Single_Entry was coded this way). However, Extended Ravenscar uses the native implementation of System.Tasking.Protected_Objects where this assumption doesn't hold until the implementation of this patch. Aside from enabling an extra nested level, this is main functional change of this patch. The following should compile and execute quietly: gprbuild -q main.adb ./main -- main.adb pragma Profile (GNAT_Extended_Ravenscar); pragma Partition_Elaboration_Policy (Sequential); with Tasks; with GNAT.OS_Lib; with Ada.Synchronous_Task_Control; procedure Main is pragma Priority (30); begin Ada.Synchronous_Task_Control.Suspend_Until_True (Tasks.A_SO); Ada.Synchronous_Task_Control.Suspend_Until_True (Tasks.B_SO); GNAT.OS_Lib.OS_Exit (0); end Main; -- tasks.ads with Ada.Synchronous_Task_Control; package Tasks is A_SO : Ada.Synchronous_Task_Control.Suspension_Object; B_SO : Ada.Synchronous_Task_Control.Suspension_Object; task A with Priority => 25; task B with Priority => 20; end Tasks; -- tasks.adb with Obj; package body Tasks is task body A is begin for J in 1 .. 5 loop Obj.PO.Wait; end loop; Ada.Synchronous_Task_Control.Set_True (Tasks.A_SO); end A; task body B is begin for J in 1 .. 5 loop Obj.PO.Put; end loop; Ada.Synchronous_Task_Control.Set_True (Tasks.B_SO); end B; end Tasks; -- obj.ads package Obj is protected type PT is pragma Priority (30); entry Put; entry Wait; private Wait_Ready : Boolean := False; Put_Ready : Boolean := True; end PT; PO : PT; end Obj; -- obj.adb package body Obj is protected body PT is entry Put when Put_Ready is begin Wait_Ready := True; Put_Ready := False; end Put; entry Wait when Wait_Ready is begin Wait_Ready := False; Put_Ready := True; end Wait; end PT; end Obj; 2018-12-03 Patrick Bernardi <bernardi@adacore.com> gcc/ada/ * libgnarl/s-taskin.ads (ATC_Level_Base): Redefine to span from -1 to Max_ATC_Nesting so that 0 represents no ATC nesting and -1 represented a completed task. To increase readability, new constants are introduced to represent key ATC nesting levels. Consequently, Level_No_Pending_Abort replaces ATC_Level_Infinity. ATC_Level related definitions now documented. (Ada_Task_Control_Block): The default initialization of components ATC_Nesting_Level and Pending_ATC_Level now use new ATC_Level_Base constants. Comments improved * libgnarl/s-taskin.adb (Initialize): Improve the initialisation of the first element of the Entry_Calls array to facilitate better maintenance. * libgnarl/s-taasde.ads: Update comment. * libgnarl/s-taasde.adb, libgnarl/s-taenca.adb, libgnarl/s-tasren.adb, libgnarl/s-tassta.adb, libgnarl/s-tasuti.ads, libgnarl/s-tasuti.adb: Use new ATC_Level_Base constants. * libgnarl/s-tarest.adb (Create_Restricted_Task): Improve the initialisation of the first element of the task's Entry_Calls array to facilitate better maintenance. * libgnarl/s-tasini.ads (Locked_Abort_To_Level): Update signature to accept ATC_Level_Base. * libgnarl/s-tasini.adb (Locked_Abort_To_Level): Update signature to accept ATC_Level_Base. Use new ATC_Level_Base constants and only modify the aborting task's Entry_Calls array if any entry call is happening. * libgnarl/s-tposen.adb (Protected_Single_Entry_Call): Reference the first element of the task's Entry_Calls array via 'First attribute to facilitate better maintenance. From-SVN: r266752
2018-12-03[Ada] Fix assertion failures with -gnatde and -gnatdvEric Botcazou4-5/+18
This fixes a couple of assertion failures when using -gnatde and -gnatdv on a compiler built with assertions enabled. No functional changes. 2018-12-03 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * einfo.adb (Write_Entity_Info): Don't take Scope of Standard package. * sem_ch4.adb (Remove_Abstract_Operations): Add missing blank lines to -gnatdv output. * sem_type.adb (Write_Overloads): Take Entity of entity names only. From-SVN: r266751
2018-12-03[Ada] Minor reformattingsHristian Kirtchev12-53/+68
2018-12-03 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * checks.adb, exp_aggr.adb, exp_attr.adb, exp_ch3.adb, exp_util.adb, exp_util.ads, repinfo.adb, sem_attr.adb, sem_ch3.adb, sem_res.adb, sem_util.adb: Minor reformatting. From-SVN: r266750
2018-12-03[Ada] Enhance commentEd Schonberg2-0/+7
2018-12-03 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch3.adb (Complete_Private_Subtype): Enhance comment. From-SVN: r266749
2018-12-03[Ada] Gigi support for OpenACC pragmasOlivier Hainque4-20/+739
Matching front-end bits to support Acc_Kernels, Acc_Parallel, Acc_Loop and Acc_Data. 2018-12-03 Olivier Hainque <hainque@adacore.com> gcc/ada/ * gcc-interface/lang.opt (fopenacc): New option for Ada. * gcc-interface/misc.c (gnat_handle_option): Handle it. * gcc-interface/trans.c (struct loop_info_d): Add OMP attributes. (Iterate_Acc_Clause_Arg, Acc_gnat_to_gnu): New functions, helpers for OpenACC pragmas processing in Pragma_to_gnu. (Acc_Var_to_gnu, Acc_Reduc_Var_to_gnu, Acc_Reduc_to_gnu): Likewise. (Acc_Size_Expr_to_gnu, Acc_Size_List_to_gnu): Likewise. (Pragma_Acc_Data_to_gnu): Likewise. (Pragma_to_gnu): Handle Pragma_Acc_Loop, Pragma_Acc_Data, Pragma_Acc_Kernels and Pragma_Acc_Parallel. (Acc_Loop_to_gnu, Regular_Loop_to_gnu): New functions. Helpers for ... (Loop_Statement_to_gnu): Rework to handle OpenACC loops. From-SVN: r266748
2018-12-03[Ada] Adjust the default MALLOC_OBSERVABLE_ALIGNMENT to 2 * POINTER_SIZEOlivier Hainque2-2/+7
Instead of 2 * LONG_TYPE_SIZE. POINTER_SIZE is believed to be the correct base on more configurations than LONG_TYPE_SIZE and this adjustment prevents the need for local patches to compensate on configurations where the latter is inappropriate, for example x86_64-mingw. 2018-12-03 Olivier Hainque <hainque@adacore.com> gcc/ada/ * gcc-interface/targtyps.c (MALLOC_OBSERVABLE_ALIGNMENT): Set to 2 * POINTER_SIZE. From-SVN: r266747
2018-12-03[Ada] Missing check on if-expressionEd Schonberg2-5/+11
This patch fixes a constraint check on a dependent expression of an if-expression, when the context if given by a slice or the 'Range of an array. The constraint check is applied if the context is constrained, but the corresponding flag was not set for the index subtype generated for a slice (explicit or implicit). Executing: gprbuild -P test -q main ./main Must yield: raised CONSTRAINT_ERROR : foo.ads:13 range check failed ---- with Types; generic Buffer : in out Types.Buffer; package Foo is function Get (Pos : Natural) return Integer; private function Get (Pos : Natural) return Integer is (Buffer ((if Pos in Buffer'Range then Pos else Buffer'First))); end Foo; ---- with Foo; with Types; with Usefoo; procedure Main is Z : Types.Buffer := (Natural'Last .. Natural'Last - 1 => 0); R : Integer; begin Usefoo.Do_Something (Z, R); end Main; ---- pragma SPARK_Mode (On); pragma Profile (Ravenscar); pragma Partition_Elaboration_Policy (Sequential); ---- project Test is package Compiler is for Default_Switches ("Ada") use ("-gnatws"); for Local_Configuration_Pragmas use "test.adc"; end Compiler; end Test; ---- package Types is subtype Natural_Without_Last is Natural range 1 .. Natural'Last - 1; type Buffer is array (Natural_Without_Last range <>) of Integer; end Types; ---- with Foo; package body Usefoo is procedure Do_Something (B : in out Types.Buffer; R : out Integer) is package F is new Foo (B (B'First .. B'First + B'Length / 2 - 1)); begin R := F.Get (B'First + B'Length / 2 - 1); end Do_Something; end Usefoo; ---- with Types; package Usefoo is procedure Do_Something (B : in out Types.Buffer; R : out Integer) with Pre => B'First > 0; end Usefoo; 2018-12-03 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_res.adb (Set_Slice_Subtype): The index type of a slice is constrained. From-SVN: r266746
2018-11-26re PR ada/88191 (ada bootstrap failure on alpha-linux-gnu ("SIGSYS" not ↵Matthias Klose2-0/+6
declared in "Linux")) 2018-11-26 Matthias Klose <doko@ubuntu.com> PR ada/88191 * libgnarl/s-linux__alpha.ads: Define SIGSYS. From-SVN: r266459
2018-11-20PR81878: fix --disable-bootstrap --enable-languages=adaAlexandre Oliva2-0/+15
gnattools build machinery uses just-build xgcc and xg++ as $(CC) and $(CXX) in native builds. However, if C and C++ languages are not enabled, it won't find them. So, enable C and C++ if Ada is enabled. Most of the time, this is probably no big deal: C is always enabled anyway, and C++ is already enabled for bootstraps. We need not enable those for cross builds, however. At first I just took the logic from gnattools/configure, but found it to be lacking: it would use the just-built tools even in cross-back settings, whose tools just built for the host would not run on the build machine. So I've narrowed down the test to rely on autoconf-detected cross-ness (build->host only), but also to ensure that host matches build, and that target matches host. I've considered sourcing ada/config-lang.in from within gnattools/configure, and testing lang_requires as set by it, so as to avoid a duplication of tests that ought to remain in sync, but decided it would be too fragile, as ada/config-lang.in does not expect srcdir to refer to gnattools. for gcc/ada/ChangeLog PR ada/81878 * gcc-interface/config-lang.in (lang_requires): Set to "c c++" when gnattools wants it. for gnattools/ChangeLog PR ada/81878 * configure.ac (default_gnattools_target): Do not mistake just-built host tools as native in cross-back toolchains. * configure: Rebuilt. From-SVN: r266290
2018-11-19Bump copyright yearEric Botcazou1-1/+1
From-SVN: r266266
2018-11-19* gcc-interface/cuintp.c (UI_From_gnu): Remove code for 32-bit hosts.Eric Botcazou2-23/+17
From-SVN: r266265
2018-11-15misc.c (gnat_init_gcc_eh): Do not override the switch -fnon-call-exceptions ↵Eric Botcazou2-1/+9
passed on the command line in... * gcc-interface/misc.c (gnat_init_gcc_eh): Do not override the switch -fnon-call-exceptions passed on the command line in -gnatp mode. From-SVN: r266176
2018-11-14[Ada] Problem with boundary case of XOR operation and unnestingEd Schonberg5-13/+41
The XOR operation applied to a boolean array whose component type has the range True .. True raises constraint error. Previous to this patch, the expansion of the operation could lead to uplevel references that were not handled properly when unnesting is in effect. 2018-11-14 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * exp_util.ads, exp_util.adb: Change the profile of Silly_Boolean_Array_Xor_Test, adding a formal that can be a copy of the right opersnd. This prevents unnesting anomalies when that operand contains uplevel references. * exp_ch4.adb (Expand_Boolean_Operation): Use this new profile. * exp_pakd.adb (Expand_Packed_Boolean_Operator): Ditto. From-SVN: r266137
2018-11-14[Ada] Update signal constants for GNU/LinuxPatrick Bernardi11-63/+83
Add the signal SIGSYS and mark the glibc reserved real-time signals (32-34) as reserved rather than not maskable. 2018-11-14 Patrick Bernardi <bernardi@adacore.com> gcc/ada/ * libgnarl/a-intnam__linux.ads: Add SIGSYS. * libgnarl/s-linux__alpha.ads, libgnarl/s-linux__android.ads, libgnarl/s-linux__hppa.ads, libgnarl/s-linux__mips.ads, libgnarl/s-linux__riscv.ads, libgnarl/s-linux__sparc.ads, libgnarl/s-linux__x32.ads: Rename SIGLTHRRES, SIGLTHRCAN and SIGLTHRDBG to SIG32, SIG33 and SIG34 as their names are implementation specific. * libgnarl/s-osinte__linux.ads, libgnarl/s-linux.ads: Add SIGSYS. Move SIG32, SIG33 and SIG34 from the unmasked list to the reserved list. gcc/testsuite/ * gnat.dg/rt_signals.adb: New testcase. From-SVN: r266136
2018-11-14[Ada] Fix small regression with others choice in array aggregateEric Botcazou2-32/+69
This change is aimed at fixing a fallout of bumping the default value of the Max_Others_Replicate parameter of the Convert_To_Positional routine. This parameter is responsible for taming the duplication of the expression of an others choice in an array aggregate so that it doesn't result in a code size explosion. Unfortunately a fine-grained control based on the analysis of the expression is not really possible because this analysis has not been done yet by the time the decision is made in most cases, so the usual syntactic ambiguities of the language come into play and make the process a bit cumbersome. For example, it is not possible to distinguish a simple reference to a static constant declared in another unit from a call to a parameterless function. Therefore the change errs on the side of caution and allows the duplication only if the expression is unambiguously static and sufficiently simple. For the following three aggregates, the duplication must be blocked and the elaboration of the aggregates must be done by means of a loop: with Q; use Q; procedure P is A : Arr := (others => Get_Value); B : Arr := (others => Get_Other_Value (0)); C : Arr := (others => Q.Get_Other_Value (1)); begin null; end; package Q is type Arr is array (1 .. 32) of Integer; function Get_Value return Integer; function Get_Other_Value (I : integer) return Integer; end Q; 2018-11-14 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * exp_aggr.adb (Is_Static_Element): New predicate extracted from... (Check_Static_Components): ...here. Call Is_Static_Element on each element of the component association list, if any. (Flatten): Duplicate the expression of an others choice only if it is static or is an aggregate which can itself be flattened. From-SVN: r266135
2018-11-14[Ada] sigtramp-vxworks: Add a rule for sp (DWARF r31) on AArch64Olivier Hainque2-0/+7
2018-11-14 Olivier Hainque <hainque@adacore.com> gcc/ada/ * sigtramp-vxworks-target.inc: Fix stack checking test errors in ACATS, now that GCC can emit CFI rules referring to sp in absence of a frame pointer. From-SVN: r266134
2018-11-14[Ada] Remove couple of recently added dead testsEric Botcazou2-8/+11
N_Quantified_Expression and N_Iterated_Component_Association are unrelated nodes that cannot appear in the same context: the former can appear wherever an expression node is acceptable whereas the latter can appear only as an element of a component association list. So a test combining both most likely contains a dead arm and this change removes a couple of them. No functional changes. 2018-11-14 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * exp_aggr.adb (Check_Static_Components): Remove dead test. (Flatten): Likewise. Move comment around. From-SVN: r266133
2018-11-14[Ada] Spurious error on Ghost null procedureHristian Kirtchev2-11/+43
This patch modifies the analysis (which is really expansion) of null procedures to set the Ghost mode of the spec when the null procedure acts as a completion. This ensures that all nodes and entities generated by the expansion are marked as Ghost, and provide a proper context for references to Ghost entities. 2018-11-14 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * sem_ch6.adb (Analyze_Null_Procedure): Capture Ghost and SPARK-related global state at the start of the routine. Set the Ghost mode of the completed spec if any. Restore the saved Ghost and SPARK-related global state on exit from the routine. gcc/testsuite/ * gnat.dg/ghost1.adb, gnat.dg/ghost1.ads: New testcase. From-SVN: r266132
2018-11-14[Ada] More complete information level for -gnatR outputEric Botcazou8-36/+108
This adds a 4th information level for the -gnatR output, where relevant compiler-generated types are listed in addition to the information already output by -gnatR3. For the following package P: package P is type Arr0 is array (Positive range <>) of Boolean; type Rec (D1 : Positive; D2 : Boolean) is record C1 : Integer; C2 : Arr0 (1 .. D1); case D2 is when False => C3 : Character; when True => C4 : String (1 .. 3); C5 : Float; end case; end record; type Arr1 is array (1 .. 8) of Rec (1, True); end P; the output generated by -gnatR4 must be: Representation information for unit P (spec) -------------------------------------------- for Arr0'Alignment use 1; for Arr0'Component_Size use 8; for Rec'Object_Size use 17179869344; for Rec'Value_Size use (if (#2 != 0) then ((((#1 + 15) & -4) + 8) * 8) else ((((#1 + 15) & -4) + 1) * 8) end); for Rec'Alignment use 4; for Rec use record D1 at 0 range 0 .. 31; D2 at 4 range 0 .. 7; C1 at 8 range 0 .. 31; C2 at 12 range 0 .. ((#1 * 8)) - 1; C3 at ((#1 + 15) & -4) range 0 .. 7; C4 at ((#1 + 15) & -4) range 0 .. 23; C5 at (((#1 + 15) & -4) + 4) range 0 .. 31; end record; for Arr1'Size use 1536; for Arr1'Alignment use 4; for Arr1'Component_Size use 192; for Tarr1c'Size use 192; for Tarr1c'Alignment use 4; for Tarr1c use record D1 at 0 range 0 .. 31; D2 at 4 range 0 .. 7; C1 at 8 range 0 .. 31; C2 at 12 range 0 .. 7; C4 at 16 range 0 .. 23; C5 at 20 range 0 .. 31; end record; 2018-11-14 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst (-gnatR): Document new -gnatR4 level. * gnat_ugn.texi: Regenerate. * opt.ads (List_Representation_Info): Bump upper bound to 4. * repinfo.adb: Add with clause for GNAT.HTable. (Relevant_Entities_Size): New constant. (Entity_Header_Num): New type. (Entity_Hash): New function. (Relevant_Entities): New set implemented with GNAT.HTable. (List_Entities): Also list compiled-generated entities present in the Relevant_Entities set. Consider that the Component_Type of an array type is relevant. (List_Rep_Info): Reset Relevant_Entities for each unit. * switch-c.adb (Scan_Front_End_Switches): Add support for -gnatR4. * switch-m.adb (Normalize_Compiler_Switches): Likewise * usage.adb (Usage): Likewise. From-SVN: r266131
2018-11-14[Ada] Crash on interface equality covered by a renaming declarationJavier Miranda2-9/+19
The frontend crashes processing a tagged type that implements an interface which has an equality primitive (that is, "=") and covers such primitive by means of a renaming declaration. 2018-11-14 Javier Miranda <miranda@adacore.com> gcc/ada/ * exp_disp.adb (Expand_Interface_Thunk): Extend handling of renamings of the predefined equality primitive. (Make_Secondary_DT): When calling Expand_Interface_Thunk() pass it the primitive, instead of its Ultimate_Alias; required to allow the called routine to identify renamings of the predefined equality operation. gcc/testsuite/ * gnat.dg/equal5.adb, gnat.dg/equal5.ads: New testcase. From-SVN: r266130
2018-11-14[Ada] Use of Suppress_Initialization with pragma Thread_Local_StorageHristian Kirtchev2-33/+73
This patch allows for aspect/pragma Suppress_Initialization to be an acceptable form of missing initialization with respect to the semantics of pragma Thread_Local_Storage. ------------ -- Source -- ------------ -- gnat.adc pragma Initialize_Scalars; -- pack.ads with System; package Pack is Addr : System.Address with Thread_Local_Storage, Suppress_Initialization; end Pack; ----------------- -- Compilation -- ----------------- $ gcc -c pack.ads 2018-11-14 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * freeze.adb (Check_Pragma_Thread_Local_Storage): New routine. A variable with suppressed initialization has no initialization for purposes of the pragma. (Freeze_Object_Declaration): Remove variable Has_Default_Initialization as it is no longer used. Use routine Check_Pragma_Thread_Local_Storage to verify the semantics of pragma Thread_Local_Storage. From-SVN: r266129
2018-11-14[Ada] Missing constraint check on if-expression returning a stringEd Schonberg2-19/+41
If the context of an if-expression is constrained, its dependent expressions must obey the constraints of the expected type. Prior to this patch, this check was performed only for scalar types, by means of an added conversion. This is now enforced on all types by means of a qualified expression on each dependent expression. Compiling ce.adb must yield: ce.adb:33:21: warning: string length wrong for type "T" defined at line 5 ce.adb:33:21: warning: "Constraint_Error" will be raised at run time ce.adb:37:39: warning: string length wrong for type "T" defined at line 5 ce.adb:37:39: warning: "Constraint_Error" will be raised at run time ce.adb:38:39: warning: too few elements for type "T" defined at line 5 ce.adb:38:39: warning: "Constraint_Error" will be raised at run time ce.adb:39:39: warning: too few elements for type "T" defined at line 5 ce.adb:39:39: warning: "Constraint_Error" will be raised at run time ---- with Text_IO; procedure Ce is package Aerodrome_Identifier is subtype T is String (1 .. 4); end; package Flight_Identifier is type T is record ADEP : Aerodrome_Identifier.T; Counter : Positive; end record; end; procedure Assign (X : Flight_Identifier.T) is begin Text_IO.Put_Line (X.ADEP); -- outputs the 4 zero bytes end; function Env_Aerodrome_Value return String is ("ABCD"); function Void return String is ("What?"); function Void2 return String is begin return "who knows"; end; Here : Aerodrome_Identifier.T; type Four is range 1 .. 4; Nothing : String := ""; begin Assign((ADEP => (if (Void'Length = 5) then "" --!! This value should always raise Constraint_Error !! else Env_Aerodrome_Value & "!"), Counter=> 17)); Here := (if (Void'Length = 5) then "" else Env_Aerodrome_Value); Here := (if (Void'Length = 5) then Nothing else Env_Aerodrome_Value); Here := (if (Void'Length = 5) then Void2 (1..3) else Void2 & Void); end; ---- 2018-11-14 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_res.adb (Resolve_If_Expression): Verify that the subtypes of all dependent expressions obey the constraints of the expected type for the if-expression. (Analyze_Expression): Only add qualificiation to the dependent expressions when the context type is constrained. Small adjustment to previous patch. From-SVN: r266128
2018-11-14[Ada] Fix assertion failure on pragma Compile_Time_Error in generic unitEric Botcazou2-0/+7
There is no point in validating 'Alignment or 'Size of an entity declared in a generic unit after the back-end has been run, since such an entity is not passed to the back-end, and this can even lead to an assertion failure. 2018-11-14 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Don't register a compile-time warning or error for 'Alignment or 'Size of an entity declared in a generic unit. gcc/testsuite/ * gnat.dg/compile_time_error1.adb, gnat.dg/compile_time_error1.ads, gnat.dg/compile_time_error1_pkg.ads: New testcase. From-SVN: r266127
2018-11-14[Ada] Crash on use of generic formal packageJustin Squirek2-0/+10
This patch fixes an issue whereby a complicated set of generic formal packages in conjunction with use_clauses may cause a crash during visibility checking due to a homonym being out of scope during the checking stage. 2018-11-14 Justin Squirek <squirek@adacore.com> gcc/ada/ * sem_ch8.adb (Use_One_Package): Add test for out-of-scope homonyms. gcc/testsuite/ * gnat.dg/generic_pkg.adb: New testcase. From-SVN: r266126
2018-11-14[Ada] Compiler crash on decl. with limited aggregate and address clauseEd Schonberg3-1/+29
This patch fixes a compiler abort on an object declaration whose expression is an aggregate, when the type of the object is limited and the declaration is followed by an address clause for the declared object. 2018-11-14 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * exp_ch3.adb: (Expand_N_Object_Declaration): If the expression is a limited aggregate its resolution is delayed until the object declaration is expanded. * sem_ch3.adb: (Analyze_Object_Declaration): If the expression is a limited aggregate and the declaration has a following address clause indicate that resolution of the aggregate (which must be built in place) must be delayed. gcc/testsuite/ * gnat.dg/limited_aggr.adb, gnat.dg/limited_aggr.ads: New testcase. From-SVN: r266125
2018-11-14[Ada] System'To_Address not always staticBob Duff6-104/+90
System'To_Address is supposed to be static when its parameter is static. This patch fixes a bug in which it is considered nonstatic when used as the initial value of a variable with the Thread_Local_Storage aspect, so the compiler incorrectly gives an error when initializing such a variable with System'To_Address (0). 2018-11-14 Bob Duff <duff@adacore.com> gcc/ada/ * sem_attr.adb (To_Address): Simplify setting of Is_Static_Expression. Remove second (unconditional) call to Set_Is_Static_Expression -- surely it's not static if the operand is not. Initialize Static on declaration. Do not try to fold 'To_Address, even though it's static. * exp_attr.adb (To_Address): Preserve Is_Static_Expression. * sinfo.ads, sem_eval.ads, sem_eval.adb (Is_Static_Expression, Is_OK_Static_Expression, Raises_Constraint_Error): Simplify documentation. There was too much repetition and redundancy. From-SVN: r266124
2018-11-14[Ada] Enhance constraints propagation to ease the work of optimizersEd Schonberg3-9/+48
This patch recognizes additional object declarations whose defining identifier is known statically to be valid. This allows additional optimizations to be performed by the front-end. Executing: gcc -c -gnatDG p.ads On the following sources: ---- with G; With Q; package P is Val : constant Positive := Q.Config_Value ("Size"); package My_G is new G (Val); end P; ---- generic Num : Natural := 0; package G is Multi : constant Boolean := Num > 0; type Info is array (True .. Multi) of Integer; type Arr is array (Natural range <>) of Boolean; type Rec (D : Natural) is record C : character; I : Info; E : Arr (0 .. D); end record; end G; ---- package Q is function Config_Value (S : String) return Integer; end Q; ---- Must yield (note that variable Multi has been statically optimized to true): ---- with g; with q; p_E : short_integer := 0; package p is p__R2s : constant integer := q.q__config_value ("Size"); [constraint_error when not (p__R2s >= 1) "range check failed"] p__val : constant positive := p__R2s; package p__my_g is p__my_g__num : constant natural := p__val; package p__my_g__g renames p__my_g; package p__my_g__gGH renames p__my_g__g; p__my_g__multi : constant boolean := true; type p__my_g__info is array (true .. p__my_g__multi) of integer; type p__my_g__arr is array (0 .. 16#7FFF_FFFF# range <>) of boolean; type p__my_g__rec (d : natural) is record c : character; i : p__my_g__info; e : p__my_g__arr (0 .. d); end record; [type p__my_g__TinfoB is array (true .. p__my_g__multi range <>) of integer] freeze p__my_g__TinfoB [ procedure p__my_g__TinfoBIP (_init : in out p__my_g__TinfoB) is begin null; return; end p__my_g__TinfoBIP; ] freeze p__my_g__info [] freeze p__my_g__arr [ procedure p__my_g__arrIP (_init : in out p__my_g__arr) is begin null; return; end p__my_g__arrIP; ] freeze p__my_g__rec [ procedure p__my_g__recIP (_init : in out p__my_g__rec; d : natural) is begin _init.d := d; null; return; end p__my_g__recIP; ] end p__my_g; package my_g is new g (p__val); end p; freeze_generic info [subtype TinfoD1 is boolean range true .. multi] freeze_generic TinfoD1 [type TinfoB is array (true .. multi range <>) of integer] freeze_generic TinfoB freeze_generic arr freeze_generic rec ---- 2018-11-14 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch3.adb (Analyze_Object_Declaration): Use the Actual_Subtype to preserve information about a constant initialized with a non-static entity that is known to be valid, when the type of the entity has a narrower range than that of the nominal subtype of the constant. * checks.adb (Determine_Range): If the expression is a constant entity that is known-valid and has a defined Actual_Subtype, use it to determine the actual bounds of the value, to enable additional optimizations. From-SVN: r266123
2018-11-14[Ada] Minor reformattingHristian Kirtchev16-104/+105
2018-11-14 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * back_end.adb, checks.adb, exp_ch3.adb, exp_ch4.adb, exp_ch7.adb, exp_disp.adb, exp_unst.adb, exp_util.adb, freeze.adb, sem_ch13.adb, sem_ch6.adb, sem_ch7.adb, sem_prag.adb, sem_spark.adb, sem_util.adb: Minor reformatting. From-SVN: r266122
2018-11-14[Ada] Renamed equality leads to spurious errorsHristian Kirtchev2-29/+74
The following patch corrects the search for the equality function to handle cases where the equality could be a renaming of another routine. No simple reproducer possible because this requires PolyORB. 2018-11-14 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * exp_ch4.adb (Find_Aliased_Equality): New routine. (Find_Equality): Reimplemented. (Is_Equality): New routine. From-SVN: r266121
2018-11-14[Ada] Crash on ignored Ghost assignmentHristian Kirtchev7-130/+224
This patch modifies the way analysis determine whether an assignment is an ignored Ghost assignment. This is now achieved by preanalyzing a copy of the left hand side in order to account for potential code generated by the left hand side itself. No small reproducer possible. 2018-11-14 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * ghost.adb (Ghost_Entity): New routine. (Mark_And_Set_Ghost_Assignment): Reimplemented. * sem_ch5.adb (Analyze_Assignment): Assess whether the target of the assignment is an ignored Ghost entity before analyzing the left hand side. * sem_ch8.adb (Find_Direct_Name): Update the subprogram signature. Do not generate markers and references when they are not desired. (Nvis_Messages): Do not execute when errors are not desired. (Undefined): Do not emit errors when they are not desired. * sem_ch8.ads (Find_Direct_Name): Update the subprogram signature and comment on usage. * sem_util.adb (Ultimate_Prefix): New routine. * sem_util.ads (Ultimate_Prefix): New routine. From-SVN: r266120
2018-11-14[Ada] Visibility error on used enumerated typeJustin Squirek2-2/+19
This patch fixes an issue whereby the freezing of a nested package containing an enumerated type declaration would cause visibility errors on literals of such type when a use_all_type_clause for it appears within the same declarative region. 2018-11-14 Justin Squirek <squirek@adacore.com> gcc/ada/ * sem_ch7.adb (Uninstall_Declarations): Add conditional to avoid uninstalling potential visibility during freezing on enumeration literals. gcc/testsuite/ * gnat.dg/enum5.adb: New testcase. From-SVN: r266119
2018-11-14[Ada] Do not include crt_externs.h on iOSJerome Lambourg2-3/+14
2018-11-14 Jerome Lambourg <lambourg@adacore.com> gcc/ada/ * env.c: Do not include crt_externs.h on iOS, as it does not exist there. This is also true for the iPhone Simulator SDK. From-SVN: r266118
2018-11-14[Ada] Unnesting transformations for blocks in package bodiesEd Schonberg2-0/+83
The declarations in the package body may have created blocks with nested subprograms. Such a block must be transformed into a procedure followed by a call to it, so that unnesting can handle uplevel references within these nested subprograms (typically generated subprograms to handle finalization actions). 2018-11-14 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * exp_ch7.adb (Check_Unnesting_In_Declarations): New procedure to transform blocks that appear in the declarative part of a package body into subprograms if they contain generated subprograms (such as finalization routines). Needed to generate the proper upward references in unnesting mode. From-SVN: r266117
2018-11-14[Ada] Improper extension of bounds of fixed-point typeEd Schonberg2-3/+12
If the given Delta of an ordinariy fixed-point type is not a machine number and there is no specified 'Small for the type, the compiler chooses the actual bounds of the type using the nearest model numbers that include the given bounds, but it is free to exclude those bounds if a size clause restricts the number of bits to use for the type. This patch fixes an error in the case where the bounds of the type can be chosen to be larger than the bounds specified in the type declaration: prior to this patch the lower bounds could be chosen to be one delta smaller that the given bound, when that given bound was smaller than the nearest machine number, Compiling rep2.adb must yield: rep2.adb:7:24: warning: value not in range of type "Test_Type" defined at line 4 rep2.adb:7:24: warning: "Constraint_Error" will be raised at run time ---- with Ada.Text_IO; use Ada.Text_IO; procedure Rep2 is type Test_Type is delta 0.1 range 0.1 .. 100.0 with Size => 16; subtype Next_Type is Test_Type range 0.1 .. 100.0; Item : Test_Type := 0.0; -- Why is this allowed? Next : Next_Type with Address => Item'Address; begin Put_Line (Item'Img & " - " & Item'Valid'Img); -- Returns "0.0 - TRUE" Put_Line (Next'Img & " - " & Next'Valid'Img); -- Returns "0.0 - FALSE" end Rep2; 2018-11-14 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * freeze.adb (Freeze_Fixed_Point_Type): If the given low bound of the type is less than the nearest model number, do not expand the range of the type to include the model number below the bound. Similar adjustment if the upper bound is larger than the nearest model number. From-SVN: r266116
2018-11-14[Ada] Limited function violates No_Exception_PropagationHristian Kirtchev6-19/+49
This patch suppresses the generation of raise statements in the context of build-in-place and elaboration checks for primitives of tagged types when exceptions cannot be used. 2018-11-14 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * checks.adb (Install_Primitive_Elaboration_Check): Do not create the check when exceptions cannot be used. * exp_ch6.adb (Expand_N_Extended_Return_Statement): Do not raise Program_Errror when exceptions cannot be used. Analyze the generated code with all checks suppressed. * exp_ch7.adb (Build_Finalizer): Remove the declaration of Exceptions_OK. (Make_Deep_Array_Body): Remove the declaration of Exceptions_OK. (Make_Deep_Record_Body): Remove the declaration of Exceptions_OK. (Process_Transients_In_Scope): Remove the declaration of Exceptions_OK. * exp_util.adb (Exceptions_In_Finalization_OK): Renamed to Exceptions_OK. * exp_util.ads (Exceptions_In_Finalization_OK): Renamed to Exceptions_OK. gcc/testsuite/ * gnat.dg/bip_exception.adb, gnat.dg/bip_exception.ads, gnat.dg/bip_exception_pkg.ads: New testcase. From-SVN: r266115
2018-11-14[Ada] Crash on tagged equalityHristian Kirtchev2-59/+84
This patch corrects the retrieval of the equality function when it is inherited from a parent tagged type. 2018-11-14 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * exp_ch4.adb (Expand_N_Op_Eq): Remove duplicated code and use routine Find_Equality instead. (Find_Equality): New routine. gcc/testsuite/ * gnat.dg/equal4.adb, gnat.dg/equal4.ads, gnat.dg/equal4_controlled_filter.ads, gnat.dg/equal4_full_selector_filter.ads, gnat.dg/equal4_smart_pointers.ads: New testcase. From-SVN: r266114
2018-11-14[Ada] Record components do not appear in the Global contractPiotr Trojanek2-6/+11
In the Global contract there can be only entire objects, which are represented either as N_Identifier or N_Expanded_Name. The test for record components was dead. Now removed. Semantics unaffected. 2018-11-14 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * sem_util.adb (First_From_Global_List): Do not expect N_Selected_Component in the Global contract; simplify assertion with Nam_In. From-SVN: r266113
2018-11-14[Ada] Fix handling of generic actuals with default expression in SPARKPiotr Trojanek3-3/+15
Both in the GNAT frontend and in the GNATprove backend we have several checks related to generic actuals of mode IN that rely on the Corresponding_Generic_Association flag. However, this flag was only set for actuals with explicit expressions from the generic instance and unset for actuals with implicit expressions from the generic unit. For example, the code from the added testcase was wrongly rejected with a message that Y (which is an actual with a default expression) cannot appear in the Initializes contract. Now this code is accepted. 2018-11-14 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * sem_ch12.adb (Instantiate_Object): Set Corresponding_Generic_Association on generic actuals with default expression. * sinfo.ads (Corresponding_Generic_Association): Update comment. gcc/testsuite/ * gnat.dg/generic_actuals.adb: New testcase. From-SVN: r266112
2018-11-14[Ada] Lingering loop for ignored Ghost assignmentHristian Kirtchev7-16/+42
The following patch ensures that loops generated for aggregates as part of ignored Ghost assignments are correctly eliminated from the generated code. ------------ -- Source -- ------------ -- pack.ads package Pack is type addr4k is new Integer range 0 .. 100 with Size => 32; type Four_KB_Page_Property is record Is_Scrubbed : Boolean := False; end record with Ghost; type Four_KB_Page_Array is array (addr4k range <>) of Four_KB_Page_Property with Ghost; type Base_Memory is tagged record Four_KB_Pages : Four_KB_Page_Array (addr4k) := (others => (Is_Scrubbed => False)); end record with Ghost; subtype Memory is Base_Memory with Ghost; Global_Memory : Memory with Ghost; procedure Assign; end Pack; -- pack.adb package body Pack is procedure Assign is begin Global_Memory.Four_KB_Pages := (others => (Is_Scrubbed => True)); end Assign; end Pack; ---------------------------- -- Compilation and output -- ---------------------------- $ gcc -c -gnatDG pack.adb $ grep -c "loop" pack.adb.dg 0 2018-11-14 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * exp_ch4.adb (Expand_Concatenate): Use the proper routine to set the need for debug info. * exp_dbug.adb (Build_Subprogram_Instance_Renamings): Use the proper routine to set the need for debug info. * exp_prag.adb (Expand_Pragma_Initial_Condition): Use the proper routine to set the need for debug info. * exp_util.adb (Build_DIC_Procedure_Declaration): Use the proper routine to set the need for debug info. (Build_Invariant_Procedure_Declaration): Use the proper routine to set the need for debug info. * ghost.adb (Record_Ignored_Ghost_Node): Add statements as a whole class to the list of top level ignored Ghost nodes. * sem_util.adb (Set_Debug_Info_Needed): Do not generate debug info for an ignored Ghost entity. From-SVN: r266111
2018-11-14[Ada] Use Cancel_Special_Output instead of Set_Special_Output with nullPiotr Trojanek5-4/+9
I believe Cancel_Special_Output is easier to read and thus preferred; otherwise, it wouldn't be introduced, so let's use it where possible. 2018-11-14 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * bindgen.adb, exp_cg.adb, repinfo.adb, sprint.adb: Minor reuse Cancel_Special_Output where possible. From-SVN: r266110
2018-11-14[Ada] Fix parentheses in comments and "library-level" punctuationPiotr Trojanek3-4/+8
When acting as an adjective, it is "library-level something"; when acting as a noun, it is "something at the library level". 2018-11-14 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * exp_dbug.ads, sem_util.ads: Minor fixes in comments. From-SVN: r266109
2018-11-14[Ada] Handle -gx switches explicitlyArnaud Charlet2-0/+25
2018-11-14 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * adabkend.adb (Scan_Back_End_Switches): Handle -gx switches explicitly. From-SVN: r266108
2018-11-13misc.c (gnat_init_gcc_eh): Set -fnon-call-exceptions for the runtime on ↵Eric Botcazou2-2/+12
platforms where... * gcc-interface/misc.c (gnat_init_gcc_eh): Set -fnon-call-exceptions for the runtime on platforms where System.Machine_Overflow is true. From-SVN: r266057
2018-11-08fe.h (Suppress_Checks): Declare.Eric Botcazou4-54/+26
* fe.h (Suppress_Checks): Declare. * gcc-interface/misc.c (gnat_init_gcc_eh): Set -fnon-call-exceptions only if checks are not suppressed and -faggressive-loop-optimizations only if they are. * gcc-interface/trans.c (struct loop_info_d): Remove has_checks and warned_aggressive_loop_optimizations fields. (gigi): Do not clear warn_aggressive_loop_optimizations here. (Raise_Error_to_gnu): Do not set has_checks. (gnat_to_gnu) <N_Indexed_Component>: Remove support for aggressive loop optimizations. From-SVN: r265921
2018-11-08decl.c (components_to_record): Remove obsolete kludge.Eric Botcazou3-25/+29
* gcc-interface/decl.c (components_to_record): Remove obsolete kludge. * gcc-interface/utils.c (make_packable_type): Set TYPE_PACKED on the new type but do not take into account the setting on the old type for the new fields. Rename a local variable. (finish_record_type): Clear DECL_BIT_FIELD_TYPE on a variant part at offset 0, if any. (create_field_decl): Tweak comment. From-SVN: r265917
2018-10-22utils.c (unchecked_convert): Use local variables for the biased and reverse ↵Eric Botcazou2-35/+59
SSO attributes of both types. * gcc-interface/utils.c (unchecked_convert): Use local variables for the biased and reverse SSO attributes of both types. Further extend the processing of integral types in the presence of reverse SSO to all scalar types. From-SVN: r265381