aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2019-07-03[Ada] ABE checks v3.0, foundations of Elaboration order v4.0Hristian Kirtchev50-7981/+24227
------------------------ -- Elaboration checks -- ------------------------ The dynamic ABE checks model now emits the same diagnostics as those of the static ABE checks model. The ABE checks mechanism has been redesigned and refactored in the face of increasing requirements. Most of the functionality can now be toggled, thus allowing for various combinations of behavior. The combinations are defined as "initial states" and may be further altered. Scenarios and targets have been distinctly separated at the higher level, instead of directly working with nodes and entitites. Scenarios and targets now carry a representation which removes the need to constantly recompute relevant attributes, and offers a common interface for the various processors. Most processing has now been refactored into "services" which perform a single ABE-related function. ----------------------- -- Elaboration order -- ----------------------- A new elaboration order mechanism based on the use of an invocation graph to provide extra information about the flow of execution at elaboration time has been introduced. The ABE checks mechanism has been altered to encode pieces of the invocation graph in the associated ALI files of units. The new elaboration order mechanism reconstructs the full invocation graph at bind time, and coupled with the library item graph, determines the elaboration order of units. The new elaboration order mechanism is currently inaccessible. ------------ -- Source -- ------------ -- pack.ads package Pack is procedure ABE_Proc; procedure Safe_Proc; end Pack; -- pack.adb with Ada.Text_IO; use Ada.Text_IO; package body Pack is function Call_Proc (ABE : Boolean) return Integer; procedure Safe_Proc is begin Put_Line ("safe"); end Safe_Proc; function Call_Proc (ABE : Boolean) return Integer is begin if ABE then ABE_Proc; else Safe_Proc; end if; return 0; end Call_Proc; Elab_1 : constant Integer := Call_Proc (ABE => False); Elab_2 : constant Integer := Call_Proc (ABE => True); procedure ABE_Proc is begin Put_Line ("ABE"); end ABE_Proc; end Pack; -- main.adb with Pack; procedure Main is begin null; end Main; ---------------------------- -- Compilation and output -- ---------------------------- $ gnatmake -f -q -gnatE main.adb $ ./main $ gnatmake -f -q -gnatE main.adb -gnatDG -gnatwL $ grep -c "safeE" pack.adb.dg pack.adb:14:10: warning: cannot call "ABE_Proc" before body seen pack.adb:14:10: warning: Program_Error may be raised at run time pack.adb:14:10: warning: body of unit "Pack" elaborated pack.adb:14:10: warning: function "Call_Proc" called at line 22 pack.adb:14:10: warning: procedure "ABE_Proc" called at line 14 pack.adb:14:10: warning: cannot call "ABE_Proc" before body seen pack.adb:14:10: warning: Program_Error may be raised at run time pack.adb:14:10: warning: body of unit "Pack" elaborated pack.adb:14:10: warning: function "Call_Proc" called at line 23 pack.adb:14:10: warning: procedure "ABE_Proc" called at line 14 safe raised PROGRAM_ERROR : pack.adb:14 access before elaboration 0 2019-07-03 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * ali.adb: Add with and use clauses for GNAT, GNAT.Dynamic_HTables, and Snames. Add a map from invocation signature records to invocation signature ids. Add various encodings of invocation-related attributes. Sort and update table Known_ALI_Lines. (Add_Invocation_Construct, Add_Invocation_Relation, Body_Placement_Kind_To_Code, Code_To_Body_Placement_Kind, Code_To_Invocation_Construct_Kind, Code_To_Invocation_Kind, Code_To_Invocation_Graph_Line_Kind, Destroy, Hash): New routines. (Initialize_ALI): Sort the initialization sequence. Add initialization for all invocation-related tables. (Invocation_Construct_Kind_To_Code, Invocation_Graph_Line_Kind_To_Code, Invocation_Kind_To_Code, Invocation_Signature_Of, Present): New routines. (Scan_ALI): Add the default values for invocation-related ids. Scan invocation graph lines. (Scan_Invocation_Graph_Line): New routine. * ali.ads: Add with clause for GNAT.Dynamic_Tables. Add types for invocation constructs, relations, and signatures. Add tables for invocation constructs, relations, and signatures. Update Unit_Record to capture invocation-related ids. Relocate table Unit_Id_Tables and subtypes Unit_Id_Table, Unit_Id_Array from Binde. (Add_Invocation_Construct, Add_Invocation_Relation, Body_Placement_Kind_To_Code, Code_To_Body_Placement_Kind, Code_To_Invocation_Construct_Kind, Code_To_Invocation_Kind, Code_To_Invocation_Graph_Line_Kind, Invocation_Construct_Kind_To_Code, Invocation_Graph_Line_Kind_To_Code, Invocation_Kind_To_Code, Invocation_Signature_Of, Present): New routines. * binde.adb: Add with and use clause for Types. Add use clause for ALI.Unit_Id_Tables; * binde.ads: Relocate table Unit_Id_Tables and subtypes Unit_Id_Table, Unit_Id_Array to ALI. * bindgen.adb: Remove with and use clause for ALI. * bindgen.ads: Remove with and use clause for Binde. Add with and use clause for ALI. * bindo.adb, bindo.ads, bindo-augmentors.adb, bindo-augmentors.ads, bindo-builders.adb, bindo-builders.ads, bindo-diagnostics.adb, bindo-diagnostics.ads, bindo-elaborators.adb, bindo-elaborators.ads, bindo-graphs.adb, bindo-graphs.ads, bindo-units.adb, bindo-units.ads, bindo-validators.adb, bindo-validators.ads, bindo-writers.adb, bindo-writers.ads: New units. * debug.adb: Use and describe GNAT debug switches -gnatd_F and -gnatd_G. Add GNATbind debug switches in the ranges dA .. dZ, d.a .. d.z, d.A .. d.Z, d.1 .. d.9, d_a .. d_z, d_A .. d_Z, and d_1 .. d_9. Use and describe GNATbind debug switches -d_A, -d_I, -d_L, -d_N, -d_O, -d_T, and -d_V. * exp_util.adb, exp_util.ads (Exceptions_OK): Relocate to Sem_Util. * gnatbind.adb: Add with and use clause for Bindo. Use the new Bindo elaboration order only when -d_N is in effect. * lib-writ.adb (Column, Extra, Invoker, Kind, Line, Locations, Name, Placement, Scope, Signature, Target): New routines. (Write_ALI): Output all invocation-related data. (Write_Invocation_Graph): New routine. * lib-writ.ads: Document the invocation graph ALI line. * namet.adb, namet.ads (Present): New routines. * sem_ch8.adb (Find_Direct_Name): Capture the status of elaboration checks and warnings of an identifier. (Find_Expanded_Name): Capture the status of elaboration checks and warnings of an expanded name. * sem_ch12.adb (Analyze_Generic_Package_Declaration): Ensure that invocation graph-related data within the body of the main unit is encoded in the ALI file. (Analyze_Generic_Subprogram_Declaration): Ensure that invocation graph-related data within the body of the main unit is encoded in the ALI file. (Analyze_Package_Instantiation): Perform minimal decoration of the instance entity. (Analyze_Subprogram_Instantiation): Perform minimal decoration of the instance entity. * sem_elab.adb: Perform heavy refactoring of all code. The unit is now split into "services" which specialize in one area of ABE checks. Add processing in order to capture invocation-graph related attributes of the main unit, and encode them in the ALI file. The Processing phase can now operate in multiple modes, all described by type Processing_Kind. Scenarios and targets are now distinct at the higher level, and carry their own representations. This eliminates the need to constantly recompute their attributes, and offers the various processors a uniform interface. The various initial states of the Processing phase are now encoded using type Processing_In_State, and xxx_State constants. * sem_elab.ads: Update the literals of type Enclosing_Level_Kind. Add Inline pragmas on several routines. * sem_prag.adb (Process_Inline): Ensure that invocation graph-related data within the body of the main unit is encoded in the ALI file. * sem_util.adb (Enclosing_Generic_Body, Enclosing_Generic_Unit): Code clean up. (Exceptions_OK): Relocated from Sem_Util. (Mark_Save_Invocation_Graph_Of_Body): New routine. * sem_util.ads (Exceptions_OK): Relocated from Sem_Util. (Mark_Save_Invocation_Graph_Of_Body): New routine. * sinfo.adb (Is_Elaboration_Checks_OK_Node): Now applicable to N_Variable_Reference_Marker. (Is_Elaboration_Warnings_OK_Node): Now applicable to N_Expanded_Name, N_Identifier, N_Variable_Reference_Marker. (Is_Read): Use Flag4. (Is_SPARK_Mode_On_Node): New applicable to N_Variable_Reference_Marker. (Is_Write): Use Flag5. (Save_Invocation_Graph_Of_Body): New routine. (Set_Is_Elaboration_Checks_OK_Node): Now applicable to N_Variable_Reference_Marker. (Set_Is_Elaboration_Warnings_OK_Node): Now applicable to N_Expanded_Name, N_Identifier, N_Variable_Reference_Marker. (Set_Is_SPARK_Mode_On_Node): New applicable to N_Variable_Reference_Marker. (Set_Save_Invocation_Graph_Of_Body): New routine. * sinfo.ads: Update the documentation of attributes Is_Elaboration_Checks_OK_Node, Is_Elaboration_Warnings_OK_Node, Is_SPARK_Mode_On_Node. Update the flag usage of attributes Is_Read, Is_Write. Add attribute Save_Invocation_Graph_Of_Body and update its occurrence in nodes. (Save_Invocation_Graph_Of_Body): New routine along with pragma Inline. (Set_Save_Invocation_Graph_Of_Body): New routine along with pragma Inline. * switch-b.adb (Scan_Binder_Switches): Refactor the scanning of debug switches. (Scan_Debug_Switches): New routine. * libgnat/g-dynhta.adb, libgnat/g-dynhta.ads (Contains): New routine. * libgnat/g-graphs.adb (Associate_Vertices): Update the use of Component_Vertex_Iterator. (Contains_Component, Contains_Edge, Contains_Vertex, Has_Next): Reimplemented. (Iterate_Component_Vertices): New routine. (Iterate_Vertices): Removed. (Next): Update the parameter profile. (Number_Of_Component_Vertices, Number_Of_Outgoing_Edges): New routines. * libgnat/g-graphs.ads: Update the initialization of No_Component. Add type Component_Vertex_Iterator. Remove type Vertex_Iterator. (Has_Next): Add new versions and remove old ones. (Iterate_Component_Vertices): New routine. (Iterate_Vertices): Removed. (Next): Add new versions and remove old ones. (Number_Of_Component_Vertices, Number_Of_Outgoing_Edges): New routines. * libgnat/g-sets.adb (Contains): Reimplemented. * gcc-interface/Make-lang.in (GNATBIND_OBJS): Add GNAT.Dynamic_HTables, GNAT.Graphs and Bindo units. * rtsfind.ads: Remove extra space. From-SVN: r272976
2019-07-03[Ada] SPARK pointer support extended to local borrowers and observersYannick Moy2-175/+706
SPARK rules allow local borrowers and observers to be declared. During their lifetime, the access to the borrowed/observed object is restricted. There is no impact on compilation. 2019-07-03 Yannick Moy <moy@adacore.com> gcc/ada/ * sem_spark.adb: Add support for locally borrowing and observing a path. (Get_Root_Object): Add parameter Through_Traversal to denote when we are interesting in getting to the traversed parameter. (Is_Prefix_Or_Almost): New function to support detection of illegal access to borrowed or observed paths. (Check_Pragma): Add analysis of assertion pragmas. From-SVN: r272975
2019-07-03[Ada] Spurious error with static predicate in generic unitEd Schonberg6-3/+45
This patch fixes a spurious error in a generic unit that invludes a subtype with a static predicate, when the type is used in a case expression. 2019-07-03 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch13.adb (Build_Predicate_Functions): In a generic context we do not build the bodies of predicate fuctions, but the expression in a static predicate must be elaborated to allow case coverage checking within the generic unit. (Build_Discrete_Static_Predicate): In a generic context, return without building function body once the Static_Discrete_Predicate expression for the type has been constructed. gcc/testsuite/ * gnat.dg/predicate6.adb, gnat.dg/predicate6.ads: New testcase. * gnat.dg/static_pred1.adb: Remove expected error. From-SVN: r272974
2019-07-03[Ada] Minor reformattingHristian Kirtchev8-35/+45
2019-07-03 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * bindgen.adb, inline.adb, layout.adb, sem_ch12.adb, sem_ch13.adb, sem_ch7.adb, styleg.adb: Minor reformatting. From-SVN: r272973
2019-07-03[Ada] Style check for mixed-case identifiersBob Duff9-1/+84
This patch implements a new switch, -gnatyD, enables a style check that requires defining identifiers to be in mixed case. 2019-07-03 Bob Duff <duff@adacore.com> gcc/ada/ * par-ch3.adb (P_Defining_Identifier): Call Check_Defining_Identifier_Casing. * style.ads, styleg.ads, styleg.adb (Check_Defining_Identifier_Casing): New procedure to check for mixed-case defining identifiers. * stylesw.ads, stylesw.adb (Style_Check_Mixed_Case_Decls): New flag for checking for mixed-case defining identifiers. * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Document new feature. * gnat_ugn.texi: Regenerate. From-SVN: r272972
2019-07-03[Ada] Extend -gnatw.z warning to array typesEric Botcazou4-23/+38
The -gnatw.z switch causes the compiler to issue a warning on record types subject to both an alignment clause and a size clause, when the specified size is not a multiple of the alignment in bits, because this means that the Object_Size will be strictly larger than the specified size. It makes sense to extend this warning to array types, but not to the cases of bit-packed arrays where the size is not a multiple of storage unit and the specified alignment is the minimum one, because there would be no way to get rid of it apart from explicitly silencing it. The compiler must issue the warning: p.ads:5:03: warning: size is not a multiple of alignment for "Triplet" p.ads:5:03: warning: size of 24 specified at line 4 p.ads:5:03: warning: Object_Size will be increased to 32 on the following package: package P is type Triplet is new String (1 .. 3); for Triplet'Size use 24; for Triplet'Alignment use 4; type Arr is array (1 .. 7) of Boolean; pragma Pack (Arr); for Arr'Size use 7; for Arr'Alignment use 1; end P; 2019-07-03 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * doc/gnat_ugn/building_executable_programs_with_gnat.rst (Warning message control): Document that -gnatw.z/Z apply to array types. * freeze.adb (Freeze_Entity): Give -gnatw.z warning for array types as well, but not if the specified alignment is the minimum one. * gnat_ugn.texi: Regenerate. From-SVN: r272971
2019-07-03[Ada] Spell "laid" correctlyBob Duff5-10/+15
2019-07-03 Bob Duff <duff@adacore.com> gcc/ada/ * einfo.ads, exp_util.adb, layout.ads, sinfo.ads: Spell "laid" correctly. From-SVN: r272970
2019-07-03[Ada] Spurious error on dynamic predicate in a generic contextEd Schonberg5-1/+52
This patch fixes a spurious error on the conformance checking between the expression for an aspect analyzed at the freeze point of the type, and the analysis of a copy of the expression performed at the end of the enclosing list of declarationss. In a generic context the first may not have been analyzed yet and this must be done before the conformance check. 2019-07-03 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch13.adb (Analyze_Attribute_Definition_Clause): No error message on attribute applied to a renaming when the renamed object is an aggregate (from code reading). (Check_Aspect_At_End_Of_Declarations): In a generic context where freeze nodes are not generated, the original expression for an aspect may need to be analyzed to precent spurious conformance errors when compared with the expression that is anakyzed at the end of the current declarative list. gcc/testsuite/ * gnat.dg/predicate5.adb, gnat.dg/predicate5.ads: New testcase. From-SVN: r272969
2019-07-03[Ada] Fix bogus error on array with overaligned scalar componentEric Botcazou4-2/+35
The compiler would wrongly reject an alignment clause larger than 8 on the component type of an array of scalars, which is valid albeit pathological. 2019-07-03 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * layout.adb (Layout_Type): Do not set the component size of an array with a scalar component if the component type is overaligned. gcc/testsuite/ * gnat.dg/alignment14.adb: New testcase. From-SVN: r272968
2019-07-03[Ada] Make loop labels unique for front-end inlined callsEd Schonberg2-0/+69
This patch transforms loop labels in the body of subprograms that are to be inlined by the front-end, to prevent accidental duplication of loop labels, which might make the resulting source illegal. ---- Source program: ---- package P is procedure Get_Rom_Addr_Offset with Inline_Always; end P; ---- package body P is procedure Get_Rom_Addr_Offset is X : Integer; begin Main_Block : for I in 1 .. 10 loop X := 2; exit Main_Block when I > 4; other_loop: for J in character'('a') .. 'z' loop if I < 5 then exit Main_Block when J = 'k'; else Exit Other_Loop; end if; end loop other_loop; end loop Main_Block; end Get_Rom_Addr_Offset; procedure P2 is begin Main_Block : for I in 1 .. 1 loop Get_Rom_Addr_Offset; end loop Main_Block; end P2; end P; ---- Command: gcc -c -gnatN -gnatd.u -gnatDG p.adb ---- Output ---- package body p is procedure p__get_rom_addr_offset is x : integer; other_loop : label main_block : label begin main_block : for i in 1 .. 10 loop x := 2; exit main_block when i > 4; other_loop : for j in 'a' .. 'z' loop if i < 5 then exit main_block when j = 'k'; else exit other_loop; end if; end loop other_loop; end loop main_block; return; end p__get_rom_addr_offset; procedure p__p2 is main_block : label begin main_block : for i in 1 .. 1 loop B6b : declare x : integer; other_loopL10b : label main_blockL9b : label begin main_blockL9b : for i in 1 .. 10 loop x := 2; exit main_blockL9b when i > 4; other_loopL10b : for j in 'a' .. 'z' loop if i < 5 then exit main_blockL9b when j = 'k'; else exit other_loopL10b; end if; end loop other_loopL10b; end loop main_blockL9b; end B6b; end loop main_block; return; end p__p2; begin null; end p; 2019-07-03 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * inline.adb (Make_Loop_Labels_Unique): New procedure to modify the source code of subprograms that are inlined by the front-end, to prevent accidental duplication between loop labels in the inlined code and the code surrounding the inlined call. From-SVN: r272967
2019-07-03[Ada] Update the section on resolving elaboration circularitiesHristian Kirtchev3-15/+23
2019-07-03 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * doc/gnat_ugn/elaboration_order_handling_in_gnat.rst: Update the section on resolving elaboration circularities to eliminate certain combinations of switches which together do not produce the desired effect and confuse users. * gnat_ugn.texi: Regenerate. From-SVN: r272966
2019-07-03[Ada] Add a gnatbind option to generate C codeArnaud Charlet5-4/+29
2019-07-03 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * bindgen.adb (Gen_Main): Disable generation of reference to Ada_Main_Program_Name for CCG. * bindusg.adb (Display): Add -G to the command-line usage for gnatbind. * opt.ads (Generate_C_Code): Update comment. * switch-b.adb (Scan_Binder_Switches): Add handling for -G. From-SVN: r272965
2019-07-03[Ada] Do not consider inlined subprograms when generating C codeArnaud Charlet2-4/+16
2019-07-03 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * sem_ch7.adb (Has_Referencer): Do not consider inlined subprograms when generating C code, which allows us to generate static inline subprograms. From-SVN: r272964
2019-07-03[Ada] Missing consistency check for constant modifierJustin Squirek2-2/+13
This patch fixes an issue whereby instantiations of generic packages were incorrectly allowed despite formal and actual subprograms not having matching declarations with anonymous constant access type parameters. ------------ -- Source -- ------------ -- gen1.ads package Gen1 is generic with procedure View (IA : not null access constant Integer); procedure Dispatch (IA : access Integer); end; -- gen2.adb package body Gen1 is procedure Dispatch (IA : access Integer) is begin View (IA); end; end; -- bad1.ads with Gen1; package Bad1 is procedure Bad_View (IA : not null access Integer); procedure Bad_Dispatch is new Gen1.Dispatch (Bad_View); end; -- bad1.adb package body Bad1 is procedure Bad_View (IA : not null access Integer) is begin IA.all := IA.all + 1; end; end; -- gen2.ads package Gen2 is generic with procedure View (IA : access constant Integer); procedure Dispatch (IA : access Integer); end; -- gen2.adb package body Gen2 is procedure Dispatch (IA : access Integer) is begin View (IA); end; end; -- bad2.ads with Gen2; package Bad2 is procedure Bad_View (IA : access Integer); procedure Bad_Dispatch is new Gen2.Dispatch (Bad_View); end; -- bad2.adb package body Bad2 is procedure Bad_View (IA : access Integer) is begin IA.all := IA.all + 1; end; end; ----------------- -- Compilation -- ----------------- $ gnatmake -q bad1.adb $ bad1.ads:4:04: instantiation error at gen1.ads:3 $ bad1.ads:4:04: not mode conformant with declaration at line 3 $ bad1.ads:4:04: constant modifier does not match $ gnatmake: "bad1.adb" compilation error $ gnatmake -q bad2.adb $ bad2.ads:4:04: instantiation error at gen2.ads:3 $ bad2.ads:4:04: not mode conformant with declaration at line 3 $ bad2.ads:4:04: constant modifier does not match $ gnatmake: "bad2.adb" compilation error 2019-07-03 Justin Squirek <squirek@adacore.com> gcc/ada/ * sem_ch6.adb (Check_Conformance): Add expression checking for constant modifiers in anonymous access types (in addition to "non-null" types) so that they are considered "matching" for subsequent conformance tests. From-SVN: r272963
2019-07-03[Ada] Clarify wording on documentation for No_Multiple_ElaborationArnaud Charlet3-18/+22
2019-07-03 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * doc/gnat_rm/standard_and_implementation_defined_restrictions.rst: Clarify wording on No_Multiple_Elaboration. * gnat_rm.texi: Regenerate. From-SVN: r272962
2019-07-03[Ada] Spurious error on predicate of subtype in genericEd Schonberg5-2/+67
This patch fixes a spurious error on a dynamic predicate of a record subtype when the expression for the predicate includes a selected component that denotes a component of the subtype. 2019-07-03 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch8.adb (Find_Selected_Component): If the prefix is the current instance of a type or subtype, complete the resolution of the name by finding the component of the type denoted by the selector name. gcc/testsuite/ * gnat.dg/predicate4.adb, gnat.dg/predicate4_pkg.ads: New testcase. From-SVN: r272961
2019-07-03[Ada] Document that boolean types with convention C now map to C99 boolEric Botcazou3-11/+22
2019-07-03 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * doc/gnat_rm/interfacing_to_other_languages.rst (Interfacing to C): Document that boolean types with convention C now map to C99 bool. * gnat_rm.texi: Regenerate. From-SVN: r272960
2019-07-03[Ada] Exp_Attr: remove dead codeJavier Miranda2-103/+6
2019-07-03 Javier Miranda <miranda@adacore.com> gcc/ada/ * exp_attr.adb (Expand_Min_Max_Attribute): Code cleanup: removing code that it is now never executed in the CCG compiler (dead code). From-SVN: r272959
2019-07-03tree-core.h (enum omp_clause_code): Add OMP_CLAUSE__SCANTEMP_ clause.Jakub Jelinek13-142/+1167
* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE__SCANTEMP_ clause. * tree.h (OMP_CLAUSE_DECL): Use OMP_CLAUSE__SCANTEMP_ instead of OMP_CLAUSE__CONDTEMP_ as range's upper bound. (OMP_CLAUSE__SCANTEMP__ALLOC, OMP_CLAUSE__SCANTEMP__CONTROL): Define. * tree.c (omp_clause_num_ops, omp_clause_code_name): Add OMP_CLAUSE__SCANTEMP_ entry. (walk_tree_1): Handle OMP_CLAUSE__SCANTEMP_. * tree-pretty-print.c (dump_omp_clause): Likewise. * tree-nested.c (convert_nonlocal_omp_clauses, convert_local_omp_clauses): Likewise. * omp-general.h (struct omp_for_data): Add have_scantemp and have_nonctrl_scantemp members. * omp-general.c (omp_extract_for_data): Initialize them. * omp-low.c (struct omp_context): Add scan_exclusive member. (scan_omp_1_stmt): Don't unnecessarily mask gimple_omp_for_kind result again with GF_OMP_FOR_KIND_MASK. Initialize also ctx->scan_exclusive. (lower_rec_simd_input_clauses): Use ctx->scan_exclusive instead of !ctx->scan_inclusive. (lower_rec_input_clauses): Simplify gimplification of dtors using gimplify_and_add. For non-is_simd test OMP_CLAUSE_REDUCTION_INSCAN rather than rvarp. Handle OMP_CLAUSE_REDUCTION_INSCAN in worksharing loops. Don't add barrier for reduction_omp_orig_ref if ctx->scan_??xclusive. (lower_reduction_clauses): Don't do anything for ctx->scan_??xclusive. (lower_omp_scan): Use ctx->scan_exclusive instead of !ctx->scan_inclusive. Handle worksharing loops with inscan reductions. Use new_vard != new_var instead of repeated omp_is_reference calls. (omp_find_scan, lower_omp_for_scan): New functions. (lower_omp_for): Call lower_omp_for_scan for worksharing loops with inscan reductions. * omp-expand.c (expand_omp_scantemp_alloc): New function. (expand_omp_for_static_nochunk): Handle fd->have_nonctrl_scantemp and fd->have_scantemp. * c-c++-common/gomp/scan-3.c (f1): Don't expect a sorry message. * c-c++-common/gomp/scan-5.c (foo): Likewise. * testsuite/libgomp.c++/scan-1.C: New test. * testsuite/libgomp.c++/scan-2.C: New test. * testsuite/libgomp.c++/scan-3.C: New test. * testsuite/libgomp.c++/scan-4.C: New test. * testsuite/libgomp.c++/scan-5.C: New test. * testsuite/libgomp.c++/scan-6.C: New test. * testsuite/libgomp.c++/scan-7.C: New test. * testsuite/libgomp.c++/scan-8.C: New test. * testsuite/libgomp.c/scan-1.c: New test. * testsuite/libgomp.c/scan-2.c: New test. * testsuite/libgomp.c/scan-3.c: New test. * testsuite/libgomp.c/scan-4.c: New test. * testsuite/libgomp.c/scan-5.c: New test. * testsuite/libgomp.c/scan-6.c: New test. * testsuite/libgomp.c/scan-7.c: New test. * testsuite/libgomp.c/scan-8.c: New test. From-SVN: r272958
2019-07-03gimplify.c (gimplify_scan_omp_clauses): For inscan reductions on worksharing ↵Jakub Jelinek6-3/+33
loop propagate it as shared clause to... * gimplify.c (gimplify_scan_omp_clauses): For inscan reductions on worksharing loop propagate it as shared clause to containing combined parallel. * c-omp.c (c_omp_split_clauses): Put OMP_CLAUSE_REDUCTION_INSCAN clauses on OMP_FOR rather than OMP_PARALLEL when OMP_FOR is combined with OMP_PARALLEL. * c-c++-common/gomp/scan-5.c: New test. From-SVN: r272957
2019-07-03omp-expand.c (expand_omp_for_static_nochunk, [...]): For nowait worksharing ↵Jakub Jelinek4-0/+56
loop with conditional lastprivate clause(s)... * omp-expand.c (expand_omp_for_static_nochunk, expand_omp_for_static_chunk): For nowait worksharing loop with conditional lastprivate clause(s), emit GOMP_loop_end_nowait call at the end. * c-c++-common/gomp/lastprivate-conditional-5.c: New test. From-SVN: r272956
2019-07-03compiler: rework type and package tracking in exporterIan Lance Taylor5-290/+384
Revamps the way the exporter tracks exported types and imported packages that need to be mentioned in the export data. The previous implementation wasn't properly handling the case where an exported non-inlinable function refers to an imported type whose method set includes an inlinable function whose body makes a call to a function in another package that's not directly used in the original package. This patch integrates together two existing traversal helper classes, "Collect_references_from_inline" and "Find_types_to_prepare" into a single helper "Collect_export_references", so as to have common/shared code that looks for indirectly imported packages. Fixes golang/go#32778 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/183850 From-SVN: r272955
2019-07-03re PR testsuite/91065 (gcc.dg/plugin/start_unit_plugin.c uses ggc memory ↵Joern Rennecke2-0/+19
without registering a root_tab) PR testsuite/91065 * testsuite/gcc.dg/plugin/start_unit_plugin.c: Register a root tab to reference fake_var. From-SVN: r272954
2019-07-03Daily bump.GCC Administrator1-1/+1
From-SVN: r272953
2019-07-02re PR tree-optimization/90883 (Generated code is worse if returned struct is ↵Jeff Law2-2/+9
unnamed) PR tree-optimization/90883 * g++.dg/tree-ssa/pr90883.c: Add -Os. Check dse2 for the deleted store on some targets. From-SVN: r272949
2019-07-02re PR preprocessor/90581 (provide an option to adjust the maximum depth of ↵Qing Zhao10-0/+38
nested #include) PR preprocessor/90581 Add a cpp option -fmax-include-depth to set the maximum depth of the nested #include. From-SVN: r272948
2019-07-02[PATCH, Ada, Darwin, PPC] PPC Darwin has stack check probes.Iain Sandoe2-1/+6
On PPC, Darwin uses the same code as other parts of the port. 2019-07-02 Iain Sandoe <iain@sandoe.co.uk> * libgnat/system-darwin-ppc.ads: Set Stack_Check_Probes True for PPC Darwin. From-SVN: r272947
2019-07-02optabs.def (movmem_optab): Add movmem back for memmove().Aaron Sawdey2-0/+37
2019-07-02 Aaron Sawdey <acsawdey@linux.ibm.com> * optabs.def (movmem_optab): Add movmem back for memmove(). * doc/md.texi: Add description of movmem pattern for overlapping move. From-SVN: r272946
2019-07-02compiler: use builtin memset for non-pointer memclrCherry Zhang6-15/+40
For zeroing a range of memory that doesn't contain pointer, we can use builtin memset directly. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/184438 * go-gcc.cc (Gcc_backend::Gcc_backend): Define __builtin_memset. From-SVN: r272944
2019-07-02mmx.md (mmx_pack<s_trunsuffix>swb): Use TARGET_SSE2 && SSE_REGNO_P in split ↵Uros Bizjak3-15/+52
condition. * config/i386/mmx.md (mmx_pack<s_trunsuffix>swb): Use TARGET_SSE2 && SSE_REGNO_P in split condition. (mmx_packssdw): Ditto. (mmx_punpckhbw): Ditto. (mmx_punpcklbw): Ditto. (mmx_punpckhwd): Ditto. (mmx_punpcklwd): Ditto. (mmx_punpckhdq): Ditto. (mmx_punpckldq): Ditto. (*vec_dupv4hi): Ditto. (*vec_dupv2si): Ditto. (mmx_pmovmskb): Ditto. * config/i386/sse.md (sse_cvtpi2ps): Use TARGET_SSE2 && SSE_REG_P in split condition. (ssse3_ph<plusminus_mnemonic>wv4hi3): Use TARGET_SSSE3 && SSE_REGNO_P in split condition. (ssse3_ph<plusminus_mnemonic>dv2si3): Ditto. (ssse3_pshufbv8qi3): Ditto. (ssse3_palignrdi): Ditto. From-SVN: r272943
2019-07-02Fix amdgcn regrename ICE.Andrew Stubbs2-8/+31
2019-07-02 Andrew Stubbs <ams@codesourcery.com> gcc/ * config/gcn/gcn.md (movdi_symbol_save_scc): Convert to define_insn with inlined save and restore. From-SVN: r272932
2019-07-02* cfgrtl.c (commit_edge_insertions): Rebuild jump labels chain.Eric Botcazou2-2/+6
From-SVN: r272930
2019-07-02cfgexpand.c (pass_expand::execute): Deal specially with instructions to be ↵Eric Botcazou3-26/+25
inserted on single successor edge of the... * cfgexpand.c (pass_expand::execute): Deal specially with instructions to be inserted on single successor edge of the entry block. Then call commit_edge_insertions instead of inserting the instructions manually. * cfgrtl.c (commit_edge_insertions): Do not verify flow info during RTL expansion. From-SVN: r272929
2019-07-02tree-core.h (enum tree_index): Add TI_CHREC_DONT_KNOW and TI_CHREC_KNOWN.Richard Biener7-38/+40
2019-07-02 Richard Biener <rguenther@suse.de> * tree-core.h (enum tree_index): Add TI_CHREC_DONT_KNOW and TI_CHREC_KNOWN. * tree.h (chrec_not_analyzed_yet, chrec_dont_know, chrec_known): Define here. * tree.c (build_common_tree_nodes): Initialize them. * tree-chrec.h (chrec_not_analyzed_yet, chrec_dont_know, chrec_known): Make declarations comments. * tree-scalar-evolution.c (chrec_not_analyzed_yet, chrec_dont_know, chrec_known): Remove definitions. (initialize_scalar_evolutions_analyzer): Remove. (scev_initialize): Do not call initialize_scalar_evolutions_analyzer. * tree-streamer.c (preload_common_nodes): Do not preload TI_CHREC_DONT_KNOW or TI_CHREC_KNOWN. From-SVN: r272928
2019-07-02tree-ssa-alias.c (aliasing_component_refs_p): Remove forgotten sanity check.Jan Hubicka2-2/+5
* tree-ssa-alias.c (aliasing_component_refs_p): Remove forgotten sanity check. From-SVN: r272927
2019-07-02tree-ssa-alias.c (nonoverlapping_component_refs_for_decl_p): Rename to ..Jan Hubicka4-97/+209
* tree-ssa-alias.c (nonoverlapping_component_refs_for_decl_p): Rename to .. (nonoverlapping_component_refs_since_match_p): ... this one; handle also non-decl bases; return -1 if search gave up. (alias_stats): Rename nonoverlapping_component_refs_of_decl_p_may_alias, nonoverlapping_component_refs_of_decl_p_no_alias to nonoverlapping_component_refs_since_match_p_may_alias, nonoverlapping_component_refs_since_match_p_no_alias. (dump_alias_stats): Update dumping. (aliasing_matching_component_refs_p): Break out from ...; dispatch to nonoverlapping_component_refs_for_decl_p and nonoverlapping_component_refs_since_match_p. (aliasing_component_refs_p): ... here; call nonoverlapping_component_refs_p in scenarios where we can not precisely determine base match. (decl_refs_may_alias_p): Use nonoverlapping_component_refs_since_match_p. (indirect_ref_may_alias_decl_p): Do not call nonoverlapping_component_refs_p. (indirect_refs_may_alias_p): Likewise. * gcc.dg/tree-ssa/alias-access-path-7.c: New testcase. From-SVN: r272926
2019-07-02tree-inline.c (remap_gimple_stmt): Do not subtitute handled components to ↵Jan Hubicka4-1/+52
clobber of return value. * tree-inline.c (remap_gimple_stmt): Do not subtitute handled components to clobber of return value. * g++.dg/lto/pr90990_0.C: New testcase. From-SVN: r272925
2019-07-02[arm/AArch64] Assume unhandled NEON types are neon_arith_basic types when ↵Kyrylo Tkachov2-1/+12
scheduling for Cortex-A57 Some scheduling descriptions, like the Cortex-A57 one, are reused for multiple -mcpu options. Sometimes those other -mcpu cores support more architecture features than the Armv8-A Cortex-A57. For example, the Cortex-A75 and Cortex-A76 support Armv8.2-A as well as the Dot Product instructions. These Dot Product instructions have the neon_dot and neon_dot_q scheduling type, but that type is not handled in cortex-a57.md, since the Cortex-A57 itself doesn't need to care about these instructions. But if we just ignore the neon_dot(_q) type at scheduling we get really terrible codegen when compiling for -mcpu=cortex-a76, for example, because the scheduler just pools all the UDOT instructions at the end of the basic block, since it doesn't assume anything about their behaviour. This patch ameliorates the situation somewhat by telling the Cortex-A57 scheduling model to treat any insn that doesn't get assigned a cortex_a57_neon_type but is actually a is_neon_type instruction as a simple neon_arith_basic instruction. This allows us to treat post-Armv8-A SIMD instructions more sanely without having to model each of them explicitly in cortex-a57.md. * config/arm/cortex-a57.md (cortex_a57_neon_type): Use neon_arith_basic for is_neon_type instructions that have not already been categorized. From-SVN: r272924
2019-07-02lto-common.c (lto_register_canonical_types_for_odr_types): Copy CXX_ODR_P ↵Jan Hubicka2-2/+16
from the main variant. * lto-common.c (lto_register_canonical_types_for_odr_types): Copy CXX_ODR_P from the main variant. From-SVN: r272923
2019-07-02re PR tree-optimization/58483 (missing optimization opportunity for const ↵Richard Biener4-2/+36
std::vector compared to std::array) 2019-07-02 Richard Biener <rguenther@suse.de> PR tree-optimization/58483 * tree-ssa-scopedtables.c (avail_expr_hash): Use OEP_ADDRESS_OF for MEM_REF base hashing. (equal_mem_array_ref_p): Likewise for base comparison. * gcc.dg/tree-ssa/ssa-dom-cse-8.c: New testcase. From-SVN: r272922
2019-07-02compiler: refactoring in Export class to encapsulate type refs mapIan Lance Taylor3-22/+35
Convert the Export::type_refs map from a static object to a field contained (indirectly, via an impl class) in Export itself, for better encapsulation and to be able to reclaim its memory when exporting is done. No change in compiler functionality. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/184170 From-SVN: r272919
2019-07-02Daily bump.GCC Administrator1-1/+1
From-SVN: r272916
2019-07-01rs6000.md (signbit<mode>2_dm): Make this a parameterized name.Segher Boessenkool2-8/+8
@signbit<mode>2_dm * config/rs6000/rs6000.md (signbit<mode>2_dm): Make this a parameterized name. (signbit<mode>2): Use that name. Simplify. From-SVN: r272912
2019-07-01re PR tree-optimization/66726 (missed optimization, factor conversion out of ↵Joern Rennecke3-1/+37
COND_EXPR) PR middle-end/66726 * tree-ssa-phiopt.c (factor_out_conditional_conversion): Tune heuristic from PR71016 to allow MIN / MAX. * testsuite/gcc.dg/tree-ssa/pr66726-4.c: New testcase. From-SVN: r272911
2019-07-01* config/i386/constraints.md: Remove stalled comment w.r.t. Yh constraint.Uros Bizjak1-1/+0
From-SVN: r272908
2019-07-01rs6000.md (ieee_128bit_vsx_abs<mode>2): Make this a parameterized name.Segher Boessenkool2-7/+9
@ieee_128bit_vsx_abs<mode>2 * config/rs6000/rs6000.md (ieee_128bit_vsx_abs<mode>2): Make this a parameterized name. (abs<mode>2): Use that name. Simplify. From-SVN: r272907
2019-07-01rs6000.md (ieee_128bit_vsx_neg<mode>2): Make this a parameterized name.Segher Boessenkool2-9/+9
@ieee_128bit_vsx_neg<mode>2 * config/rs6000/rs6000.md (ieee_128bit_vsx_neg<mode>2): Make this a parameterized name. (neg<mode>2): Use that name. Simplify. From-SVN: r272906
2019-07-01rs6000.md (abs<mode>2_hw): Make this a parameterized name.Segher Boessenkool2-7/+8
@abs<mode>2_hw * config/rs6000/rs6000.md (abs<mode>2_hw): Make this a parameterized name. (abs<mode>2): Use that name. Simplify. From-SVN: r272905
2019-07-01rs6000.md (neg<mode>2_hw): Make this a parameterized name.Segher Boessenkool2-9/+8
@neg<mode>2_hw * config/rs6000/rs6000.md (neg<mode>2_hw): Make this a parameterized name. (neg<mode>2): Use that name. Simplify. From-SVN: r272904
2019-07-01rs6000.md (extenddf<mode>2): Make this a parameterized name.Segher Boessenkool2-7/+8
@extenddf<mode>2 * config/rs6000/rs6000.md (extenddf<mode>2): Make this a parameterized name. (floatsi<mode>2): Use that name. Simplify. From-SVN: r272903