- 20 Aug, 2019 40 commits
-
-
The x86 attributes such as ms_abi, stdcall, fastcall etc. alter the function type, which means that functions with one of those attributes do not match any of the partial specializations of std::is_function. Rather than duplicating the list for every calling convention, use a much simpler definition of std::is_function. Also redefine __is_referenceable to not rely on partial specializations for each type of referenceable function. PR libstdc++/91371 * include/std/type_traits (is_function): Simplify definition. Remove partial specializations for function types. (__is_referenceable): Simplify definition. * testsuite/20_util/bind/91371.cc: New test. * testsuite/20_util/is_function/91371.cc: New test. * testsuite/20_util/is_function/value.cc: Check more pointer types. * testsuite/20_util/is_member_function_pointer/91371.cc: New test. * testsuite/20_util/is_object/91371.cc: New test. From-SVN: r274756
Jonathan Wakely committed -
Shifting by signed types is a new language feature in Go 1.13. This requires a patch to the testsuite. Updates golang/go#19113 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/190977 * go.test/test/fixedbugs/bug073.go: Update for language changes. From-SVN: r274755
Ian Lance Taylor committed -
2019-08-20 Bernd Edlinger <bernd.edlinger@hotmail.de> * function.c (assign_parm_find_stack_rtl): Use known_eq instead of ==. From-SVN: r274751
Bernd Edlinger committed -
tree-ssa-dse.c (dse_optimize_redundant_stores): Improved check to catch more redundant zero initialization cases. 2019-08-19 Matthew Beliveau <mbelivea@redhat.com> * tree-ssa-dse.c (dse_optimize_redundant_stores): Improved check to catch more redundant zero initialization cases. (dse_dom_walker::dse_optimize_stmt): Likewise. From-SVN: r274749
Matthew Beliveau committed -
2019-08-20 Richard Biener <rguenther@suse.de> PR lto/91307 * ipa.c (cgraph_build_static_cdtor_1): Use names not recognizable by collect2 when targetm.have_ctors_dtors which avoids dragging in temporary filenames from LTO input objects. From-SVN: r274748
Richard Biener committed -
2019-08-20 Richard Biener <rguenther@suse.de> PR tree-optimization/37242 * tree-ssa-sccvn.c (visit_nary_op): Also CSE (T)(a + b) to (T)a + (T)b if we know that a + b does not overflow. * gcc.dg/tree-ssa/ssa-fre-80.c: New testcase. From-SVN: r274746
Richard Biener committed -
Add notes to DIM, MOD and MODULE stating that as a GNU extension, integers of different kinds are allowed as arguments and that the return value has the larger kind. From-SVN: r274744
Mark Eggleston committed -
This affects only LLVM-based compilation. 2019-08-20 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * exp_unst.adb (Unnest_Subprograms, Unnest_Subprogram): Take inlining (-gnatn) into account. From-SVN: r274743
Arnaud Charlet committed -
This patch fixes a crash on an aspect specification for Storage_Size for a type T when the expression for the aspect depends on attributes of a previously declared type that is not frozen yet. The temporary declaration that captures the value of the aspect must be part of the actions attached to the freeze node for T. 2019-08-20 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * exp_ch13.adb (Expand_N_Attribute_Definition_Clause, case Storage_Size): If the expression for Storage_Size is not static it may depend on characterstics of another type that may bot be frozen yet, so the elaboration of the expression for the aspect must be attached directly to the freeze actions of the type to which it applies. gcc/testsuite/ * gnat.dg/storage_size1.adb: New testcase. From-SVN: r274742
Ed Schonberg committed -
Routine Build_DIC_Procedure_Declaration appears to be heavily inspired by Build_Invariant_Procedure_Declaration; they both wrap an expression attached to a type inside an internal procedure. Initially none of them were calling Set_Last_Entity. For Build_Invariant_Procedure_Declaration this was fixed previously. For Build_DIC_Procedure_Declaration this is fixed here. The issue affects the GNATprove tool and is not visible to end users of the GNAT compiler. No simple test is available because this would require a debug session. 2019-08-20 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * exp_util.adb (Build_DIC_Procedure_Declaration): Set the last entity of the generated Default_Initial_Condition procedure in order to construct a proper entity chain. From-SVN: r274741
Piotr Trojanek committed -
The special expansion done in GNATprove mode should be adapted to slices where the prefix has access type, like indexed expressions. There is no impact on compilation. 2019-08-20 Yannick Moy <moy@adacore.com> gcc/ada/ * exp_spark.adb (Expand_SPARK_N_Slice_Or_Indexed_Component): Renaming of function to apply to slices as well. (Expand_SPARK): Expand prefix of slices of access type. From-SVN: r274740
Yannick Moy committed -
The generated code has been improved so that aggregates with <> are more efficient. No change in behavior; no test. 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * exp_aggr.adb (Expand_Array_Aggregate): Use build-in-place in the nonlimited case in STEP 4. This improves the efficiency of things like (1 .. 1000 => <>). We still generate some code for that, unfortunately, but it is much improved. (Aggr_Assignment_OK_For_Backend): Return false if <> components are present. From-SVN: r274739
Bob Duff committed -
The compiler now generates faster code for functions that return discriminated types in many cases where the size is known at compile time. 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * exp_ch6.adb (Needs_BIP_Alloc_Form): Call Requires_Transient_Scope rather than checking constrainedness and so forth. We have previously improved Requires_Transient_Scope to return False in various cases, notably a limited record with an access discriminant. This change takes advantage of that to avoid using the secondary stack for functions returning such types. (Make_Build_In_Place_Call_In_Allocator): Be consistent by calling Needs_BIP_Alloc_Form rather than Is_Constrained and so forth. * sem_ch4.adb (Analyze_Allocator): The above change causes the compiler to generate code that is not legal Ada, in particular an uninitialized allocator for indefinite subtype. This is harmless, so we suppress the error message in this case. From-SVN: r274738
Bob Duff committed -
2019-08-20 Gary Dismukes <dismukes@adacore.com> gcc/ada/ * ali.adb, ali.ads, aspects.adb, checks.ads, checks.adb, doc/gnat_rm/implementation_defined_pragmas.rst, doc/gnat_ugn/building_executable_programs_with_gnat.rst, einfo.ads, exp_aggr.adb, exp_ch11.adb, exp_ch3.ads, exp_ch4.adb, exp_disp.adb, inline.adb, libgnat/a-locale.ads, libgnat/s-soflin.ads, par_sco.adb, repinfo.adb, sem_ch5.adb, sem_disp.adb, sem_elab.adb, sem_eval.adb, sem_spark.adb, sem_spark.ads, sinfo.ads: Minor reformattings, typo fixes and and rewordings. From-SVN: r274737
Gary Dismukes committed -
The modification to round time up to even second was added decades ago. It was done to avoid unneeded recompilations when the project was built on non-FAT filesystems and then moved to FAT filesystems. Such a situation is now very rare and does not deserve time distortion. 2019-08-20 Dmitriy Anisimkov <anisimko@adacore.com> gcc/ada/ * adaint.c (__gnat_to_gm_time): On _WIN32, don't round time up to even second. From-SVN: r274736
Dmitriy Anisimkov committed -
No change in behavior for GCC-based compilations. 2019-08-20 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch3.adb (Analyze_Object_Declaration): If actual type is private and distinct from nominal type in declaration, propagate flags Is_Constr_Subt_For_U_Nominal and _UN_Aliased to full view of private type. From-SVN: r274735
Ed Schonberg committed -
When expanding a loop entry attribute for a while_loop we construct a function that incorporates the expanded condition of the loop. The itypes that may be generated in that expansion must carry the scope of the constructed function for proper handling in the backend. 2019-08-20 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * exp_attr.adb (Expand_Loop_Entry_Attribute): When expanding a loop entry attribute for a while_loop we construct a function that incorporates the expanded condition of the loop. The itypes that may be generated in that expansion must carry the scope of the constructed function for proper handling in gigi. gcc/testsuite/ * gnat.dg/loop_entry2.adb: New testcase. From-SVN: r274734
Ed Schonberg committed -
This patch fixes a spurious visibility error on a dispatching call to a subprogram with a classwide precondition, when the call qppears in the same declarative part as the subprogram declaration itself. 2019-08-20 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * exp_disp.adb (Build_Class_Wide_Check, Replace_Formals): When a dispatching call tp a subprogram with a class-wide precondition occurrs in the same declarative part as the ancestor subprogram being called, the`expression for the precondition has not been analyzed yet. Such a call may appear, e.g. in an expression function. In that case, the replacement of formals by actuals in the call cannot use the formal entities of the subprogram being called, and the occurrence of the formals in the expression must be located by name (Chars fields) as would be done at a later freeze point, when the expression is resolved in the context of the subprogram itself. gcc/testsuite/ * gnat.dg/tagged5.adb, gnat.dg/tagged5.ads: New testcase. From-SVN: r274733
Ed Schonberg committed -
If a variable has pragma Persistent_BSS, the compiler now automatically suppresses implicit initializations caused by Initialize_Scalars and Normalize_Scalars. Variables with Persistent_BSS cannot be initialized, and previously a pragma Suppress_Initialization was required before the pragma Persistent_BSS. 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * sem_prag.adb (Persistent_BSS): If an initialization is present because of Initialize_Scalars or Normalize_Scalars, generate an implicit pragma Suppress_Initialization to remove that, because initialization is not allowed for these variables. Other initializations remain illegal. From-SVN: r274732
Bob Duff committed -
It's illegal to call a function with a result of an immutably limited type inside a type conversion that's used in one of the special contexts that allow such a function call by itself (see RM 7.5 (2.1-2.10)), such as in the initialization expression of an object declaration. The compiler was recursively applying OK_For_Limited_Init_In_05 to the expression inside of a rewritten type conversion, rather than directly to the Original_Node itself (which is what was cased on to get to the type conversion case alternative), which allowed such illegal initialization, and that's corrected by this fix. However, when the expression is not a rewriting of a user-written conversion, the recursive call to OK_For_Limited_Init_In_05 must be applied to the Expression of the conversion. 2019-08-20 Gary Dismukes <dismukes@adacore.com> gcc/ada/ * sem_ch3.adb (OK_For_Limited_Init_In_05): In the case of type conversions, apply the recursive call to the Original_Node of the expression Exp rather than the Expression of the Original_Node, in the case where Exp has been rewritten; otherwise, when Original_Node is the same as Exp, apply the recursive call to the Expression. (Check_Initialization): Revise condition for special check on type conversions of limited function calls to test Original_Node (avoiding spurious errors on expanded unchecked conversions applied to build-in-place dispatching calls). gcc/testsuite/ * gnat.dg/type_conv2.adb, gnat.dg/type_conv2.ads: New testcase. From-SVN: r274731
Gary Dismukes committed -
Where possible GNAT will store the binary representation of a record aggregate in memory for space and performance reasons. This configuration pragma changes this behaviour so that record aggregates are instead always converted into individual assignment statements. The following package pack.ads: -- pack.ads pragma Aggregate_Individually_Assign; pragma Restrictions (No_Multiple_Elaboration); package Pack is type A_Rec is record A, B, C, D : Boolean; end record; A : A_Rec := (True, False, True, True); end Pack; when compiled with gcc -c -gnatdg pack.ads should produce the following output: Source recreated from tree for Pack (spec) ------------------------------------------ pragma aggregate_individually_assign; pragma restrictions (no_multiple_elaboration); package pack is type pack__a_rec is record a : boolean; b : boolean; c : boolean; d : boolean; end record; freeze pack__a_rec [ procedure pack__a_recIP (_init : out pack__a_rec) is begin %push_constraint_error_label () %push_program_error_label () %push_storage_error_label () null; %pop_constraint_error_label %pop_program_error_label %pop_storage_error_label return; end pack__a_recIP; ] pack__a : pack__a_rec := ( a => true, b => false, c => true, d => true); pack__a.a := true; pack__a.b := false; pack__a.c := true; pack__a.d := true; null; end pack; 2019-08-20 Patrick Bernardi <bernardi@adacore.com> gcc/ada/ * exp_aggr.adb (Expand_Record_Aggregate): Always convert a record Aggregate to assignment statements if the option Aggregate_Individually_Assign is set. * opt.ads (Aggregate_Individually_Assign): New option. * par-prag.adb (Prag): Add Pragma_Aggregate_Individually_Assign. * sem_prag.adb (Analyze_Pragma): Likewise. * snames.ads-tmpl: Add Pragma_Aggregate_Individually_Assign and Name_Aggregate_Individually_Assign. * doc/gnat_rm/implementation_defined_pragmas.rst: Document pragma Aggregate_Individually_Assign. * gnat_rm.texi: Regenerate. From-SVN: r274730
Patrick Bernardi committed -
If the delta_aggregate feature is used, the -gnat2020 or -gnatX switch must be given. The following test must get an error if neither -gnat2020 nor -gnatX is specified: gcc -c delta_aggregate.ads -gnat2012 delta_aggregate.ads:4:18: delta_aggregate is an Ada 202x feature delta_aggregate.ads:4:18: compile with -gnatX package Delta_Aggregate is X : String := "Hello"; Y : String := (X with delta 1 => 'h'); end Delta_Aggregate; 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * par-ch4.adb: Minor wording change in error messages. * sem_aggr.adb (Resolve_Delta_Aggregate): Emit an error for Ada versions prior to Ada 2020. From-SVN: r274729
Bob Duff committed -
This patch makes the temp for initialization of an atomic variable be constant. No change in behavior; no test. 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * freeze.adb (Is_Atomic_VFA_Aggregate): Make the temp for initialization of the atomic variable be constant. This is cleaner, and might improve efficiency. From-SVN: r274728
Bob Duff committed -
This instructs -gnatR4 to also list the Etype of a user-declared record subtype if it is compiler-generated, for example in: package P is type U_Arr is array (Integer range <>) of Character; type Rec1 (D1, D2 : Integer) is record C : U_Arr (D1 .. D2); end record; type Rec_N is new Rec1 (1, 2); end P; 2019-08-20 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * repinfo.adb (List_Record_Info): In -gnatR4 mode, set the relevant flag on the implicit base type of a record subtype. From-SVN: r274727
Eric Botcazou committed -
2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * sem_eval.adb (Expr_Value): Implement the case of an unchecked conversion of a static expression. From-SVN: r274726
Bob Duff committed -
The compiler usually warns on Unchecked_Conversion between types with mismatched sizes. This warning is now extended to the case where the target type is a zero-sized array. 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * sem_ch13.adb (Is_Null_Array): New function, used to detect the null array case; used to warn about uncheckedly converting to a zero-sized array. It is unfortunate that we can't just check the size, and warn on all cases of converting from a nonzero-sized type to a zero-sized one. That's because "0" means two different things: "size is zero" and "size is unknown". Until we fix that design flaw, we need this more targeted fix. gcc/testsuite/ * gnat.dg/unchecked_convert14.adb: New testcase. From-SVN: r274725
Bob Duff committed -
The Delete operations in the bounded ordered containers have been substantially sped up. No change in semantics, so no test. 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * libgnat/a-cborma.adb, libgnat/a-cborse.adb (Clear): Repeatedly call Delete. This avoids clearing the free list, which substantially speeds up future Delete operations. From-SVN: r274724
Bob Duff committed -
The compiler can now warn for out-of-order record representation clauses. A warning is given if the order of component declarations, component clauses, and bit-level layout do not all agree. The warning is disabled by default, and may be enabled by the -gnatw_r switch. 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * sem_ch13.adb (Component_Order_Check): New procedure to check for out-of-order clauses. * warnsw.ads, warnsw.adb: New -gnatw_r switch. * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Document new switch. * gnat_ugn.texi: Regenerate. From-SVN: r274723
Bob Duff committed -
The patch gives an error message on "for T'Object_Size use 0;". 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * sem_ch13.adb (Object_Size): Give an error for zero. It really rubs me the wrong way that we don't honor "for T'Object_Size use 0;", but it's not important enough to fix. In any case, if we're not going to obey the clause, we should give an error. gcc/testsuite/ * gnat.dg/object_size1.adb: New testcase. From-SVN: r274722
Bob Duff committed -
Pragma Warning_As_Error now works for style warnings (messages that start with "(style)", enabled by -gnaty) the same way it works for regular warnings enabled by -gnatw. The following test should fail to build with style checks: gnat.adc: pragma Warning_As_Error ("two spaces required"); style.adb: procedure Style is X : Integer; begin null; --Hello end; gnatmake -q -f -g style.adb -gnaty should get: style.adb:2:04: warning: variable "X" is never read and never assigned style.adb:5:06: error: (style) two spaces required [warning-as-error] style.adb:6:01: (style) "end Style" required gnatmake: "style.adb" compilation error and no executable should be created. 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * errout.adb (Error_Msg_Internal): Set Warn_Err in case of Is_Style_Msg. * erroutc.adb (Output_Msg_Text): Do Warnings_Treated_As_Errors processing and [warning-as-error] modification for style messages. Clean up code, simplify, remove unnecessary block statement, add renaming of table entry. * erroutc.ads (Warning_Treated_As_Error): Fix comment: no such thing as Set_Warning_As_Error. * opt.ads: Clean up comments and move related declarations near each other. * par-prag.adb: Process Warning_As_Error. This is necessary because many style warning happen during parsing. * sem_prag.adb: Use new Acquire_Warning_Match_String. * sem_util.ads, sem_util.adb (Acquire_Warning_Match_String): New function shared by par-prag.adb and sem_prag.adb. Replaces the procedure in sem_prag.adb. Avoid use of global variables. * stringt.ads, stringt.adb (To_String): New function to convert String_Id to String. * doc/gnat_rm/implementation_defined_pragmas.rst: Document the new feature. * gnat_rm.texi: Regenerate. From-SVN: r274721
Bob Duff committed -
This change is aimed at removing a couple of linear searches in the units management code that can become problematic performance-wise when the number of loaded units is in the several hundreds, which can happen for large files even at -O0 without any inlining. It introduces an auxiliary hash table to record a mapping between the name of units and their entry in the units table, and then replaces the linear searches by lookups in this names table. This can save up to 2% of the compilation time spent in the front-end in some cases. There should be no functional changes, except in the error message issued for circular unit dependencies in very peculiar and convoluted cases. 2019-08-20 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * lib.ads: Add with clause for GNAT.HTable. Add pragma Inline for Is_Loaded and alphabetize the list. (Unit_Name_Table_Size): New constant. (Unit_Name_Header_Num): New subtype. (Unit_Name_Hash): New function declaration. (Unit_Names): New simple hash table. (Init_Unit_Name): New procedure declaration. * lib.adb (Set_Unit_Name): Unregister the old name in the table, if any, and then register the new name. (Init_Unit_Name): New procedure. (Is_Loaded): Reimplement using a lookup in the names table. (Remove_Unit): Unregister the name. (Unit_Name_Hash): New function. * lib-load.adb (Create_Dummy_Package_Unit): Call Init_Unit_Name. (Load_Unit): Use a lookup in the names table to find out whether the unit has already been loaded. Call Init_Unit_Name and then Remove_Unit if the loading has failed. (Make_Child_Decl_Unit): Call Init_Unit_Name. (Make_Instance_Unit): Likewise. * lib-writ.adb (Ensure_System_Dependency): Likewise. From-SVN: r274720
Eric Botcazou committed -
No functional change. 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * sem_ch13.adb (Record_Hole_Check): Initialize After_Last. From-SVN: r274719
Bob Duff committed -
Years ago, we adapted Get_Kind_Of_Unit so that gnatprove could use it to detect both bodies and specs of predefined units. However, this wasn't really needed: gnatprove could simply reuse Lib.In_Predefined_Unit and now it does. This patch simply reverts two commits mentioned above. No frontend test provided, because the removed comment is clear that this doesn't affect the compiler. Other tools similarly should not be affected (at least they were not when this change was introduced in 2012). 2019-08-20 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * impunit.adb (Get_Kind_Of_Unit): Revert change for adapting this routine for gnatprove. From-SVN: r274718
Piotr Trojanek committed -
2019-08-20 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * doc/gnat_rm/implementation_defined_pragmas.rst: Document requirements for Pragma Lock_Free. * gnat_rm.texi: Regenerate. From-SVN: r274717
Arnaud Charlet committed -
2019-08-20 Philippe Gil <gil@adacore.com> gcc/ada/ * bindgen.adb (Gen_Main): Set gnat_argc/gnat_argv to argc/argv only when still uninitialized. From-SVN: r274716
Philippe Gil committed -
2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * libgnat/g-comlin.ads (Exit_From_Command_Line): Fix documentation for GNAT.Command_Line. From-SVN: r274715
Bob Duff committed -
2019-08-20 Pierre-Marie de Rodat <derodat@adacore.com> gcc/ada/ PR ada/91492 * gcc-interface/lang.opt (-fdump-scos): Add missing dot at the end of the documentation. From-SVN: r274714
Pierre-Marie de Rodat committed -
PR rtl-optimization/91347 * dse.c (scan_insn): Call add_wild_read for non-const/memset tail calls before reload if HARD_FRAME_POINTER_IS_ARG_POINTER. From-SVN: r274708
Eric Botcazou committed -
This patch adds a flag that tells targets whether an argument has been converted to pass-by-reference form. This replaces assign_parm_data_one::passed_pointer in function.c. The flag is set automatically for places that call apply_pass_by_reference_rules. Places that apply pass-by-reference manually need to set it themselves. (After previous changes, no targets apply pass-by-reference manually. They all go through apply_pass_by_reference_rules.) 2019-08-20 Richard Sandiford <richard.sandiford@arm.com> gcc/ * calls.h (function_arg_info): Add a pass_by_reference field, defaulting to false. * calls.c (apply_pass_by_reference_rules): Set pass_by_reference when applying pass-by-reference semantics. (initialize_argument_information): Likewise. (emit_library_call_value_1): Likewise. * function.c (assign_parm_data_one): Remove passed_pointer field. (assign_parm_find_data_types): Don't set it. (assign_parm_find_stack_rtl, assign_parm_adjust_stack_rtl) (assign_parm_setup_reg, assign_parms, gimplify_parameters): Use arg.pass_by_reference instead of passed_pointer. From-SVN: r274707
Richard Sandiford committed -
This patch makes the two main calls.c argument-processing routines track the state of the argument in a function_arg_info instead of using separate mode variables. 2019-08-20 Richard Sandiford <richard.sandiford@arm.com> gcc/ * calls.c (emit_library_call_value_1): Merge arg and orig_arg into a single function_arg_info, updating its fields when we apply pass-by-reference and promotion semantics. Use the function_arg_info to track the mode rather than keeping it in a separate local variable. (initialize_argument_information): Likewise. Base the final arg_to_skip on this new function_arg_info rather than creating a new one from scratch. From-SVN: r274706
Richard Sandiford committed
-