- 22 May, 2018 19 commits
-
-
2018-05-22 Bob Duff <duff@adacore.com> gcc/ada/ * binde.adb: (Choose): Ignore a pragma Elaborate_Body that appears in the spec of a SAL_Interface package. From-SVN: r260517
Bob Duff committed -
This patch fixes a spurious visiblity error on an instantiation of a generic package that contains a type declaration with an aspect specification for an aspect that must be delayed (i.e. an aspect whose value may be specified at a later point). The package g.ads must compile quietly: ---- with S; generic package G is type Buffer_Type is record Data : Integer; end record; package Buffer is new S (Buffer_Type => Buffer_Type); end G; ---- generic type Buffer_Type is private; package S is Page_Size : constant := 4096; type Reader_Type is limited record Data : Buffer_Type; end record with Alignment => Page_Size; -- Using a constant does not work -- Alignment => 4096; -- Using a number works -- for Reader_Type'Alignment use Page_Size; -- so does an attribute. pragma Compile_Time_Error (Reader_Type'Size /= 12345, "Ooops"); -- Note: We set 'Alignment and check for 'Size. end S; 2018-05-22 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * freeze.adb (Freeze_Entity): When analyzing delayed aspects of an entity E within a generic unit, indicate that there are no remaining delayed aspects after invoking Analyze_Aspects_At_Freeze_Point. The entity E is not frozen yet but the aspects should not be reanalyzed at the freeze point, which may be outside of the generic and may not have the proper visibility. From-SVN: r260516
Ed Schonberg committed -
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
Bob Duff committed -
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
Ed Schonberg committed -
Real board requires fat alignment of stack. 2018-05-22 Doug Rupp <rupp@adacore.com> gcc/ada/ * sigtramp-vxworks-target.inc: Align stack to 128bits on AArch64. From-SVN: r260513
Doug Rupp committed -
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
Jerome Lambourg committed -
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
Ed Schonberg committed -
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
Olivier Hainque committed -
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
Javier Miranda committed -
2018-05-22 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * exp_ch5.adb, freeze.adb, pprint.adb, sem_ch4.adb, sem_res.adb: Minor reformattings. From-SVN: r260508
Hristian Kirtchev committed -
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
Justin Squirek committed -
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
Hristian Kirtchev committed -
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
Richard Sandiford committed -
2018-05-22 Richard Biener <rguenther@suse.de> PR tree-optimization/85834 * tree-ssa-sccvn.c (vn_reference_lookup_3): Properly handle non-constant and non-zero memset arguments. * g++.dg/torture/pr85834.C: New testcase. * gcc.dg/tree-ssa/ssa-fre-64.c: Likewise. From-SVN: r260503
Richard Biener committed -
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
Martin Liska committed -
re PR tree-optimization/85863 (ICE in compiling spec2006 fortran test case solib.fppized.f starting with r260283) 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
Richard Biener committed -
From-SVN: r260500
Bin Cheng committed -
2018-05-22 Janus Weil <janus@gcc.gnu.org> PR fortran/85841 * libgfortran.h: Remove the macros GFC_STD_F2008_TS and GFC_STD_OPT_F08TS. * error.c (notify_std_msg): Remove GFC_STD_F2008_TS. * options.c (set_default_std_flags): Ditto. (gfc_handle_option): Make -std=f2008ts an alias for -std=f2018. * array.c (gfc_match_array_spec): Replace GFC_STD_F2008_TS by GFC_STD_F2018. * check.c (gfc_check_atomic, gfc_check_event_query, gfc_check_c_f_pointer, gfc_check_c_f_procpointer, gfc_check_c_funloc, gfc_check_c_loc, gfc_check_num_images, gfc_check_this_image): Ditto. * decl.c (gfc_verify_c_interop_param, gfc_match_decl_type_spec): Ditto. * intrinsic.c (add_functions, add_subroutines, gfc_check_intrinsic_standard): Ditto. * iso-c-binding.def: Ditto. * iso-fortran-env.def: Ditto. * match.c (gfc_match_event_post, gfc_match_event_wait, gfc_match_fail_image, gfc_match_form_team, gfc_match_change_team, gfc_match_end_team, gfc_match_sync_team): Ditto. * gfortran.texi: Remove mention of -std=f2008ts. Move TSs into F2018 section. * invoke.texi: Update documentation of -std=f2008ts. 2018-05-22 Janus Weil <janus@gcc.gnu.org> PR fortran/85841 * gfortran.dg/assumed_rank_5.f90: Update error message. * gfortran.dg/assumed_type_4.f90: Ditto. * gfortran.dg/bind_c_array_params.f03: Ditto. * gfortran.dg/bind_c_usage_28.f90: Ditto. * gfortran.dg/c_funloc_tests_5.f03: Ditto. * gfortran.dg/c_funloc_tests_6.f90: Ditto. * gfortran.dg/c_loc_tests_11.f03: Ditto. * gfortran.dg/coarray_atomic_2.f90: Ditto. * gfortran.dg/coarray_collectives_2.f90: Ditto. * gfortran.dg/coarray_collectives_10.f90: Ditto. * gfortran.dg/coarray_collectives_13.f90: Ditto. * gfortran.dg/rank_3.f90: Ditto. * gfortran.dg/error_stop_4.f90: Replace -std=f2008ts by -std=f2008. * gfortran.dg/implicit_14.f90: Ditto. From-SVN: r260499
Janus Weil committed -
From-SVN: r260497
GCC Administrator committed
-
- 21 May, 2018 21 commits
-
-
From-SVN: r260492
Joseph Myers committed -
2018-05-21 Christian Groessler <chris@groessler.org> * gcc.c-torture/compile/simd-5.c: Fix comment. From-SVN: r260491
Christian Groessler committed -
re PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM double-double format) 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
Michael Meissner committed -
re PR target/85657 (Make __ibm128 a separate type, even if long double uses the IBM double-double format) [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
Michael Meissner committed -
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
Richard Sandiford committed -
2018-05-21 Janus Weil <janus@gcc.gnu.org> PR fortran/85841 PR testsuite/85865 * testsuite/libgomp.fortran/collapse2.f90: Add option "-std=legacy". * testsuite/libgomp.fortran/omp_atomic2.f90: Ditto. * testsuite/libgomp.fortran/omp_parse1.f90: Ditto. * testsuite/libgomp.fortran/omp_parse3.f90: Ditto. * testsuite/libgomp.fortran/task2.f90: Ditto. * testsuite/libgomp.fortran/vla1.f90: Ditto. * testsuite/libgomp.fortran/vla2.f90: Ditto. * testsuite/libgomp.fortran/vla3.f90: Ditto. * testsuite/libgomp.fortran/vla4.f90: Ditto. * testsuite/libgomp.fortran/vla5.f90: Ditto. * testsuite/libgomp.fortran/vla6.f90: Ditto. * testsuite/libgomp.fortran/vla8.f90: Ditto. * testsuite/libgomp.oacc-fortran/collapse-2.f90: Ditto. * testsuite/libgomp.oacc-fortran/nested-function-1.f90: Ditto. From-SVN: r260487
Janus Weil committed -
2018-05-21 Paolo Carlini <paolo.carlini@oracle.com> * parser.c (cp_parser_parameter_declaration_list): Remove bool* parameter. (cp_parser_parameter_declaration_clause): Adjust. (cp_parser_cache_defarg): Likewise. From-SVN: r260486
Paolo Carlini committed -
PR gcc/84923 * varasm.c (weak_finish): Clean up weak_decls. From-SVN: r260485
Vladimir Mezentsev committed -
/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
Paolo Carlini committed -
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
Steven G. Kargl committed -
2018-05-21 Steven G. Kargl <kargl@gcc.gnu.org> * 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: r260480
Steven G. Kargl committed -
C++17 added new overloads to <fstream> class templates to support opening files from wide character strings "on systems where filesystem::path::value_type is not char". This patch adds those overloads conditional on _wfopen being available, and enables them for pre-C++17 modes as well. Add support for opening file streams from wide character strings. * config/io/basic_file_stdio.cc [_GLIBCXX_HAVE__WFOPEN] (__basic_file<char>::open(const wchar_t*, ios_base::openmode)): Define new overload. * config/io/basic_file_stdio.h [_GLIBCXX_HAVE__WFOPEN] (__basic_file<char>::open(const wchar_t*, ios_base::openmode)): Declare new overload. * configure.ac: Check for _wfopen. * crossconfig.m4: Likewise. * configure: Regenerate. * config.h.in: Regenerate. * include/bits/fstream.tcc [_GLIBCXX_HAVE__WFOPEN] (basic_filebuf<C,T>::open(const wchar_t*, ios_base::openmode)): Define new overload. * include/std/fstream [_GLIBCXX_HAVE__WFOPEN] (basic_filebuf<C,T>::open(const wchar_t*, ios_base::openmode)): Declare new overload. [_GLIBCXX_HAVE__WFOPEN] (basic_ifstream<C,T>::basic_ifstream(const wchar_t*, openmode)) (basic_ifstream<C,T>::basic_open(const wchar_t*, openmode)) (basic_ofstream<C,T>::basic_ifstream(const wchar_t*, openmode)) (basic_ofstream<C,T>::basic_open(const wchar_t*, openmode)) (basic_fstream<C,T>::basic_ifstream(const wchar_t*, openmode)) (basic_fstream<C,T>::basic_open(const wchar_t*, openmode)): Define new overloads. * testsuite/27_io/basic_filebuf/open/wchar_t/1.cc: New. * testsuite/27_io/basic_ifstream/cons/wchar_t/1.cc: New. * testsuite/27_io/basic_ifstream/open/wchar_t/1.cc: New. * testsuite/27_io/basic_ofstream/cons/wchar_t/1.cc: New. * testsuite/27_io/basic_ofstream/open/wchar_t/1.cc: New. * testsuite/27_io/basic_fstream/cons/wchar_t/1.cc: New. * testsuite/27_io/basic_fstream/open/wchar_t/1.cc: New. From-SVN: r260479
Jonathan Wakely committed -
2018-05-21 François Dumont <fdumont@gcc.gnu.org> PR libstdc++/85845 * include/bits/stl_tree.h (_Rb_tree_impl(_Rb_tree_impl&&, _Node_allocator&&)): Fix noexcept qualification. From-SVN: r260478
François Dumont committed -
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
Kyrylo Tkachov committed -
From-SVN: r260472
Pierre-Marie de Rodat committed -
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
Ed Schonberg committed -
2018-05-21 Daniel Mercier <mercier@adacore.com> gcc/ada/ * pprint.adb: Use mixed case for attribute names. From-SVN: r260470
Daniel Mercier committed -
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
Hristian Kirtchev committed -
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
Jerome Lambourg committed -
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
Hristian Kirtchev committed -
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
Ed Schonberg committed
-