aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2018-07-17pr57150.c: Require longdouble128.David Edelsohn3-0/+7
* gcc.target/powerpc/pr57150.c: Require longdouble128. * gcc.target/powerpc/pr79916.c: Require dfp. From-SVN: r262826
2018-07-17PR c++/86480 - nested variadic lambda and constexpr if.Jason Merrill4-1/+54
* pt.c (find_parameter_packs_r) [IF_STMT]: Don't walk into IF_STMT_EXTRA_ARGS. * tree.c (cp_walk_subtrees) [DECLTYPE_TYPE]: Set cp_unevaluated_operand. [ALIGNOF_EXPR] [SIZEOF_EXPR] [NOEXCEPT_EXPR]: Likewise. From-SVN: r262825
2018-07-17PR libstdc++/86450 use -Wabi=2 and simplify -Werror useJonathan Wakely17-91/+55
Use -Wabi=2 to fix warnings about -Wabi having no effect on its own. This requires suppressing two warnings in src/c++11/debug.cc which do not affect the library ABI. Previously libstdc++ defaulted to --enable-werror but the -Werror flag was not actually added unless --enable-maintainer-mode was used. This is not documented and not the expected behaviour. This removes any special treatment for maintainer-mode, makes -Werror depend directly on --enable-werror, and changes the default to --enable-werror=no. PR libstdc++/86450 * acinclude.m4 (GLIBCXX_CHECK_COMPILER_FEATURES): Don't define WERROR. (GLIBCXX_EXPORT_FLAGS): Use -Wabi=2 instead of -Wabi. * configure: Regenerate. * configure.ac: Change GLIBCXX_ENABLE_WERROR default to "no". * doc/Makefile.in: Regenerate. * fragment.am: Set WERROR_FLAG to -Werror instead of $(WERROR). * include/Makefile.in: Regenerate. * libsupc++/Makefile.in: Regenerate. * po/Makefile.in: Regenerate. * python/Makefile.in: Regenerate. * src/Makefile.in: Regenerate. * src/c++11/Makefile.in: Regenerate. * src/c++11/debug.cc: Use diagnostic pragmas to suppress warnings from -Wabi=2 that don't affect exported symbols. * src/c++98/Makefile.in: Regenerate. * src/filesystem/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. From-SVN: r262824
2018-07-17Remove unused explicit instantiation of __bind_simpleJonathan Wakely2-79/+12
The explicit instantiation of std::call_once used to require an instantiation of __bind_simple, but call_once was changed by r241031 to not use __bind_simple. The instantiation of __bind_simple (and the definitions it uses) are not needed. They should have been removed instead of doing the changes in r241111 that kept them compiling. The use of std::call_once by _Async_state_common::_M_join can be simplified to use a pointer instead of reference wrapper. The call_once symbol isn't exported so the change isn't visible outside the library. * src/c++11/compatibility-thread-c++0x.cc [_GLIBCXX_SHARED] (_Async_state_common::_M_join): Simplify use of std::call_once and corresponding explicit instantiation. (_Maybe_wrap_member_pointer, _Bind_simple, _Bind_simple_helper) (__bind_simple): Remove definitions and explicit instantiation that are not required by exported symbols. From-SVN: r262823
2018-07-17[ARC] Don't use deprecated align_labels_log variable.Claudiu Zissulescu2-4/+10
2018-07-17 Claudiu Zissulescu <claziss@synopsys.com> * config/arc/arc.c (arc_label_align): Use alogn_labels instead of deprecated align_labels_log. From-SVN: r262820
2018-07-17re PR debug/86456 (Segfault in switch_to_section at gcc/varasm.c:7353 since ↵Richard Biener4-3/+35
r259317) 2018-07-17 Richard Biener <rguenther@suse.de> PR lto/86456 * dwarf2out.c (init_sections_and_labels): Always generate a debug_line_str_section for early LTO debug. (dwarf2out_finish): Reset debug_line_str_hash output early. Bump counter for extra dwarf5 .debug_loc labels to not conflict with fat LTO part. (dwarf2out_early_finish): Output debug_line_str. * g++.dg/debug/dwarf2/pr86456.C: New testcase. From-SVN: r262819
2018-07-17S/390: Do not use LA with index register on z196 or newer.Robin Dapp2-5/+10
gcc/ChangeLog: 2018-07-17 Robin Dapp <rdapp@linux.ibm.com> * config/s390/s390.c (preferred_la_operand_p): Do not use LA with index register on z196 or later. From-SVN: r262818
2018-07-17S/390: Set default function alignment to 16.Robin Dapp6-0/+95
gcc/ChangeLog: 2018-07-17 Robin Dapp <rdapp@linux.ibm.com> * config/s390/s390.c (s390_default_align): Set default function alignment to 16. (s390_override_options_after_change): Call s390_default align. (s390_option_override_internal): Call s390_default_align. (TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Define. gcc/testsuite/ChangeLog: 2018-07-17 Robin Dapp <rdapp@linux.ibm.com> * gcc.target/s390/function-align1.c: New test. * gcc.target/s390/function-align2.c: New test. * gcc.target/s390/function-align3.c: New test. From-SVN: r262817
2018-07-17re PR middle-end/86542 (wrong-code for collapsed taskloop which needs omp_cpyfn)Jakub Jelinek4-1/+60
PR middle-end/86542 * omp-low.c (create_task_copyfn): Copy over also fields corresponding to _looptemp_ clauses, other than the first two. * testsuite/libgomp.c++/pr86542.C: New test. From-SVN: r262815
2018-07-17decl.c (choices_to_gnu): Rename parameters.Eric Botcazou5-61/+92
* gcc-interface/decl.c (choices_to_gnu): Rename parameters. Deal with an operand of Character type. Factor out range generation to the end. Check that the bounds are literals and convert them to the type of the operand before building the ranges. * gcc-interface/utils.c (make_dummy_type): Minor tweak. (make_packable_type): Propagate TYPE_DEBUG_TYPE. (maybe_pad_type): Likewise. From-SVN: r262812
2018-07-17Add -fomit-frame-pointer to gcc.target/i386/vartrack-1.cRainer Orth2-1/+6
* gcc.target/i386/vartrack-1.c (dg-options): Add -fomit-frame-pointer. From-SVN: r262811
2018-07-17Build gcc/testsuite/g++.dg/lto/pr86523-[12]_0.C as PICRainer Orth3-2/+12
* g++.dg/lto/pr86523-1_0.C: Require fpic, shared support. (dg-lto-options): Add -fPIC. * g++.dg/lto/pr86523-2_0.C: Likewise. From-SVN: r262810
2018-07-17Do not enable OPT_falign_* for -Os.Martin Liska2-4/+8
2018-07-17 Martin Liska <mliska@suse.cz> * opts.c: Do not enable OPT_falign_* for -Os. From-SVN: r262807
2018-07-17Define MAX_CODE_ALIGN globally.Martin Liska5-8/+15
2018-07-17 Martin Liska <mliska@suse.cz> * align.h (MAX_CODE_ALIGN): New. (MAX_CODE_ALIGN_VALUE): New. * common/config/i386/i386-common.c (ix86_handle_option): (MAX_CODE_ALIGN): Moved to align.h. * final.c (MAX_CODE_ALIGN): Likewise. * opts.c (parse_and_check_align_values): (MAX_CODE_ALIGN): Likewise. (MAX_CODE_ALIGN_VALUE): Likewise. From-SVN: r262806
2018-07-17Fix coding style of ASM_OUTPUT_ALIGN.Martin Liska10-10/+24
2018-07-17 Martin Liska <mliska@suse.cz> * config/i386/att.h (ASM_OUTPUT_ALIGN): Fix spacing in order to fulfil coding style. * config/i386/cygming.h (ASM_OUTPUT_ALIGN): Likewise. * config/i386/gas.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. * config/i386/x86-64.h (ASM_OUTPUT_MAX_SKIP_PAD): Likewise. * config/iq2000/iq2000.h (ASM_OUTPUT_ALIGN): Likewise. * config/pa/pa.h (ASM_OUTPUT_ALIGN): Likewise. * config/sparc/sol2.h (ASM_OUTPUT_ALIGN_WITH_NOP): Likewise. * config/sparc/sparc.h (ASM_OUTPUT_ALIGN): Likewise. * config/visium/visium.h (ASM_OUTPUT_ALIGN): Likewise. (ASM_OUTPUT_MAX_SKIP_ALIGN): Likewise. From-SVN: r262805
2018-07-17Clean up of new format of -falign-FOO.Martin Liska32-390/+358
2018-07-17 Martin Liska <mliska@suse.cz> * align.h: New file. * config/alpha/alpha.c (alpha_align_insns_1): Use align_functions directly. * config/i386/i386.c (ix86_avoid_jump_mispredicts): Use new return type align_flags of label_to_alignment. * config/m32r/m32r.h (LOOP_ALIGN): Wrap returned values into align_flags class. * config/m68k/m68k.c: Do not use removed align_labels_value and align_loops_value. * config/nds32/nds32.h (JUMP_ALIGN): Wrap result into align_flags class. (LOOP_ALIGN): Likewise. (LABEL_ALIGN): Likewise. * config/powerpcspe/powerpcspe.c (TARGET_ASM_LOOP_ALIGN_MAX_SKIP): Remove not used macro. (rs6000_loop_align): Change return type to align_flags. (rs6000_loop_align_max_skip): Remove. * config/rs6000/rs6000-protos.h (rs6000_loop_align): Change return type to align_flags. * config/rs6000/rs6000.c (TARGET_ASM_LOOP_ALIGN_MAX_SKIP): Remove not used macro. (rs6000_loop_align): Change return type to align_flags. (rs6000_loop_align_max_skip): Remove. * config/rx/rx.h (JUMP_ALIGN): Wrap integer values * config/rx/rx-protos.h (rx_align_for_label): Make it static function. * config/rx/rx.c (rx_align_for_label): Change return type to align_flags. (rx_max_skip_for_label): Remove TARGET_ASM_*_ALIGN_MAX_SKIP macro definitions. into align_flags class. (LABEL_ALIGN): Likewise. (LOOP_ALIGN): Likewise. * config/s390/s390.c (s390_label_align): Use align_flags class member. (s390_asm_output_function_label): Likewise. * config/sh/sh.c (sh_override_options_after_change): Use align_flags class directly without macros. (find_barrier): Likewise. (barrier_align): Likewise. (sh_loop_align): Likewise. * config/spu/spu.c (spu_option_override): Use align_flags_tuple::get_value instead of removed macros. (spu_sched_init): Likewise. * config/spu/spu.h (GTY): Likewise. * config/visium/visium.c (visium_option_override): Set "8" as default secondary alignment. * config/visium/visium.h (SUBALIGN_LOG): Define to 3 in order to guarantee secondary alignment of 8. * coretypes.h: Include align.h header file. * doc/tm.texi: Remove TARGET_ASM_JUMP_ALIGN_MAX_SKIP, TARGET_ASM_LOOP_ALIGN_MAX_SKIP, TARGET_ASM_LABEL_ALIGN_MAX_SKIP and TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP macros. * doc/tm.texi.in: Likewise. * final.c (struct label_alignment): Remove not used structure. (LABEL_ALIGN): Change type to align_flags. (LOOP_ALIGN): Likewise. (JUMP_ALIGN): Likewise. (default_loop_align_max_skip): Remove. (default_label_align_max_skip): Likewise. (default_jump_align_max_skip): Likewise. (default_label_align_after_barrier_max_skip): (LABEL_TO_ALIGNMENT): Change to access label_align vector. (LABEL_TO_MAX_SKIP): Remove. (label_to_alignment): Return align_flags type instead of integer. (label_to_max_skip): Remove. (align_fuzz): Use align_flags type. (compute_alignments): Use align_flags type and use align_flags::max to combine multiple alignments. (grow_label_align): Grow vec instead of C array. (update_alignments): Assign just LABEL_TO_ALIGNMENT. (shorten_branches): Use align_flags type and use align_flags::max to combine multiple alignments. (final_scan_insn_1): Remove usage of secondary alignment that comes from label alignment, but instead use proper secondary alignment which is computed in grow_label_align. * flags.h (struct align_flags_tuple): Move to align.h. (struct align_flags): Likewise. (state_align_loops): Rename to align_loops. (state_align_jumps): Rename to align_jumps. (state_align_labels): Rename to align_labels. (state_align_functions): Rename to align_functions. (align_loops_log): Remove. (align_jumps_log): Remove. (align_labels_log): Remove. (align_functions_log): Remove. (align_loops_max_skip): Remove. (align_jumps_max_skip): Remove. (align_labels_max_skip): Remove. (align_functions_max_skip): Remove. (align_loops_value): Remove. (align_jumps_value): Remove. (align_labels_value): Remove. (align_functions_value): Remove. * output.h (label_to_alignment): Change return type to align_flags. (label_to_max_skip): Remove. * target.def: Remove loop_align_max_skip, label_align_max_skip, jump_align_max_skip macros. * targhooks.h (default_loop_align_max_skip): Remove. (default_label_align_max_skip): Likewise. (default_jump_align_max_skip): Likewise. (default_label_align_after_barrier_max_skip): Remove. * toplev.c (read_log_maxskip): Use ::normalize function. (parse_N_M): Remove not used argument and also call ::normalize. (parse_alignment_opts): Do not pass unused arguments. * varasm.c (assemble_start_function): Use directly align_functions instead of removed macros. * system.h: Do not poison removed macros. 2018-07-17 Martin Liska <mliska@suse.cz> * gcc.target/powerpc/loop_align.c: Update scanned pattern. From-SVN: r262804
2018-07-17[Ada] Spurious error on prefixed call in an instantiationEd Schonberg5-22/+146
This patch fixes a spurious error on a prefixed call in an instance, when the generic parameters include an interface type and an abstract operation of that type, and the actuals in the instance include an interface type and a corresponding abstract operation of it, with a different name than the corresponding generic subprogram parameter. The patch also fixes a similar error involving class-wide operations and generic private types. 2018-07-17 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch4.adb (Try_Object_Operation): Handle properly a prefixed call in an instance, when the generic parameters include an interface type and a abstract operation of that type, and the actuals in the instance include an interface type and a corresponding abstract operation of it, with a different name than the corresponding generic subprogram parameter. gcc/testsuite/ * gnat.dg/generic_call_cw.adb, gnat.dg/generic_call_iface.adb: New testcase. From-SVN: r262803
2018-07-17[Ada] Preserve original CE reason in more casesArnaud Charlet2-3/+15
2018-07-17 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * sem_eval.adb (Rewrite_In_Raise_CE): Keep the original reason in more cases. From-SVN: r262802
2018-07-17[Ada] Add provision for floating-point in Apply_Division_CheckArnaud Charlet2-7/+23
2018-07-17 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * checks.adb (Apply_Division_Check): Add provision for floating-point checks. From-SVN: r262801
2018-07-17[Ada] Fix expansion of aggregates components rewritten to raise statementsEd Schonberg2-0/+35
2018-07-17 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * exp_aggr.adb (Component_OK_For_Backend): If an array component of the enclosing record has a bound that is out of range (and that has been rewritten as a raise statement) the aggregate is not OK for any back end, and should be expanded into individual assignments. From-SVN: r262800
2018-07-17[Ada] Reuse Is_Rewrite_Substitution in Relocate_NodePiotr Trojanek2-1/+5
Semantics not affected; the reused routine is exactly the same as the replaced condition. 2018-07-17 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * atree.adb (Relocate_Node): Simplify with Is_Rewrite_Substitution. From-SVN: r262799
2018-07-17[Ada] Fix RM rule referencesPiotr Trojanek3-4/+8
2018-07-17 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * sem_util.ads (Denotes_Same_Object): Likewise. * sem_warn.adb (Warn_On_Overlapping_Actuals): Fix RM rule references. From-SVN: r262798
2018-07-17[Ada] Fix incompatibility Default_Scalar_Storage_Order/tagged typesEric Botcazou5-14/+48
The pragma Default_Scalar_Storage_Order cannot reliably be used to set the non-default scalar storage order for a program that declares tagged types, if it also declares user-defined primitives. This is fixed by making Make_Tags use the same base array type as Make_DT and Make_Secondary_DT when accessing the array of user-defined primitives. 2018-07-17 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * exp_disp.adb (Make_Tags): When the type has user-defined primitives, build the access type that is later used by Build_Get_Prim_Op_Address as pointing to a subtype of Ada.Tags.Address_Array. gcc/testsuite/ * gnat.dg/sso10.adb, gnat.dg/sso10_pkg.ads: New testcase. From-SVN: r262797
2018-07-17[Ada] Use standard version of s-memory.adb for mingw32Patrick Bernardi5-228/+41
This patch switches mingw32 targets to use the standard version of s-memory.adb as Windows now has the capability of limiting the amount of memory used by process. 2018-07-17 Patrick Bernardi <bernardi@adacore.com> gcc/ada/ * libgnat/s-memory__mingw.adb: Remove. * Makefile.rtl: Remove s-memory.adb target pair from the Cygwin/Mingw32 section. gcc/testsuite/ * gnat.dg/memorytest.adb: New testcase. From-SVN: r262796
2018-07-17[Ada] Faulty ignored Ghost code removalHristian Kirtchev2-5/+13
This patch ensures that removal of ignored Ghost code is the absolute last operation performed on the tree. Previously the removal was performed prior to issuing delayed warnings, however the warning mechanism may see a heavily modified tree and fail. No small reproducer available. 2018-07-17 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * frontend.adb (Frontend): The removal of ignored Ghost code must be the last semantic operation performed on the tree. From-SVN: r262795
2018-07-17[Ada] Configuration state not observed for instance bodiesHristian Kirtchev12-194/+249
This patch ensures that the processing of instantiated and inlined bodies uses the proper configuration context available at the point of the instantiation or inlining. Previously configuration pragmas which appear prior to the context items of a unit would lose their effect when a body is instantiated or inlined. 2018-07-17 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * frontend.adb (Frontend): Update the call to Register_Config_Switches. * inline.ads: Add new component Config_Switches to record Pending_Body_Info which captures the configuration state of the pending body. Remove components Version, Version_Pragma, SPARK_Mode, and SPARK_Mode_Pragma from record Pending_Body_Info because they are already captured in component Config_Switches. * opt.adb (Register_Opt_Config_Switches): Rename to Register_Config_Switches. (Restore_Opt_Config_Switches): Rename to Restore_Config_Switches. (Save_Opt_Config_Switches): Rename to Save_Config_Switches. This routine is now a function, and returns the saved configuration state as an aggregate to avoid missing an attribute. (Set_Opt_Config_Switches): Rename to Set_Config_Switches. * opt.ads (Register_Opt_Config_Switches): Rename to Register_Config_Switches. (Restore_Opt_Config_Switches): Rename to Restore_Config_Switches. (Save_Opt_Config_Switches): Rename to Save_Config_Switches. This routine is now a function. (Set_Opt_Config_Switches): Rename to Set_Config_Switches. * par.adb (Par): Update the calls to configuration switch-related subprograms. * sem.adb (Semantics): Update the calls to configuration switch-related subprograms. * sem_ch10.adb (Analyze_Package_Body_Stub): Update the calls to configuration switch-related subprograms. (Analyze_Protected_Body_Stub): Update the calls to configuration switch-related subprograms. (Analyze_Subprogram_Body_Stub): Update calls to configuration switch-related subprograms. * sem_ch12.adb (Add_Pending_Instantiation): Update the capture of pending instantiation attributes. (Inline_Instance_Body): Update the capture of pending instantiation attributes. It is no longer needed to explicitly manipulate the SPARK mode. (Instantiate_Package_Body): Update the restoration of the context attributes. (Instantiate_Subprogram_Body): Update the restoration of context attributes. (Load_Parent_Of_Generic): Update the capture of pending instantiation attributes. (Set_Instance_Env): Update the way relevant configuration attributes are saved and restored. gcc/testsuite/ * gnat.dg/config_pragma1.adb, gnat.dg/config_pragma1_pkg.ads: New testcase. From-SVN: r262794
2018-07-17[Ada] ICE on renaming of result of binary operationEric Botcazou2-6/+10
2018-07-17 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Deal with more rvalues in the expression of a renaming. From-SVN: r262793
2018-07-17[Ada] Type mismatch warning for imported C++ classEric Botcazou7-55/+115
2018-07-17 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * gcc-interface/ada-tree.h (TYPE_RETURN_BY_DIRECT_REF_P): Define for METHOD_TYPE too. (TYPE_RETURN_UNCONSTRAINED_P): Likewise. (TYPE_CI_CO_LIST): Likewise. * gcc-interface/gigi.h (is_cplusplus_method): Delete. (fntype_same_flags_p): Adjust comment. * gcc-interface/decl.c (Has_Thiscall_Convention): Delete. (gnat_to_gnu_entity) <E_Subprogram_Type>: Do not set the "thiscall" attribute directly. (is_cplusplus_method): Make static and adjust head comment. (gnat_to_gnu_param): Return a pointer for the "this" parameter of C++ constructors. (gnat_to_gnu_subprog_type): Turn imported C++ constructors into their callable form. Generate a METHOD_TYPE node for imported C++ methods. Set param_list at the very end of the processing. (substitute_in_type) <METHOD_TYPE>: New case. * gcc-interface/misc.c (gnat_print_type) <METHOD_TYPE>: Likewise. (gnat_type_hash_eq): Accept METHOD_TYPE. * gcc-interface/trans.c (Identifier_to_gnu): Deal with METHOD_TYPE. (Attribute_to_gnu): Likewise. (Call_to_gnu): Likewise. (process_freeze_entity): Likewise. * gcc-interface/utils.c (create_subprog_decl): Adjust head comment. (fntype_same_flags_p): Likewise. From-SVN: r262792
2018-07-17[Ada] Remove extra parentheses in Expand_Inlined_CallPiotr Trojanek2-2/+6
2018-07-17 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * inline.adb (Expand_Inlined_Call): Remove extra parentheses. From-SVN: r262791
2018-07-17[Ada] Minor fix for imported C++ constructorsEric Botcazou2-9/+16
C++ constructors are imported as functions and then internally rewritten into procedures taking the "this" pointer as first parameter. Now this parameter is not of an access type but of the type directly, so it must be In/Out and not just In. 2018-07-17 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * exp_disp.adb (Gen_Parameters_Profile): Make the _Init parameter an In/Out parameter. (Set_CPP_Constructors): Adjust comment accordingly. From-SVN: r262790
2018-07-17[Ada] Assertion_Policy for class-wide preconditionBob Duff2-1/+6
This patch fixes the compiler to that class-wide preconditions on primitive operations of interfaces are not checked at run time when the Assertion_Policy indicates that they should be ignored. This is required by the RM. 2018-07-17 Bob Duff <duff@adacore.com> gcc/ada/ * exp_disp.adb (Build_Class_Wide_Check): Return early if the precondition is supposed to be ignored. From-SVN: r262789
2018-07-17[Ada] Missing check on illegal equality operation in subprogramEd Schonberg4-8/+43
In Ada2012 it is illegal to declare an equality operation on an untagged type when the operation is primitive and the type is already frozem (see RM 4.5.2 (9.8)). previously the test to detect this illegality only examined declarations within a package. This patch covers the case where type and operation are both declared within a subprogram body. 2018-07-17 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch6.adb (Check_Untagged_Equality): Extend check to operations declared in the same scope as the operand type, when that scope is a procedure. gcc/testsuite/ * gnat.dg/equal3.adb: New testcase. From-SVN: r262788
2018-07-17[Ada] Unnesting: don't use Get_Actual_Subtype for record subtypesEd Schonberg2-6/+32
2018-07-17 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * exp_unst.adb (Unnest_Subprograms): Do nothing if the expander is not active. Don't use Get_Actual_Subtype for record subtypes. Ignore rewritten identifiers and uplevel references to bounds of types that come from the original type reference. From-SVN: r262787
2018-07-17[Ada] Minor reformattingHristian Kirtchev12-133/+153
2018-07-17 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * exp_ch13.adb, exp_ch7.adb, exp_unst.adb, freeze.adb, libgnat/s-os_lib.adb, sem_ch3.adb, sem_ch3.ads, sem_ch5.adb, sem_eval.adb, sem_res.adb, sem_util.adb: Minor reformatting. From-SVN: r262786
2018-07-17[Ada] Crash processing abstract state aspect of a packageJavier Miranda8-227/+414
The compiler may crash processing an aspect Part_Of used in a package spec which has also an Initial_Condition aspect. After this patch the following test compiles fine. package P with SPARK_Mode => On, Abstract_State => (Count_State), Initial_Condition => (Get_Count = 0) -- Test is type Count_Type is range 0 .. 16; function Get_Count return Count_Type; procedure Dummy; private C: Count_Type := 0 with Part_Of => Count_State; -- Test function Get_Count return Count_Type is (C); end P; package body P with SPARK_Mode => On, Refined_State => (Count_State => C) is procedure Dummy is null; end P; Command: gcc -c p.adb 2018-07-17 Javier Miranda <miranda@adacore.com> gcc/ada/ * exp_ch13.adb (Expand_N_Freeze_Entity): Handle subtype declared for an iterator. * freeze.adb (Freeze_Expression): Handle freeze of an entity defined outside of a subprogram body. This case was previously handled during preanalysis; the frozen entities were remembered and left pending until we continued freezeing entities outside of the subprogram. Now, when climbing the parents chain to locate the correct placement for the freezeing node, we check if the entity can be frozen and only when no enclosing node is marked as Must_Not_Freeze the entity is frozen. * sem_ch3.ads (Preanalyze_Default_Expression): Declaration moved to the package body. * sem_ch3.adb (Preanalyze_Default_Expression): Code adjusted to invoke the new subprogram Preanalyze_With_Freezing_And_Resolve. * sem_ch6.adb (Preanalyze_Formal_Expression): New subprogram. (Analyze_Expression_Function, Process_Formals): Invoke Preanalyze_Formal_Expression instead of Preanalyze_Spec_Expression since the analysis of the formals may freeze entities. (Analyze_Subprogram_Body_Helper): Skip building the body of the class-wide clone for eliminated subprograms. * sem_res.ads, sem_res.adb (Preanalyze_And_Resolve): New subprogram. Its code is basically the previous version of this routine but extended with an additional parameter which is used to specify if during preanalysis we are allowed to freeze entities. If the new parameter is True then the subtree root node is marked as Must_Not_Freeze and no entities are frozen during preanalysis. (Preanalyze_And_Resolve): Invokes the internal version of Preanalyze_And_Resolve without entity freezing. (Preanalyze_With_Freezing_And_Resolve): Invokes the internal version of Prenalyze_And_Resolve with freezing enabled. From-SVN: r262785
2018-07-17[Ada] Consistent spelling of "i.e." in docs and commentsPiotr Trojanek3-6/+12
2018-07-17 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * einfo.ads, libgnat/g-comlin.ads: Minor change "ie" to "i.e." in docs and comments. From-SVN: r262784
2018-07-17[Ada] Argument_String_To_List creates empty items from whitespaceJustin Squirek4-53/+73
This patch corrects an issue whereby leading whitespace in a non-quoted argument list passed to Argument_String_To_List caused extraneous empty arguments to be returned. 2018-07-17 Justin Squirek <squirek@adacore.com> gcc/ada/ * libgnat/s-os_lib.adb (Argument_String_To_List): Fix trimming of whitespace. gcc/testsuite/ * gnat.dg/split_args.adb: New testcase. From-SVN: r262783
2018-07-17[Ada] Spurious error on Part_Of indicatorHristian Kirtchev2-5/+16
This patch modifies the verification of a missing Part_Of indicator to avoid considering constants as visible state of a package instantiation because the compiler cannot determine whether their values depend on variable input. This diagnostic is left to GNATprove. ------------ -- Source -- ------------ -- gnat.adc pragma SPARK_Mode; -- gen_pack.ads generic package Gen_Pack is Val : constant Integer := 123; end Gen_Pack; -- pack.ads with Gen_Pack; package Pack with Abstract_State => Pack_State is procedure Force_Body; private package Inst_1 is new Gen_Pack; -- OK package Inst_2 is new Gen_Pack with Part_Of => Pack_State; -- OK end Pack; -- pack.adb package body Pack with Refined_State => (Pack_State => Inst_2.Val) is procedure Force_Body is null; end Pack; ----------------- -- Compilation -- ----------------- $ gcc -c pack.adb 2018-07-17 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * sem_prag.adb (Has_Visible_State): Do not consider constants as visible state because it is not possible to determine whether a constant depends on variable input. (Propagate_Part_Of): Add comment clarifying the behavior with respect to constant. From-SVN: r262782
2018-07-17[Ada] Avoid confusing warning on exception propagation in GNATprove modeYannick Moy2-0/+11
When compiling with the restriction No_Exception_Propagation, GNAT compiler may issue a warning about exceptions not being propagated. This warning is useless and confusing to users for GNATprove analysis, as GNATprove precisely detects possible exceptions, so disable the warning in that mode. 2018-07-17 Yannick Moy <moy@adacore.com> gcc/ada/ * gnat1drv.adb (Gnat1drv): Do not issue warning about exception not being propagated in GNATprove mode. From-SVN: r262781
2018-07-17[Ada] GNAT.Sockets: reorganize and make public components of Inet_Addr_TypeDmitriy Anisimkov3-24/+180
2018-07-17 Dmitriy Anisimkov <anisimko@adacore.com> gcc/ada/ * libgnat/g-socket.adb, libgnat/g-socket.ads: Reorganize and make public components of Inet_Addr_Type. Introduce public binary operations. From-SVN: r262780
2018-07-17[Ada] Secondary stack leak in statements block located in a loopJavier Miranda2-0/+41
When a loop iterator has a block declaration containing statements that invoke functions whose result is returned on the secondary stack (such as a string-returning function), the compiler fails to generate code to release the allocated memory when the loop terminates. After this patch the following test works fine. with Ada.Text_IO; use Ada.Text_IO; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; pragma Warnings (Off); with System.Secondary_Stack; pragma Warnings (On); procedure Small is procedure Info is new System.Secondary_Stack.Ss_Info (Put_Line); US : Unbounded_String; begin Info; for J in 1 .. 100_000 loop Leaky_Block : declare begin if (J mod 20000) = 0 then Info; end if; Ada.Text_IO.Put_Line (To_String (US)); -- Test if (J mod 20000) = 0 then Info; end if; end Leaky_Block; end loop; Info; end; Command: gnatmake small.adb; small | grep "Current allocated space :" | uniq Output: Current allocated space : 0 bytes 2018-07-17 Javier Miranda <miranda@adacore.com> gcc/ada/ * exp_ch7.adb (Make_Transient_Block): When determining whether an enclosing scope already handles the secondary stack, take into account transient blocks nested in a block that do not manage the secondary stack and are located within a loop. From-SVN: r262779
2018-07-17[Ada] Fix Enclosing_Subprogram for protected entries and task entriesEd Schonberg2-2/+26
2018-07-17 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_util.adb (Enclosing_Subprogram): Protected entries and task entries must be treated separately: task entries are within the enclosing subprogram of the task type, while protected entries are transformed into the corresponding Protected_Body_Subprogram, which is the enclosing_subprogram of any subprogram declared within the entry body. From-SVN: r262778
2018-07-17[Ada] Add elaboration-related switches to GNAT UGNHristian Kirtchev3-42/+133
This patch adds compiler switches -gnatH and -gnatJ to section "Alphabetical list of all switches" of the GNAT User Guide for Native. 2018-07-17 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Add missing sections on -gnatH and -gnatJ compiler switches. * gnat_ugn.texi: Regenerate. From-SVN: r262777
2018-07-17re PR middle-end/86539 (OpenMP wrong-code with taskloop and references)Jakub Jelinek4-1/+74
PR middle-end/86539 * gimplify.c (gimplify_omp_for): Ensure taskloop firstprivatized init and cond temporaries don't have reference type if iterator has pointer type. For init use &for_pre_body instead of pre_p if for_pre_body is non-empty. * testsuite/libgomp.c++/pr86539.C: New test. From-SVN: r262776
2018-07-17[Ada] New ignored Ghost code removal mechanismHristian Kirtchev8-260/+249
This patch reimplements the mechanism which removes ignored Ghost code from the tree. The previous mechanism proved to be unreliable because it assumed that no new scoping constructs would be created after some ignored Ghost code had already notified its enclosing scoping constructs that they contain such code. The assumption can be broken by having a call to an ignored Ghost procedure within the extended return statement of a function. The procedure call would signal the enclosing function that it contains ignored Ghost code, however the return statement would introduce an extra block, effectively hiding the procedure call from the ignored Ghost code elimination pass. The new mechanism implemented in this patch forgoes directed tree pruning in favor of storing the actual ignored Ghost code, and later directly eliminating it from the tree. For this approach to operate efficiently, only "top level" ignored Ghost constructs are stored. The top level constructs are essentially nodes which can appear within a declarative or statement list and be safely rewritten into null statements. This ensures that only "root" ignored Ghost construct need to be processed, as opposed to all ignored Ghost nodes within a subtree. The approach has one drawback however. Due to the generation and analysis of ignored Ghost code, a construct may be recorded multiple times (usually twice). The mechanism simply deals with this artefact instead of employing expensive solutions such as hash tables or a common flag shared by all nodes to eliminate the duplicates. ------------ -- Source -- ------------ -- main.adb with Ada.Text_IO; use Ada.Text_IO; procedure Main is procedure Ghost_Proc with Ghost; procedure Ghost_Proc is begin Put_Line ("ERROR: Ghost_Proc called"); end Ghost_Proc; function Func return Integer is begin return Res : Integer := 123 do Ghost_Proc; end return; end Func; Val : Integer with Ghost; begin Val := Func; end Main; ---------------------------- -- Compilation and output -- ---------------------------- $ gcc -c -gnatDG main.adb $ grep -c "ghost" main.adb.dg 0 2018-07-17 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * alloc.ads: Update the allocation metrics of the ignored Ghost nodes table. * atree.adb: Add a soft link for a procedure which is invoked whenever an ignored Ghost node or entity is created. (Change_Node): Preserve relevant attributes which come from the Flags table. (Mark_New_Ghost_Node): Record a newly created ignored Ghost node or entity. (Rewrite): Preserve relevant attributes which come from the Flags table. (Set_Ignored_Ghost_Recording_Proc): New routine. * atree.ads: Define an access-to-suprogram type for a soft link which records a newly created ignored Ghost node or entity. (Set_Ignored_Ghost_Recording_Proc): New routine. * ghost.adb: Remove with and use clause for Lib. Remove table Ignored_Ghost_Units. Add new table Ignored_Ghost_Nodes. (Add_Ignored_Ghost_Unit): Removed. (Initialize): Initialize the table which stores ignored Ghost nodes. Set the soft link which allows Atree.Mark_New_Ghost_Node to record an ignored Ghost node. (Is_Ignored_Ghost_Unit): Use the ultimate original node when checking an eliminated ignored Ghost unit. (Lock): Release and lock the table which stores ignored Ghost nodes. (Mark_And_Set_Ghost_Assignment): Record rather than propagate ignored Ghost nodes. (Mark_And_Set_Ghost_Procedure_Call): Record rather than propagate ignored Ghost nodes. (Mark_Ghost_Clause): Record rather than propagate ignored Ghost nodes. (Mark_Ghost_Declaration_Or_Body): Record rather than propagate ignored Ghost nodes. (Mark_Ghost_Pragma): Record rather than propagate ignored Ghost nodes. (Propagate_Ignored_Ghost_Code): Removed. (Record_Ignored_Ghost_Node): New routine. (Remove_Ignored_Ghost_Code): Reimplemented. (Remove_Ignored_Ghost_Node): New routine. (Ultimate_Original_Node): New routine. * ghost.ads (Check_Ghost_Completion): Removed. * sem_ch8.adb (Analyze_Use_Package): Remove obsolete code. Mark a use package clause as ignored Ghost if applicable. * sem_util.adb (Is_Body_Or_Package_Declaration): Reimplemented. From-SVN: r262775
2018-07-17[Ada] Secondary stack leak in loop iteratorJavier Miranda2-65/+122
When the evaluation of the loop iterator invokes a function whose result relies on the secondary stack the compiler does not generate code to release the consumed memory as soon as the loop terminates. After this patch the following test works fine. with Text_IO; use Text_IO; pragma Warnings (Off); with System.Secondary_Stack; pragma Warnings (On); procedure Sec_Stack_Leak is function F (X : String) return Integer is begin return 10; end F; function G (X : Integer) return String is begin return (1 .. X => 'x'); end G; procedure Info is new System.Secondary_Stack.Ss_Info (Put_Line); procedure Nest is begin for I in Integer range 1 .. 100 loop for J in Integer range 1 .. F (G (10_000)) loop null; end loop; Info; end loop; Info; end Nest; begin Info; Nest; Info; end Sec_Stack_Leak; Commands: gnatmake -q sec_stack_leak.adb sec_stack_leak | grep "Current allocated space :" | uniq Output: Current allocated space : 0 bytes 2018-07-17 Javier Miranda <miranda@adacore.com> gcc/ada/ * sem_ch5.adb (Has_Call_Using_Secondary_Stack): Moved to library level to reuse it. (Analyze_Loop_Statement): Wrap the loop in a block when the evaluation of the loop iterator relies on the secondary stack. From-SVN: r262774
2018-07-17[Ada] Fix Next_Actual when used on calls "inlined for proof"Piotr Trojanek2-5/+23
The GNATprove backend needs to apply antialiasing checks to subprogram calls that have been rewritten into null statements while "inlining for proof". This requires the First_Actual/Next_Actual to use the Original_Node and not the N_Null_Statement that rewriting leaves as a parent. Only effective in GNATprove mode, so no frontend test provided. 2018-07-17 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * sem_util.adb (Next_Actual): If the parent is a N_Null_Statement, which happens for inlined calls, then fetch the next actual from the original AST. From-SVN: r262773
2018-07-17[Ada] Einfo: update documentation for Scalar_RangeEd Schonberg2-2/+7
2018-07-17 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * einfo.ads: Update documentation for Scalar_Range. From-SVN: r262772
2018-07-17[Ada] Attach the special GNATprove HEAP entity to the Standard packagePiotr Trojanek2-0/+6
In GNATprove mode we use frontend cross-references to synthesize the Global contract of subprograms with SPARK_Mode => Off and represent a read/write via a pointer as a read/write of a special entity called HEAP. This entity is now attached to the Standard package, so that we can safely check the Ekind of its Scope, which now happens in Scope_Within. This only affects GNATprove, so no frontend test provided. 2018-07-17 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * lib-xref-spark_specific.adb (Create_Heap): Attach the HEAP entity to the Standard package. From-SVN: r262771
2018-07-17[Ada] Minor refactoring: remove extra parenthesesPiotr Trojanek2-1/+5
2018-07-17 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * einfo.adb (Is_Wrapper_Package): Remove extra parentheses. From-SVN: r262770