This patch corrects the code generated by the -gnateV switch in the case
of a private type whose full type is a modular type, removing spurious
run-time failures.
In addition, this corrects the initialization of exception occurrences
in exception handlers to avoid leaving data uninitialized, which caused
-gnateV to raise spurious errors.
2019-08-19 Bob Duff <duff@adacore.com>
gcc/ada/
* exp_attr.adb (Attribute_Valid): Correct the handling of
private types where the full type is modular. System.Address is
an example. Otherwise, we convert uncheckedly to a signed type,
so we get an incorrect range 0 .. -1, for which all values will
fail. The 'Valid attribute is illegal for such types, but we
generate such illegal attribute_references for 'Valid_Scalars,
and we generate 'Valid_Scalars when the -gnateV switch is used.
Rename Btyp --> PBtyp to avoid hiding the outer Btyp, which was
confusing.
* libgnat/a-except.adb: Set the Exception_Raised component.
Otherwise, we have incorrect reads of invalid data.
gcc/testsuite/
* gnat.dg/valid_scalars2.adb: New testcase.
From-SVN: r274660
Generate target-dependent info into a file named ada_target_properties.
This information is used by tools for static analysis: they need to know
the size of standard types for a given run-time library. This metadata
is meant to be saved at the root of the run-time directory.
2019-08-19 Jerome Guitton <guitton@adacore.com>
gcc/ada/
* Makefile.rtl (system.o): New target to add generation of
target properties.
* gcc-interface/Makefile.in (install-gnatlib): Install
ada_target_properties.
From-SVN: r274658
This change lifts the restriction that was still present in the new
on-demand instantiation scheme for the body of generics instantiated in
non-main units.
The instantiations that are compilation units were still dealt with in
the old-fashioned way, that is to say the decision of instantiating the
body was still made up front during the analysis of the instance
declaration, instead of being deferred until after a call to an inlined
subprogram is encountered.
This should save a few more cycles when full inlining across units is
enabled, but there should otherwise be no functional changes.
2019-08-19 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* inline.adb (Add_Inlined_Body): Do not special-case instances
that are compilation units.
(Add_Pending_Instantiation): Likewise.
(Instantiate_Body): Skip instantiations that are compilation
units and have already been performed.
* sem_ch12.adb (Needs_Body_Instantiated): Do not special-case
instances that are compilation units.
(Load_Parent_Of_Generic): Be prepared for parent that is a
compilation unit but whose instantiation node has not been
replaced.
gcc/testsuite/
* gnat.dg/generic_inst12.adb, gnat.dg/generic_inst12_pkg1.adb,
gnat.dg/generic_inst12_pkg1.ads,
gnat.dg/generic_inst12_pkg2.ads: New testcase.
From-SVN: r274657
This patch refines the predicate that implements rule in RM 9.4 (11.9/2)
Compiling b94.ads must yield:
b94.ads:11:17: illegal overriding of subprogram inherited from interface
b94.ads:11:17: first formal of "N" declared at line 8 must be of mode
"out", "in out" or access-to-variable
----
package B94 is
type Prot2_Int is protected interface;
procedure J (PI : in Prot2_Int; N : in Integer) is null;
procedure K (PI : in out Prot2_Int; N : in Integer) is null;
procedure L (PI : out Prot2_Int; N : in Integer) is null;
procedure M (PI : access Prot2_Int; N : in Integer) is null;
procedure N (PI : access constant Prot2_Int; N : in Integer) is null;
protected type Protected_2 is new Prot2_Int with
procedure N (N : in Integer); -- ERROR: {7;1}
end Protected_2;
end B94;
2019-08-19 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch6.adb (Check_Synchronized_Overriding): Complete
predicate that applies legality check in 9.4 (11.9/2): if an
inherited subprogram is implemented by a protected procedure or
entry, its first paarameter must be out, in_out or
access_to_varible.
From-SVN: r274655
For tagged types not defined at library level that derive from library
level tagged types the compiler may generate code to initialize their
dispatch table of predefined primitives copying from the parent type
data stored in memory after the dispatch table of the parent; that is,
at runtime the initialization of dispatch tables overflows reading the
parent dispatch table.
This problem does not affect the execution of the program since the
target dispatch table always has enough space to store the extra data,
and after such copy the compiler generates code to complete the
initialization of the dispatch table.
The following test must compile and execute without errors.
package pkg_a is
type Root is tagged null record;
end pkg_a;
with pkg_a;
procedure main is
type Derived is new pkg_a.Root with null record; -- Test
begin
null;
end main;
Command: gnatmake -q main -fsanitize=address; ./main
2019-08-19 Javier Miranda <miranda@adacore.com>
gcc/ada/
PR ada/65696
* exp_atag.ads, exp_atag.adb (Build_Inherit_Predefined_Prims):
Adding formal to specify how many predefined primitives are
inherited from the parent type.
* exp_disp.adb (Number_Of_Predefined_Prims): New subprogram.
(Make_Secondary_DT): Compute the number of predefined primitives
of all tagged types (including tagged types not defined at
library level). Previously we unconditionally relied on the
Max_Predef_Prims constant value when building the dispatch
tables of tagged types not defined at library level (thus
consuming more memory for their dispatch tables than required).
(Make_DT): Compute the number of predefined primitives that must
be inherited from their parent type when building the dispatch
tables of tagged types not defined at library level. Previously
we unconditionally relied on the Max_Predef_Prims constant value
when building the dispatch tables of tagged types not defined at
library level (thus copying more data than required from the
parent type).
From-SVN: r274654
This patch enables gap detection in type extensions.
With the -gnatw.h switch, on 64-bit machines,
the following test should get warnings:
gcc -c gaps.ads -gnatw.h
gaps.ads:16:07: warning: 48-bit gap before component "Comp2"
gaps.ads:17:07: warning: 8-bit gap before component "Comp3"
package Gaps is
type Integer_16 is mod 2**16;
type TestGap is tagged record
Comp1 : Integer_16;
end record;
for TestGap use record
Comp1 at 0 + 8 range 0..15;
end record;
type TestGap2 is new TestGap with record
Comp2 : Integer_16;
Comp3 : Integer_16;
end record;
for TestGap2 use record
Comp2 at 08 + 8 range 0..15;
Comp3 at 11 + 8 range 0..15;
end record;
end Gaps;
2019-08-19 Bob Duff <duff@adacore.com>
gcc/ada/
* sem_ch13.adb (Record_Hole_Check): Procedure to check for holes
that incudes processing type extensions. A type extension is
processed by first calling Record_Hole_Check recursively on the
parent type to compute the bit number after the last component
of the parent.
From-SVN: r274653
When warning about length-check failures detected at compile time that
are flagged with "too few elements" or "too many elements", the compiler
now gives an additional message indicating the number of elements
expected by the context versus how many are present in the conflicting
expression (such as an aggregate that has too few or too many
components).
The test below reports the following warnings when compiled with this command:
$ gcc -c -gnatj78 length_warnings.adb
length_warnings.adb:6:09: warning: too few elements for subtype of
"Boolean_Array" defined at line 5, expected 10
elements; found 9 elements, "Constraint_Error" will
be raised at run time
length_warnings.adb:10:09: warning: too few elements for subtype of
"Boolean_Array" defined at line 9, expected 2
elements; found 1 element, "Constraint_Error" will
be raised at run time
length_warnings.adb:14:09: warning: too many elements for subtype of
"Boolean_Array" defined at line 13, expected 10
elements; found 11 elements, "Constraint_Error"
will be raised at run time
length_warnings.adb:18:09: warning: too many elements for subtype of
"Boolean_Array" defined at line 17, expected 0
elements; found 1 element, "Constraint_Error" will
be raised at run time
length_warnings.adb:22:09: warning: too many elements for subtype of
"Boolean_Array" defined at line 21, expected 1
element; found 2 elements, "Constraint_Error" will
be raised at run time
procedure Length_Check_Warnings is
type Boolean_Array is array (Natural range <>) of Boolean;
Bits_A : Boolean_Array (1 .. 10)
:= (True, True, True, True, True, True, True, True, True);
-- Too few elements
Bits_B : Boolean_Array (1 .. 2)
:= (1 => False);
-- Too few elements
Bits_C : Boolean_Array (1 .. 10)
:= (True, True, True, True, True, True, True, True, True, True, True);
-- Too many elements
Bits_D : Boolean_Array (1 .. 0)
:= (1 => True);
-- Too many elements
Bits_E : Boolean_Array (1 .. 1)
:= (True, False);
-- Too many elements
begin
null;
end Length_Check_Warnings;
2019-08-19 Gary Dismukes <dismukes@adacore.com>
gcc/ada/
* checks.adb (Length_Mismatch_Info_Message): New function in
Selected_Length_Checks to return a message indicating the
element counts for the mismatched lengths for a failed
compile-time length check.
(Plural_Or_Singular_Ending): Support function in
Length_Mismatch_Info_Message to return either "" or "s", for
concatenating to the end of words.
(Selected_Length_Checks): Pass the result of
Length_Mismatch_Info_Message as an extra warning message to
Compile_Time_Constraint_Error to indicate the mismatched lengths
for a failed compile-time length check.
* sem_util.ads (Compile_Time_Constraint_Error): Add an optional
message formal (Extra_Msg), defaulted to the empty string.
* sem_util.adb (Compile_Time_Constraint_Error): Output an extra
message following the main warning message (when Extra_Msg is
not the empty string).
From-SVN: r274652
The recent introduction of GNAT.Sockets IPv6 support broke support for
VxWorks RTPs due to the use of internal VxWorks kernel calls. This patch
rectifies this by using the VxWorks public API for these routines.
The following RTP should compile successfully on a Development profile
VxWorks kernel that includes the INCLUDE_GETNAMEINFO component:
with GNAT.Sockets; use GNAT.Sockets;
procedure IPvX is
procedure Print_Address_Info
(Host, Serv : String;
Family : Family_Type := Family_Unspec)
is
Addresses : Address_Info_Array :=
Get_Address_Info
(Host, Serv, Family,
Passive => False,
Numeric_Host => False);
begin
Sort (Addresses, IPv6_TCP_Preferred'Access);
end Print_Address_Info;
begin
Print_Address_Info ("localhost", "ssh");
end IPvX;
2019-08-19 Patrick Bernardi <bernardi@adacore.com>
gcc/ada/
* socket.c: Removed the redefinition of getaddrinfo, getnameinfo
and freeaddrinfo to internal VxWorks kernel calls because they
are, well, internal kernel calls and cannot be called from RTPs.
VxWorks provides the necessary components to call these routines
directly.
From-SVN: r274651
This fixes a fallout of a recent change clearing the
Is_Generic_Actual_Type on the implicit full view of a private actual
type in an instance. This flag is used to help disambiguating formal
types instantiated on the same actual type within an instance, but it
should be cleared outside the instance to let the usual disambiguation
rules apply again to these types outside the instance.
This in particular means that Exp_Dist cannot rely on it to detect
subtypes representing generic actual types, hence the need for the new
predicate.
2019-08-19 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_dist.adb (Is_Generic_Actual_Subtype): New predicate.
(Build_From_Any_Call, Build_To_Any_Call, Build_TypeCode_Call):
Use it instead of Is_Generic_Actual_Type flag to detect subtypes
representing generic actual types.
From-SVN: r274650
This patch modifies the handling of warnings on unused formal parameters
of generic subprograms. Previously such warnings were placed on the
formal appearing in the subprogram declaration, in contrast with
warnings on non-generic subprograms, where the warning is placed on the
corresponding entity in the body of the subprogram. This patch makes the
handling of both cases uniform. It is preferable to place the warning in
the body because this also provides a better suggestion for the
placement of an Unreferenced pragma to suppress the warning when desired.
2019-08-19 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_warn.adb (Check_References, Generic_Body_Formal): When a
formal parameter of a generic subprogram is not referenced in
the body, place the corresponding warning on the corresponding
entity in the specification of the generic body, as is done for
non-generic subprograms.
gcc/testsuite/
* gnat.dg/warn28.adb, gnat.dg/warn28.ads: New testcase.
From-SVN: r274649
Use a constant for the Size_Too_Small_Message, so if it changes, it
won't change in one place but not another. DRY. It might be better to
move this code out of errout.adb, but that's for another day.
2019-08-19 Bob Duff <duff@adacore.com>
gcc/ada/
* errout.ads (Size_Too_Small_Message): New constant.
* errout.adb, freeze.adb, sem_ch13.adb: Use it.
From-SVN: r274648
This fixes a fallout of the recent change keeping the
Is_Generic_Instance flag on the wrapper package built for the
instantiation of a generic subprogram.
There is no need to visit the Instance_Spec of an
N_Subprogram_Instantiation node anymore because the regular processing
for an N_Package_Declaration node now does the job for instantiations of
generic subprograms.
The following subprogram must compile again quietly with -gnatzc:
with Gen_Proc;
package RCI is
pragma Remote_Call_Interface;
procedure Inst_Proc is new Gen_Proc;
procedure P (S : String);
end RCI;
generic
procedure Gen_Proc (S : String);
pragma Remote_Call_Interface (Gen_Proc);
with Ada.Text_IO; use Ada.Text_IO;
procedure Gen_Proc (S : String) is
begin
Put_Line ("Gen_Proc called: " & S);
end Gen_Proc;
2019-08-19 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* exp_dist.adb (Build_Package_Stubs): Do not specifically visit
the declarations of an N_Subprogram_Instantiation node.
From-SVN: r274647
No impact on regular compilation.
2019-08-19 Claire Dross <dross@adacore.com>
gcc/ada/
* sem_spark.ads, sem_spark.adb (Is_Pledge_Function): New
parameter of the generic. Function used to decide whether a
function is a pledge function.
(Check_Not_Borrowed): Disable check inside the second parameter
of a pledge function for the path borrowed by the first
parameter. Also disable checks for entities inside a Global
contract.
From-SVN: r274644
This patch adds a formal function parameter "=" (L, R : Element_Type) to
SPARK containers. The equality that is used by default for Element_Type
after this patch is the primitive equality and not the predefined any
more. It also allows to use any function with the appropriate signature
for the equality function.
2019-08-19 Joffrey Huguet <huguet@adacore.com>
gcc/ada/
* libgnat/a-cfdlli.ads, libgnat/a-cfhama.ads,
libgnat/a-cfinve.ads, libgnat/a-cforma.ads,
libgnat/a-cofove.ads, libgnat/a-cofuma.ads,
libgnat/a-cofuve.ads: Add formal function parameter "=" (L, R :
Element_Type) to the generic packages.
From-SVN: r274643
This patch fixes an old-standing problem with premature freezing. When a
derived type declaration includes a constraint, we generate a subtype
declaration of an anonymous base type, with the constraint given in the
original type declaration, Conceptually, the bounds are converted to the
new base type, and this conversion freezes (prematurely) that base type,
when the bounds are simply literals. As a result, a representation
clause for the derived type is then rejected or ignared. This procedure
recognizes the simple case of literal bounds in derived enumeration type
declarations, which allows us to indicate that the conversions are not
freeze points, and the subsequent representation clause can be accepted.
2019-08-19 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch3.adb (Derived_Enumeration_Type): Do no freeze anonymous
base type if the bounds in the derived type declaration are
literals of the type.
gcc/testsuite/
* gnat.dg/rep_clause9.adb: New testcase.
From-SVN: r274641
When code is inlinined for proof in the special mode for GNATprove, Ada
rules about non-aliasing should still be checked. Now fixed.
There is no impact on compilation.
2019-08-19 Yannick Moy <moy@adacore.com>
gcc/ada/
* sem_res.adb (Resolve_Call): Check non-aliasing rules before
GNATprove inlining.
From-SVN: r274640
This gets rid of a small issue in the inlining machinery: under very
peculiar circumstances, it would add a pending instantiation for the
body of a generic package at the point of call to an inlined subprogram
of the instance. That's theoritically problematic because the saved
context is that of the call and not that of the instance in this case,
although the strict conditions ensure that this doesn't make a real
difference in practice.
Now that the machinery can perform the pending instantiations on demand,
we can optimistically add more of them when the instantiations are
analyzed and thus remove the problematic handling at the point of call.
No functional changes.
2019-08-19 Eric Botcazou <ebotcazou@adacore.com>
gcc/ada/
* inline.adb (Add_Inlined_Body): Do not add pending
instantiations.
* sem_ch12.adb (Needs_Body_Instantiated): New predicate.
(Analyze_Package_Instantiation): Use it to decide whether to add
a pending instantiation for the body of the package.
From-SVN: r274639
This fixes a glitch introduced during the initial OpenACC work import
process, causing crashes on any Acc_Parallel + Acc_Loop combination.
2019-08-19 Olivier Hainque <hainque@adacore.com>
gcc/ada/
* gcc-interface/trans.c (Acc_Loop_to_gnu): Return the openacc
BIND_EXPR node we have constructed on purpose. Remove unused
variable.
gcc/testsuite/
* gnat.dg/openacc1.adb: New testcase.
From-SVN: r274638
- -fsanitize=kernel-address will call targetm.asan_shadow_offset ()
at asan_shadow_offset, so it will crash if TARGET_ASAN_SHADOW_OFFSET
is not implemented, that's mean -fsanitize=kernel-address is not
supported for target without TARGET_ASAN_SHADOW_OFFSET implementation.
gcc/ChangeLog:
PR target/91441
* toplev.c (process_options): Check TARGET_ASAN_SHADOW_OFFSET is
implemented for -fsanitize=kernel-address, and merge check logic
with -fsanitize=address.
testsuite/ChangeLog:
PR target/91441
* gcc.target/riscv/pr91441.c: New.
From-SVN: r274631
2019-08-18 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91485
module.c (gfc_match_use): User defined operator cannot conflict with
a rename symbol.
2019-08-18 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91485
* gfortran.dg/pr91485.f90: New test.
From-SVN: r274630
There is no reasonable chance that the SDKs in question will be re-
issued, so the only viable solution is a fixincludes.
2019-08-18 C.G. Dogan <gcc+cgdogan.00@gmail.com>
Iain Sandoe <iain@sandoe.co.uk>
PR target/83531
* inclhack.def (darwin_api_availability): New, strip leading
underscores from API_XXXX defines.
* fixincl.x: Regenerate.
* tests/base/os/availability.h: New file.
Co-Authored-By: Iain Sandoe <iain@sandoe.co.uk>
From-SVN: r274624
This test needs the cpu and machine asserts to be implemented
which hadn't been done for PPC Darwin. Fixed thus.
gcc/
2019-08-18 Iain Sandoe <iain@sandoe.co.uk>
* config/rs6000/darwin.h (TARGET_OS_CPP_BUILTINS): Add asserts
for cpu and machine. Factor 64/32b builtins.
From-SVN: r274623
When a defer is executed at most once in a function body,
we can allocate the defer record for it on the stack instead
of on the heap.
This should make defers like this (which are very common) faster.
This is a port of CL 171758 from the gc repo.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190410
From-SVN: r274613
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78739
* match.c (gfc_match_st_function): When matching a statement function,
need to check if the statement function name shadows the function
name.
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78739
* fortran.dg/pr78739.f90: New test.
From-SVN: r274605
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78719
* decl.c (get_proc_name): Check for a CLASS entity when trying to
add attributes to an entity that already has an explicit interface.
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78719
* gfortran.dg/pr78719_1.f90: New test.
* gfortran.dg/pr78719_2.f90: Ditto.
* gfortran.dg/pr78719_3.f90: Ditto.
From-SVN: r274604
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91471
* primary.c (gfc_variable_attr): Remove a gfc_internal_error(),
which cannot be reached by conforming Fortran code, but seems to
be reachable from nonconforming Fortran code. Treat the AR_UNKNOWN
case as a no-op.
2019-08-17 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91471
* gfortran.dg/pr91471.f90: New test.
From-SVN: r274603
2019-08-17 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/91473
* testsuite/libgomp.fortran/appendix-a/a.28.5.f90: Add
-std=legacy so invalid code in the test case is accepted.
From-SVN: r274602
Improve the error message that is printed when a memory allocation
fails, by including the location, and the size of the allocation that
failed.
Regtested on x86_64-pc-linux-gnu.
gcc/fortran/ChangeLog:
2019-08-17 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/68401
* trans-decl.c (gfc_build_builtin_function_decls): Replace
os_error with os_error_at decl.
* trans.c (trans_runtime_error_vararg): Modify so the error
function decl is passed directly.
(gfc_trans_runtime_error): Pass correct error function decl.
(gfc_trans_runtime_check): Likewise.
(trans_os_error_at): New function.
(gfc_call_malloc): Use trans_os_error_at.
(gfc_allocate_using_malloc): Likewise.
(gfc_call_realloc): Likewise.
* trans.h (gfor_fndecl_os_error): Replace with gfor_fndecl_os_error_at.
libgfortran/ChangeLog:
2019-08-17 Janne Blomqvist <jb@gcc.gnu.org>
PR fortran/68401
* gfortran.map: Add GFORTRAN_10 node, add _gfortran_os_error_at
symbol.
* libgfortran.h (os_error_at): New prototype.
* runtime/error.c (os_error_at): New function.
From-SVN: r274599
In gccgo, we insert the write barriers in the frontend, and so we
cannot completely prevent write barriers on stack writes. So it
is possible for a bad pointer appearing in the write barrier
buffer. When flushing the write barrier, treat it the same as
sacnning the stack. In particular, don't mark a pointer if it
does not point to an allocated object. We already have similar
logic in greyobject. With this, hopefully, we can prevent an
unallocated object from being marked completely.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190599
From-SVN: r274598
The gc compiler recognizes the type runtime.hex and prints values
in this type as hex. Do the same here. This makes debugging
runtime crashes slightly better.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190597
From-SVN: r274591