2018-05-22 Bob Duff <duff@adacore.com>
gcc/ada/
* doc/gnat_ugn/gnat_utility_programs.rst: Add documentation for
the new --split-line-before-record, --indent-named-statements and
--no-align-modes gnatpp switches.
From-SVN: r260515
This patch fixes a compiler abort on a pragma Compile_Time_Warning when its
second argument is a reference to a constsant string (rather than a string
literal or an expression that evaluates to a string literal).
Compiling msain.adb must yield:
main.adb:5:33: warning: Good
main.adb:6:33: warning: VALLUE
main.adb:7:33: warning: Test
----
procedure Main is
Value : constant String := "Test";
Switch : constant Boolean := True;
begin
pragma Compile_Time_Warning (Switch, "Good");
pragma Compile_Time_Warning (Switch, "VAL" & "LUE");
pragma Compile_Time_Warning (Switch, value);
null;
end Main;
2018-05-22 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Handle properly
a second argument that is a constant of a given string value.
From-SVN: r260514
The stack on AArch64 is 128-bit aligned to allow Neon and FPU operations.
2018-05-22 Jerome Lambourg <lambourg@adacore.com>
gcc/ada/
* sigtramp-qnx.c: Fix stack alignment issue in the signal trampoline.
From-SVN: r260512
This path fixes a spurious size error on a fixed point that carries an
aspect specification for the 'Small of the type, when there is a subsequent
derivation of that type before the type is frozen, the given 'Small is not
not a power of two, and the bounds of the type require its full size, also
given by an aspect specification.
2018-05-22 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* freeze.adb (Freeze_Fixed_Point_Type): If the first subtype has
delayed aspects, analyze them now, os that the representation of the
type (size, bounds) can be computed and validated.
gcc/testsuite/
* gnat.dg/fixedpnt3.adb: New testcase.
From-SVN: r260511
We now only have the executable code section boundaries at hand,
so can only infer offsets for symbols within those boundaries.
Symbols outside of this region are non-text symbols, pointless for
traceback symbolization anyway.
2018-05-22 Olivier Hainque <hainque@adacore.com>
gcc/ada/
* libgnat/s-dwalin.adb (Enable_Cache): Skip symbols outside of the
executable code section boundaries.
From-SVN: r260510
This patch adds generic support for the Ada.Locales package that
relies on the setlocale() C service.
2018-05-22 Javier Miranda <miranda@adacore.com>
gcc/ada/
* locales.c: New implementation for the Ada.Locales package.
* libgnat/a-locale.ads: Remove comment indicating that this is not
implemented.
* doc/gnat_rm/standard_library_routines.rst: Remove comment indicating
that this is not implemented.
* gnat_rm.texi: Regenerate.
From-SVN: r260509
This patch fixes an issue whereby placement of the pragma/aspect Pure_Function
was not verified to have been in the same declarative part as the function
declaration incorrectly allowing it to appear after a function body or in a
different region like a private section.
2018-05-22 Justin Squirek <squirek@adacore.com>
gcc/ada/
* sem_ch12.adb (In_Same_Declarative_Part): Moved to sem_util.
(Freeze_Subprogram_Body, Install_Body): Modify calls to
In_Same_Declarative_Part.
* sem_prag.adb (Analyze_Pragma-Pragma_Pure_Function): Add check to
verify pragma declaration is within the same declarative list with
corresponding error message.
* sem_util.adb, sem_util.ads (In_Same_Declarative_Part): Moved from
sem_ch12.adb and generalized to be useful outside the scope of
freezing.
gcc/testsuite/
* gnat.dg/pure_function1.adb, gnat.dg/pure_function1.ads,
gnat.dg/pure_function2.adb, gnat.dg/pure_function2.ads: New testcases.
From-SVN: r260507
This patch modifies the analysis of subprogram declarations to ensure that an
aspect which is converted into a categorization pragma is properly taken into
account when verifying the dependencies of a subprogram unit.
------------
-- Source --
------------
-- pack.ads
package Pack is end Pack;
-- proc1.ads
with Pack;
procedure Proc1 with Pure;
-- proc2.ads
with Pack;
procedure Proc2;
pragma Pure (Proc2);
----------------------------
-- Compilation and output --
----------------------------
$ gcc -c proc1.ads
$ gcc -c proc2.ads
proc1.ads:1:06: cannot depend on "Pack" (wrong categorization)
proc1.ads:1:06: pure unit cannot depend on non-pure unit
proc2.ads:1:06: cannot depend on "Pack" (wrong categorization)
proc2.ads:1:06: pure unit cannot depend on non-pure unit
2018-05-22 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* sem_ch6.adb (Analyze_Subprogram_Declaration): Set the proper
categorization of the unit after processing the aspects in case one of
its aspects is converted into a categorization pragma.
From-SVN: r260506
This PR showed that the normal function for expanding directly-mapped
internal functions didn't handle the case in which the call was only
being kept for its side-effects.
2018-05-22 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
PR middle-end/85862
* internal-fn.c (expand_direct_optab_fn): Cope with a null lhs.
gcc/testsuite/
PR middle-end/85862
* gcc.dg/torture/pr85862.c: New test.
From-SVN: r260504
2018-05-22 Martin Liska <mliska@suse.cz>
PR ipa/85607
* ipa-icf.c (sem_item::add_type): Do not ICE for incomplete types.
2018-05-22 Martin Liska <mliska@suse.cz>
PR ipa/85607
* g++.dg/ipa/pr85607.C: New test.
From-SVN: r260502
2018-05-22 Richard Biener <rguenther@suse.de>
PR tree-optimization/85863
* tree-vect-stmts.c (vect_is_simple_cond): Only widen invariant
comparisons when vectype is specified.
(vectorizable_condition): Do not specify vectype for
vect_is_simple_cond when SLP vectorizing.
* gfortran.fortran-torture/compile/pr85863.f: New testcase.
From-SVN: r260501
2018-05-21 Michael Meissner <meissner@linux.ibm.com>
PR target/85657
* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not
define __ibm128 as long double.
* config/rs6000/rs6000.c (rs6000_init_builtins): Create __ibm128
as a distinct type with IEEE 128-bit floating point is supported.
(init_float128_ieee): Fix up conversions between IFmode and IEEE
128-bit types to use the correct functions.
(rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to
convert between 128-bit floating point types that have different
modes but the same representation, instead of using gen_lowpart to
makean alias.
* config/rs6000/rs6000.md (IFKF): New iterator for IFmode and
KFmode.
(IFKF_reg): New attributes to give the register constraints for
IFmode and KFmode.
(extend<mode>tf2_internal): New insns to mark an explicit
conversion between 128-bit floating point types that have a
different mode but share the same representation.
[gcc/testsuite]
2018-05-21 Michael Meissner <meissner@linux.ibm.com>
PR target/85657
* gcc.target/powerpc/pr85657-1.c: New test for converting between
__float128, __ibm128, and long double.
* gcc.target/powerpc/pr85657-2.c: Likewise.
* gcc.target/powerpc/pr85657-3.c: Likewise.
* g++.dg/pr85667.C: New test to make sure __ibm128 is
implementated as a separate type internally, and is not just an
alias for long double.
From-SVN: r260490
[gcc]
2018-05-21 Michael Meissner <meissner@linux.ibm.com>
PR target/85657
* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not
define __ibm128 as long double.
* config/rs6000/rs6000.c (rs6000_init_builtins): Always create
__ibm128 as a distinct type.
(init_float128_ieee): Fix up conversions between IFmode and IEEE
128-bit types to use the correct functions.
(rs6000_expand_float128_convert): Use explicit FLOAT_EXTEND to
convert between 128-bit floating point types that have different
modes but the same representation, instead of using gen_lowpart to
makean alias.
* config/rs6000/rs6000.md (IFKF): New iterator for IFmode and
KFmode.
(IFKF_reg): New attributes to give the register constraints for
IFmode and KFmode.
(extend<mode>tf2_internal): New insns to mark an explicit
conversion between 128-bit floating point types that have a
different mode but share the same representation.
[gcc/testsuite]
2018-05-21 Michael Meissner <meissner@linux.ibm.com>
PR target/85657
* gcc.target/powerpc/pr85657-1.c: New test for converting between
__float128, __ibm128, and long double.
* gcc.target/powerpc/pr85657-2.c: Likewise.
* gcc.target/powerpc/pr85657-3.c: Likewise.
* g++.dg/pr85667.C: New test to make sure __ibm128 is
implementated as a separate type internally, and is not just an
alias for long double.
From-SVN: r260489
In this PR we have:
c_5 = c_4(D) + 4;
c_12 = c_5 + 1;
*c_5 = 2;
a = 2; // A
c_21 = c_12 + 1;
*c_12 = 2;
a = 2; // B
c_28 = c_21 + 1;
*c_21 = 2;
a = 2;
c_7 = c_28 + 1;
*c_28 = 2;
where a is a global int. We decide that A can't clobber *c_5 == c_4[4]
because the latter implies that c_4 is an object of 5 bytes or more,
whereas a has exactly 4 bytes.
The assumption for B and *c_5 is the same, but when considering B and
*c_12, we only follow the definition of c_12 to c_5 + 1 (for good
reason) and so have *c_12 == c_5[1]. We then don't have the same
size guarantee and so assume that B could clobber *c_12. This leads
to a situation in which the strinfo for c_5 is still valid but the
next strinfo (c_12) isn't. We then segfaulted while trying to get
the strinfo for c_21 + 1 == c_5 + 3 because get_stridx_plus_constant
assumed that c_5's next strinfo (c_12) would be valid too.
And of course it should be valid really. It doesn't make sense for the
string based at c_5 to be valid but a substring of it to be invalid.
I don't think we can guarantee that such weird corner cases never
happen though, even if we tried to avoid this one.
One possibility would be to mark c_12 as valid on the basis that c_5
is valid, but I'm not sure the complication is worth it given that it
seems to trigger very rarely. A better optimisation would be to get
the unroller to clean up after itself a bit more...
Although this particular instance of the bug relies on r249880, I think
we could have similar problems in GCC 7. It would be much harder to
trigger though, especially since it relies on unfolded IR like the above.
2018-05-21 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
PR tree-optimization/85814
* tree-ssa-strlen.c (get_stridx_plus_constant): Cope with
a null return from get_strinfo when unsharing the next
strinfo in the chain.
gcc/testsuite/
PR tree-optimization/85814
* gcc.dg/torture/pr85814.c: New test.
From-SVN: r260488
/cp
2018-05-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/84588
* parser.c (cp_parser_maybe_commit_to_declaration,
cp_parser_check_condition_declarator): New.
(cp_parser_simple_declaration): Use the first above.
(cp_parser_condition): Use both the above; enforce
[stmt.stmt]/2 about the declarator not specifying
a function or an array; improve error-recovery.
/testsuite
2018-05-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/84588
* g++.dg/cpp0x/cond1.C: New.
* g++.dg/cpp1y/pr84588-1.C: Likewise.
* g++.dg/cpp1y/pr84588-2.C: Likewise.
* g++.dg/cpp1y/pr84588-3.C: Likewise.
* g++.dg/parse/cond6.C: Likewise.
* g++.dg/parse/cond7.C: Likewise.
* g++.dg/parse/cond8.C: Likewise.
* g++.dg/cpp1z/decomp16.C: Update.
* g++.old-deja/g++.jason/cond.C: Likewise.
From-SVN: r260482
2018-05-21 Steven G. Kargl <kargl@gcc.gnu.org>
ChangeLog for r260480
* gfortran.dg/graphite/block-2.f: Adjust testcase for new gfortran
warnings for deleted and obsolescent features.
* gfortran.dg/graphite/id-19.f: Ditto.
* gfortran.dg/graphite/id-20.f: Ditto.
* gfortran.dg/graphite/id-27.f90: Ditto.
* gfortran.dg/graphite/pr82449.f: Ditto.
From-SVN: r260481
This recently-committed test fails the INS scan for tiny and large memory models.
That is because instead of the:
make_vector:
adrp x1, a
adrp x0, b
movi v0.4s, 0
ldr s2, [x1, #:lo12:a]
ldr s1, [x0, #:lo12:b]
ins v0.s[2], v2.s[0]
ins v0.s[3], v1.s[0]
ret
That we generate for the default small model, we end up with a simple register
addressing mode with no addend/offset for the lane load:
make_vector:
movi v0.4s, 0
adr x1, a
adr x0, b
ld1 {v0.s}[2], [x1]
ld1 {v0.s}[3], [x0]
ret
and
make_vector:
movi v0.4s, 0
adrp x0, .LC0
ldr x1, [x0, #:lo12:.LC0]
adrp x0, .LC1
ldr x0, [x0, #:lo12:.LC1]
ld1 {v0.s}[2], [x1]
ld1 {v0.s}[3], [x0]
ret
So we end up merging the load and the lane insert.
This patch adjusts the testcase to scan for the right thing accordingly.
Checked that the testcase passes with -mcmodel=tiny, -mcmodel=small, -mcmodel=large.
* gcc.target/aarch64/vec_init_1.c: Scan for LD1 instead of INS for
tiny and large memory models.
From-SVN: r260474
The compiler warns on an object declaration with default initialization
and an address clause, to indicate that the overlay implied by the address
clause might affect a value elsewhere. The warning is suppressed if the type
carries the Suppress_Initialization aspect. With this patch the compiler
also inhibits the warning if the aspect is specified for the object itself.
2018-05-21 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* freeze.adb (Warn_Overlay): Do not emit a wawrning on an object
declaration with an explicit address clause and a type with default
initialization, if the declaration carries an aspect
Suppress_Initialization.
gcc/testsuite/
* gnat.dg/suppress_initialization.adb,
gnat.dg/suppress_initialization_pkg.ads: New testcase.
From-SVN: r260471
This patch ensures that aspect specifications which appear on package,
protected, and task body stubs are properly analyzed.
------------
-- Source --
------------
-- pack.ads
package Pack
with SPARK_Mode,
Abstract_State => State
is
-------------------------------------
-- Refined_Depends, Refined_Global --
-------------------------------------
procedure Proc_1;
procedure Proc_2
with Global => (In_Out => State),
Depends => (State => State);
task Task_Obj_1;
task Task_Obj_2
with Global => (In_Out => State),
Depends => (State => State);
------------------
-- Refined_Post --
------------------
function Func_1 (Formal : Integer) return Integer;
function Func_2 (Formal : Integer) return Integer
with Post => Func_2'Result > Formal;
-------------------
-- Refined_State --
-------------------
package Pack_1 is end Pack_1;
package Pack_2 with Abstract_State => State_2 is end Pack_2;
----------------
-- SPARK_Mode --
----------------
package Pack_3 with SPARK_Mode => Off is end Pack_3;
package Pack_4 with SPARK_Mode => Off is end Pack_4;
package Pack_5 is end Pack_5;
protected type Prot_Typ_1 with SPARK_Mode => Off is end Prot_Typ_1;
protected type Prot_Typ_2 with SPARK_Mode => Off is end Prot_Typ_2;
protected type Prot_Typ_3 is end Prot_Typ_3;
procedure Proc_3 with SPARK_Mode => Off;
procedure Proc_4 with SPARK_Mode => Off;
procedure Proc_5;
task type Task_Typ_1 with SPARK_Mode => Off;
task type Task_Typ_2 with SPARK_Mode => Off;
task type Task_Typ_3;
end Pack;
-- pack.adb
package body Pack
with SPARK_Mode,
Refined_State => (State => Constit)
is
Constit : Integer := 0;
-------------------------------------
-- Refined_Depends, Refined_Global --
-------------------------------------
procedure Proc_1 is separate
with Refined_Global => (In_Out => Constit), -- Error
Refined_Depends => (Constit => Constit); -- Error
procedure Proc_2 is separate
with Refined_Global => (In_Out => Constit), -- OK
Refined_Depends => (Constit => Constit); -- OK
task body Task_Obj_1 is separate
with Refined_Global => (In_Out => Constit), -- Error
Refined_Depends => (Constit => Constit); -- Error
task body Task_Obj_2 is separate
with Refined_Global => (In_Out => Constit), -- OK
Refined_Depends => (Constit => Constit); -- OK
------------------
-- Refined_Post --
------------------
function Func_1 (Formal : Integer) return Integer is separate
with Refined_Post => Func_1'Result > Formal; -- OK
function Func_2 (Formal : Integer) return Integer is separate
with Refined_Post => Func_2'Result > Formal; -- OK
-------------------
-- Refined_State --
-------------------
package body Pack_1 is separate
with Refined_State => (State_1 => Constit_1); -- Error
package body Pack_2 is separate
with Refined_State => (State_2 => Constit_2); -- Error
----------------
-- SPARK_Mode --
----------------
package body Pack_3 is separate with SPARK_Mode => On; -- Error
package body Pack_4 is separate;
package body Pack_5 is separate with SPARK_Mode => Off; -- Error
protected body Prot_Typ_1 is separate with SPARK_Mode => On; -- Error
protected body Prot_Typ_2 is separate;
protected body Prot_Typ_3 is separate with SPARK_Mode => Off; -- Error
procedure Proc_3 is separate with SPARK_Mode => On; -- Error
procedure Proc_4 is separate;
procedure Proc_5 is separate with SPARK_Mode => Off; -- Error
task body Task_Typ_1 is separate with SPARK_Mode => On; -- Error
task body Task_Typ_2 is separate;
task body Task_Typ_3 is separate with SPARK_Mode => Off; -- Error
end Pack;
-- pack-func_1.adb
separate (Pack)
function Func_1 (Formal : Integer) return Integer
with Refined_Post => Func_1'Result > Formal -- Error
is
begin
return Formal * 10;
end Func_1;
-- pack-func_2.adb
separate (Pack)
function Func_2 (Formal : Integer) return Integer
with Refined_Post => Func_2'Result > Formal -- Error
is
begin
return Formal * 10;
end Func_2;
-- pack-pack_1.adb
separate (Pack)
package body Pack_1
with SPARK_Mode,
Refined_State => (State_1 => Constit_1) -- Error
is
Constit_1 : Integer := 1;
end Pack_1;
-- pack-pack_2.adb
separate (Pack)
package body Pack_2
with SPARK_Mode,
Refined_State => (State_2 => Constit_2) -- OK
is
Constit_2 : Integer := 2;
end Pack_2;
-- pack-pack_3.adb
separate (Pack)
package body Pack_3 is end Pack_3;
-- pack-pack_4.adb
separate (Pack)
package body Pack_4 with SPARK_Mode => On is end Pack_4; -- OK
-- pack-pack_5.adb
separate (Pack)
package body Pack_5 with SPARK_Mode => On is end Pack_5; -- OK
-- pack-proc_1.adb
separate (Pack)
procedure Proc_1
with Refined_Global => (In_Out => Constit), -- Error
Refined_Depends => (Constit => Constit) -- Error
is begin null; end Proc_1;
-- pack-proc_2.adb
separate (Pack)
procedure Proc_2
with Refined_Global => (In_Out => Constit), -- Error
Refined_Depends => (Constit => Constit) -- Error
is begin null; end Proc_2;
-- pack-proc_3.adb
separate (Pack)
procedure Proc_3 is begin null; end Proc_3;
-- pack-proc_4.adb
separate (Pack)
procedure Proc_4 with SPARK_Mode => On is begin null; end Proc_4; -- OK
-- pack-proc_5.adb
separate (Pack)
procedure Proc_5 with SPARK_Mode => On is begin null; end Proc_5; -- OK
-- pack-prot_typ_1.adb
separate (Pack)
protected body Prot_Typ_1 is end Prot_Typ_1;
-- pack-prot_typ_2.adb
separate (Pack)
protected body Prot_Typ_2 with SPARK_Mode => On is end Prot_Typ_2; -- OK
-- pack-prot_typ_3.adb
separate (Pack)
protected body Prot_Typ_3 with SPARK_Mode => On is end Prot_Typ_3; -- OK
-- pack-task_obj_1.adb
separate (Pack)
task body Task_Obj_1
with Refined_Global => (In_Out => Constit), -- Error
Refined_Depends => (Constit => Constit) -- Error
is begin null; end Task_Obj_1;
-- pack-task_obj_2.adb
separate (Pack)
task body Task_Obj_2
with Refined_Global => (In_Out => Constit), -- Error
Refined_Depends => (Constit => Constit) -- Error
is begin null; end Task_Obj_2;
-- pack-task_typ_1.adb
separate (Pack)
task body Task_Typ_1 is begin null; end Task_Typ_1;
-- pack-task_typ_2.adb
separate (Pack)
task body Task_Typ_2 with SPARK_Mode => On is -- OK
begin null; end Task_Typ_2;
-- pack-task_typ_3.adb
separate (Pack)
task body Task_Typ_3 with SPARK_Mode => On is -- OK
begin null; end Task_Typ_3;
----------------------------
-- Compilation and output --
----------------------------
$ gcc -c pack.adb
pack.adb:12:11: useless refinement, declaration of subprogram "Proc_1" lacks
aspect or pragma Global
pack.adb:13:11: useless refinement, declaration of subprogram "Proc_1" lacks
aspect or pragma Depends
pack.adb:20:11: useless refinement, declaration of task type "Task_Obj_1" lacks
aspect or pragma Global
pack.adb:21:11: useless refinement, declaration of task type "Task_Obj_1" lacks
aspect or pragma Depends
pack.adb:42:11: aspect "Refined_State" must apply to a package body
pack.adb:45:11: aspect "Refined_State" must apply to a package body
pack.adb:51:41: incorrect placement of aspect "Spark_Mode"
pack.adb:53:41: incorrect placement of aspect "Spark_Mode"
pack.adb:55:47: incorrect placement of aspect "Spark_Mode"
pack.adb:57:47: incorrect placement of aspect "Spark_Mode"
pack.adb:59:38: incorrect placement of aspect "Spark_Mode"
pack.adb:61:38: incorrect placement of aspect "Spark_Mode"
pack.adb:63:42: incorrect placement of aspect "Spark_Mode"
pack.adb:65:42: incorrect placement of aspect "Spark_Mode"
pack-proc_1.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-proc_1.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-proc_2.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-proc_2.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-task_obj_1.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-task_obj_1.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-task_obj_2.adb:4:08: aspect "Refined_Global" cannot apply to a subunit
pack-task_obj_2.adb:5:08: aspect "Refined_Depends" cannot apply to a subunit
pack-func_1.adb:4:08: aspect "Refined_Post" cannot apply to a subunit
pack-func_2.adb:4:08: aspect "Refined_Post" cannot apply to a subunit
pack-pack_1.adb:3:14: body of package "Pack_1" has unused hidden states
pack-pack_1.adb:3:14: variable "Constit_1" defined at line 7
pack-pack_1.adb:5:08: useless refinement, package "Pack_1" does not define
abstract states
pack-pack_1.adb:5:26: "State_1" is undefined
pack-pack_3.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-pack_3.adb:3:01: value Off was set for SPARK_Mode on "Pack_3" at
pack.ads:38
pack-pack_4.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-pack_4.adb:3:01: value Off was set for SPARK_Mode on "Pack_4" at
pack.ads:39
pack-pack_4.adb:3:26: incorrect use of SPARK_Mode
pack-pack_4.adb:3:26: value Off was set for SPARK_Mode on "Pack_4" at
pack.ads:39
pack-prot_typ_2.adb:3:32: incorrect use of SPARK_Mode
pack-prot_typ_2.adb:3:32: value Off was set for SPARK_Mode on "Prot_Typ_2" at
pack.ads:43
pack-proc_3.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-proc_3.adb:3:01: value Off was set for SPARK_Mode on "Proc_3" at
pack.ads:46
pack-proc_4.adb:3:01: incorrect use of SPARK_Mode at pack.adb:2
pack-proc_4.adb:3:01: value Off was set for SPARK_Mode on "Proc_4" at
pack.ads:47
pack-proc_4.adb:3:23: incorrect use of SPARK_Mode
pack-proc_4.adb:3:23: value Off was set for SPARK_Mode on "Proc_4" at
pack.ads:47
pack-task_typ_2.adb:3:27: incorrect use of SPARK_Mode
pack-task_typ_2.adb:3:27: value Off was set for SPARK_Mode on "Task_Typ_2" at
pack.ads:51
2018-05-21 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* sem_ch6.adb (Analyze_Generic_Subprogram_Body): Rename the call to
Analyze_Aspect_Specifications_On_Body_Or_Stub.
(Analyze_Subprogram_Body_Helper): Rename the calls to
Analyze_Aspect_Specifications_On_Body_Or_Stub.
* sem_ch9.adb (Analyze_Entry_Body): Rename the call to
Analyze_Aspect_Specifications_On_Body_Or_Stub.
* sem_ch10.adb: Add with and use clause for Sem_Ch13.
(Analyze_Package_Body_Stub): Add constant Id. Decorate the package stub
prior to analyzing its aspects.
(Analyze_Protected_Body_Stub): Add constant Id. Decorate the package
stub prior to analyzing its aspects. Save and restore the configuration
switches.
(Analyze_Task_Body_Stub): Add constant Id. Decorate the package stub
prior to analyzing its aspects.
* sem_ch13.adb (Analyze_Aspect_Specifications_On_Body_Or_Stub): Renamed
to Analyze_Aspects_On_Subprogram_Body_Or_Stub.
* sem_ch13.ads (Analyze_Aspect_Specifications_On_Body_Or_Stub): Renamed
to Analyze_Aspects_On_Subprogram_Body_Or_Stub.
* sem_prag.adb: Code reformatting.
(Analyze_Refined_Depends_Global_Post): Consider task body stubs.
From-SVN: r260469
This properly links with libsocket when needed by the user code.
2018-05-21 Jerome Lambourg <lambourg@adacore.com>
gcc/ada/
* gcc-interface/Makefile.in: Add g-soliop__qnx.ads to the runtime build
for QNX.
From-SVN: r260468
This patch corrects the part of the access-before-elaboration mechanism which
ensures that the freeze node of a tagged type is within the early call region
of all its overriding bodies to ignore predefined primitives.
------------
-- Source --
------------
-- pack.ads
package Pack with SPARK_Mode is
type Parent_Typ is tagged null record;
procedure Prim (Obj : Parent_Typ);
type Deriv_Typ is new Parent_Typ with private;
overriding procedure Prim (Obj : Deriv_Typ);
private
type Deriv_Typ is new Parent_Typ with null record;
end Pack;
-----------------
-- Compilation --
-----------------
$ gcc -c pack.ads
2018-05-21 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* exp_cg.adb: Remove with and use clause for Exp_Disp.
* exp_ch9.adb: Remove with and use clause for Exp_Disp.
* exp_disp.adb (Is_Predefined_Dispatching_Operation): Moved to Sem_Util.
(Is_Predefined_Interface_Primitive): Moved to Sem_Util.
(Is_Predefined_Internal_Operation): Moved to Sem_Util.
* exp_disp.ads (Is_Predefined_Dispatching_Operation): Moved to Sem_Util.
(Is_Predefined_Interface_Primitive): Moved to Sem_Util.
(Is_Predefined_Internal_Operation): Moved to Sem_Util.
* exp_dist.adb: Remove with and use clause for Exp_Disp.
* freeze.adb: Remove with and use clause for Exp_Disp.
* sem_cat.adb: Remove with and use clause for Exp_Disp.
* sem_ch6.adb: Remove with and use clause for Exp_Disp.
* sem_ch12.adb: Remove with and use clause for Exp_Disp.
* sem_elab.adb (Check_Overriding_Primitive): Do not process predefined
primitives.
* sem_util.adb: Remove with and use clause for Exp_Disp.
(Is_Predefined_Dispatching_Operation): Moved from Exp_Disp.
(Is_Predefined_Interface_Primitive): Moved from Exp_Disp.
(Is_Predefined_Internal_Operation): Moved from Exp_Disp.
* sem_util.ads (Is_Predefined_Dispatching_Operation): Moved from
Exp_Disp.
(Is_Predefined_Interface_Primitive): Moved from Exp_Disp.
(Is_Predefined_Internal_Operation): Moved from Exp_Disp.
From-SVN: r260467
A type conversion may be illegal if the expression in the conversion has a
limited view of a type. This patch expands the error report to indicate the
presence of a limited view, and when the context is a package body it suggests
the addition of a regular with-clause to make the full view available.
Compiling client.adb must yield:
client.adb:6:16: invalid conversion, not compatible with limited view
of type "Map_Type" defined at maps.ads:2
client.adb:6:16: add with_clause for "Maps" to current unit
----
package Maps is
type Map_Type is null record;
end;
----
limited with Maps;
package Payloads is
function Get_Map return access Maps.Map_Type;
end;
----
with Maps;
package Maps2 is
type New_Map_Type is new Maps.Map_Type;
end;
----
with Maps2;
package Client is
procedure Foo (Map : Maps2.New_Map_Type) is null;
procedure Bar;
end;
----
with Payloads;
package body Client is
procedure Bar is
begin
Foo (Maps2.New_Map_Type (Payloads.Get_Map.all));
end;
end;
2018-05-21 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_res.adb (Valid_Conversion): Improve error message on an illegal
type conversion whose expression has a limited view of a type.
From-SVN: r260466
This patch fixes an omission in the expansion of loops over GNAT-specific
iterable objects. If the source includes an explicit name for the loop,
that name has to be preserved in the expanded code to allow exit statements
to mention it.
2018-05-21 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* exp_ch5.adb (Build_Formal_Container_Iteration): If source has
explicit name for iterator loop, preserve that name in expanded
construct, for possible use in exit statements.
gcc/testsuite/
* gnat.dg/exit1.adb: New testcase.
From-SVN: r260465
2018-05-21 Javier Miranda <miranda@adacore.com>
gcc/ada/
* sem_ch4.adb (Analyze_Membership_Op): Avoid compiler crash when the
spec of a unit has Ada 2012 membership tests with multiple choices and
the unit body is not compiled under Ada 2012 mode.
From-SVN: r260464
2018-05-21 Doug Rupp <rupp@adacore.com>
gcc/ada/
* sigtramp-vxworks-target.inc: Set cfa_reg properly from sigcontext
pregs.
(CFI_COMMON_REGS): Restore LR jic probed from prologue.
(REGNO_PC_OFFSET): Change to correct value for Aarch64.
From-SVN: r260463
This patch refines the handling of the well-known syntactic ambiguity created
by a function with defaulted parameters that returns an array, so that F (X)
may designate a call to the function, or an indexing of a parameterless call.
This patch handles the case where such a call is itself the prefix of another
call, and the function is a primitive operation invoked in prefix form.
2018-05-21 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch4.adb (Analyze_One_Call): Recognize complex cases where an
indexed call originally in prefix forn is itself the prefix of a
further call.
gcc/testsuite/
* gnat.dg/array30.adb: New testcase.
From-SVN: r260461
2018-05-21 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* sem_eval.adb (Is_Null_Range): Clarify access to the full view of a
type.
(Not_Null_Range): Same as above.
From-SVN: r260460
In the frontend inlining used in GNATprove, inlining of a return statement
was using an unchecked type conversion, which could cause a necessary
run-time check on the conversion to be skipped. Now fixed.
There is no impact on compilation.
2018-05-21 Yannick Moy <moy@adacore.com>
gcc/ada/
* inline.adb (Expand_Inlined_Call.Process_Formals): Use a type
conversion instead of an unchecked type conversion when inlining a
return statement, unless type qualification is required (for character
and string literal) or no check can result from the conversion (for
access types).
* opt.ads: Update comment.
From-SVN: r260458
This patch modifies the semantics of pragma Elaboration_Checks. The pragma
was intended to be a configuration pragma, however its placement was never
verified until now.
The pragma may appear in the following contexts:
* Configuration pragmas file
* Prior to the context clauses of a compilation unit's initial declaration
Any other placement of the pragma will result in a warning and the effects of
the offending pragma will be ignored.
------------
-- Source --
------------
-- elab_checks_1.adc
pragma Elaboration_Checks (Dynamic);
-- elab_checks_2.adc
pragma Elaboration_Checks (Dynamic);
pragma Elaboration_Checks (Static); -- Error
-- pack_1.ads
pragma Elaboration_Checks (Static); -- OK
package Pack_1 is
end Pack_1;
-- pack_2.ads
pragma Elaboration_Checks (Static); -- OK
pragma Elaboration_Checks (Static); -- Error
package Pack_2 is
end Pack_2;
-- pack_3.ads
package Pack_3 is
procedure Proc;
end Pack_3;
-- pack_3.adb
pragma Elaboration_Checks (Static); -- Error
package body Pack_3 is
procedure Proc is begin null; end Proc;
end Pack_3;
-- pack_4.ads
package Pack_4 is
procedure Proc;
end Pack_4;
-- pack_4.adb
package body Pack_4 is
procedure Proc is separate;
end Pack_4;
-- pack_4-proc.adb
pragma Elaboration_Checks (Static); -- Error
separate (Pack_4)
procedure Proc is begin null; end Proc;
-- gen.ads
generic
with function Called_At_Elaboration return Boolean;
package Gen is
procedure Proc;
end Gen;
-- gen.adb
package body Gen is
procedure Proc is
Obj : constant Boolean := Called_At_Elaboration;
begin null; end Proc;
begin
Proc;
end Gen;
-- abe_static.ads
pragma Elaboration_Checks (Static);
with Gen;
package ABE_Static is
function ABE return Boolean;
package Inst_1 is new Gen (ABE);
end ABE_Static;
-- abe_static.adb
package body ABE_Static is
package Inst_2 is new Gen (ABE);
package Subunit is
end Subunit;
package body Subunit is separate;
function ABE return Boolean is
begin
return True;
end ABE;
end ABE_Static;
-- abe_static-subunit.adb
separate (ABE_Static)
package body Subunit is
package Inst_3 is new Gen (ABE);
package Nested_Subunit is
end Nested_Subunit;
package body Nested_Subunit is separate;
end Subunit;
-- abe_static-subunit-nested_subunit.adb
separate (ABE_Static.Subunit)
package body Nested_Subunit is
package Inst_4 is new Gen (ABE);
end Nested_Subunit;
-- abe_static_main.adb
with ABE_Static;
procedure ABE_Static_Main is begin null; end ABE_Static_Main;
----------------------------
-- Compilation and output --
----------------------------
$ gcc -c pack_1.ads -gnatec=elab_checks_1.adc
$ gcc -c pack_1.ads -gnatec=elab_checks_2.adc
$ gcc -c pack_1.ads
$ gcc -c pack_2.ads
$ gcc -c pack_3.adb
$ gcc -c pack_4.adb
$ gnatmake -q -gnatE abe_static_main.adb
elab_checks_2.adc:2:01: pragma "Elaboration_Checks" duplicates pragma declared
at line 1
pack_2.ads:2:01: pragma "Elaboration_Checks" duplicates pragma declared at line
1
pack_3.adb:1:01: warning: effects of pragma "Elaboration_Checks" are ignored
pack_3.adb:1:01: warning: place pragma on initial declaration of library unit
pack_4-proc.adb:1:01: warning: effects of pragma "Elaboration_Checks" are
ignored
pack_4-proc.adb:1:01: warning: place pragma on initial declaration of library
unit
abe_static.adb:2:04: warning: in instantiation at gen.adb:3
abe_static.adb:2:04: warning: cannot call "ABE" before body seen
abe_static.adb:2:04: warning: Program_Error may be raised at run time
abe_static.adb:2:04: warning: body of unit "ABE_Static" elaborated
abe_static.adb:2:04: warning: procedure "Proc" called at gen.adb:6, instance
at line 2
abe_static.adb:2:04: warning: function "ABE" called at gen.adb:3, instance at
line 2
abe_static.ads:8:04: warning: in instantiation at gen.adb:3
abe_static.ads:8:04: warning: cannot call "ABE" before body seen
abe_static.ads:8:04: warning: Program_Error may be raised at run time
abe_static.ads:8:04: warning: spec of unit "ABE_Static" elaborated
abe_static.ads:8:04: warning: procedure "Proc" called at gen.adb:6, instance
at line 8
abe_static.ads:8:04: warning: function "ABE" called at gen.adb:3, instance at
line 8
abe_static-subunit.adb:4:04: warning: in instantiation at gen.adb:3
abe_static-subunit.adb:4:04: warning: cannot call "ABE" before body seen
abe_static-subunit.adb:4:04: warning: Program_Error may be raised at run time
abe_static-subunit.adb:4:04: warning: body of unit "ABE_Static" elaborated
abe_static-subunit.adb:4:04: warning: procedure "Proc" called at gen.adb:6,
instance at line 4
abe_static-subunit.adb:4:04: warning: function "ABE" called at gen.adb:3,
instance at line 4
abe_static-subunit-nested_subunit.adb:4:04: warning: in instantiation at
gen.adb:3
abe_static-subunit-nested_subunit.adb:4:04: warning: cannot call "ABE" before
body seen
abe_static-subunit-nested_subunit.adb:4:04: warning: Program_Error may be
raised at run time
abe_static-subunit-nested_subunit.adb:4:04: warning: body of unit
"ABE_Static" elaborated
abe_static-subunit-nested_subunit.adb:4:04: warning: procedure "Proc" called
at gen.adb:6, instance at line 4
abe_static-subunit-nested_subunit.adb:4:04: warning: function "ABE" called at
gen.adb:3, instance at line 4
warning: "abe_static_main.adb" has dynamic elaboration checks and with's
warning: "abe_static.ads" which has static elaboration checks
2018-05-21 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Install the elaboration
model of the compilation unit spec, if any.
* sem_ch7.adb (Analyze_Package_Body_Helper): Install the elaboration
model of the compilation unit spec, if any.
* sem_ch10.adb (Analyze_Subunit): Install the elaboration model of the
parent compilation unit spec, if any.
* sem_elab.adb (Check_Elaboration_Scenarios): Restore the elaboration
model of the main unit.
(Is_Same_Unit): The routine now uses Unit_Entity.
(Is_Subunit): Removed.
(Normalize_Unit): Removed.
(Unit_Entity): New routine.
* sem_prag.adb (Analyze_Pragma): Reimplement the handling of pragma
Elaboration_Checks. The analysis now ensures that the pragma appears at
the configuration level, and on the initial declaration of a unit.
Other placements are either flagged as illegal, or ignored.
(Check_Duplicate_Elaboration_Checks_Pragma): New routine.
(Ignore_Elaboration_Checks_Pragma): New routine.
* sem_util.adb (Install_Elaboration_Model): New routine.
* sem_util.ads (Install_Elaboration_Model): New routine.
* doc/gnat_rm/implementation_defined_pragmas.rst: Update the
documentation of pragma Elaboration_Checks.
* gnat_rm.texi: Regenerate.
From-SVN: r260457
Any program calling Gnat.Traceback.Symbolic.Enable_Cache for
dwarf based symbolization fails with a segmentation violation
when spawned with an inaccurate argv[0] such that it couldn't
be found on PATH.
argv[0] is most often found on PATH. One plausible case where
it isn't is when argv[0] is a mere file name and . isn't on PATH,
which might happen out of imprecise exec calls.
This change robustifies the Traceback.Symbolic implementation
to work in this case as well, by just trying to work with argv[0]
untouched as the executable file to fetch dwarf info from.
2018-05-21 Olivier Hainque <hainque@adacore.com>
gcc/ada/
* libgnat/s-trasym__dwarf.adb (Executable_Name): Return argv[0] instead
of empty string when argv[0] couldn't be found on PATH.
(Enable_Cache): Raise Program_Error instead of attempting a null
pointer dereference when the Exec_Module initialization failed.
From-SVN: r260456
Explicit External aspect was an equivalant to an implicit default. It was only
needed as a workaround for a frontend bug. (If it meant to serve as
documentation, there should be explicit Effective_Reads and Effective_Writes
set to False too.)
No test, because these changes are semantically neutral.
2018-05-21 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* libgnarl/a-reatim.ads (Clock_Time): Remove External aspect.
* libgnarl/a-taside.ads (Tasking_State): Likewise.
* libgnat/a-calend.ads (Clock_Time): Likewise.
From-SVN: r260455
During the special inlining done in GNATprove mode, a call in prefix
notation leads to a spurious error. Now fixed.
2018-05-21 Yannick Moy <moy@adacore.com>
gcc/ada/
* sem_ch6.adb (Analyze_Procedure_Call): Refine test to recognize prefix
call notation in inlined call in GNATprove mode.
From-SVN: r260454