aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2017-12-15[PR C++/59930] template friend classes & default argsNathan Sidwell8-65/+62
https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01055.html PR c++/59930 * decl.c (xref_tag_1): Correct comments about template friends and default args. * friend.c (make_friend_class): Move comments concerning self-friendliness to code dealing with such. * pt.c (check_default_tmpl_args): Deal with template friend classes too. (push_template_decl_real): Check default args for non-function template friends. PR c++/59930 * g++.dg/cpp0x/temp_default4.C: Adjust diagnostic. * g++.old-deja/g++.pt/friend23.C: Likewise. * g++.old-deja/g++.pt/friend24.C: Delete. From-SVN: r255698
2017-12-15re PR tree-optimization/83269 (Wrong constant folding)Jakub Jelinek4-6/+35
PR tree-optimization/83269 * fold-const.c (fold_binary_loc): Perform (-A) - B -> (-B) - A subtraction in arg0's type if type is signed and arg0 is unsigned. Formatting fix. * gcc.c-torture/execute/pr83269.c: New test. From-SVN: r255697
2017-12-15re PR sanitizer/81281 (UBSAN: false positive, dropped promotion to long type.)Jakub Jelinek4-20/+147
PR sanitizer/81281 * match.pd ((T)(P + A) - (T)P -> (T) A): Use @@0 instead of @0 and convert? on @0 instead of convert. Check type of @1, not @0. ((T)P - (T)(P + A) -> -(T) A): Use @@0 instead of @0 and convert? on @0 instead of convert. Check type of @1, not @0. ((T)(P + A) - (T)(P + B) -> (T)A - (T)B): Use @@0 instead of @0, only optimize if either both @1 and @2 types are narrower precision, or both are wider or equal precision, and in the former case only if both have undefined overflow. * gcc.dg/pr81281-3.c: New test. From-SVN: r255696
2017-12-15exp_aggr.adb (Aggr_Assignment_OK_For_Backend): Use Component_Size of the ↵Pierre-Marie de Rodat21-56/+319
innermost array instead of Esize of its component... gcc/ada/ 2017-12-15 Eric Botcazou <ebotcazou@adacore.com> * exp_aggr.adb (Aggr_Assignment_OK_For_Backend): Use Component_Size of the innermost array instead of Esize of its component type to exclude inappropriate array types, including packed array types. 2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * sem_prag.adb (Analyze_Input_Item): Allow concurrent types to appear within the input list of Initializes. Remove the uses of Input_OK. 2017-12-15 Ed Schonberg <schonberg@adacore.com> * exp_ch4.adb (Expand_N_In): Do not replace a membership test on a scalar type with a validity test when the membership appears in a predicate expression, to prevent a spurious error when predicate is specified static. * sem_ch13.adb (Build_Predicate_Functions): Add warning if a static predicate, after constant-folding, reduces to True and is this redundant. * par-ch4.adb: Typo fixes and minor reformattings. 2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * sem_elab.adb (Ensure_Prior_Elaboration_Static): Mark the generated with clause as being implicit for an instantiation in order to circumvent an issue with 'W' and 'Z' line encodings in ALI files. 2017-12-15 Ed Schonberg <schonberg@adacore.com> * sem_util.adb (Is_Potentially_Unevaluated): Detect further cases of misuse of 'Old that appear within an expression that is potentially unevaluated, when the prefix of the attribute does not statically designate an object (e.g. a function call). 2017-12-15 Ed Schonberg <schonberg@adacore.com> * sem_ch6.adb (Conformking_Types): Two incomplete types are conforming when one of them is used as a generic actual, but only within an instantiation. * einfo.ads: Clarify use of flag Used_As_Generic_Actual. 2017-12-15 Justin Squirek <squirek@adacore.com> * sem_attr.adb (Resolve_Attribute): Modify check for aliased view on prefix to use the prefix's original node to avoid looking at expanded conversions for certain array types. 2017-12-15 Ed Schonberg <schonberg@adacore.com> * sem_res.adb (Resolve_Membership_Op): Add warning on a membership operation on a scalar type for which there is a user-defined equality operator. 2017-12-15 Yannick Moy <moy@adacore.com> * doc/gnat_rm/implementation_defined_pragmas.rst: Add Ghost assertion policy. gcc/testsuite/ 2017-12-15 Justin Squirek <squirek@adacore.com> * gnat.dg/aliasing4.adb: New testcase. 2017-12-15 Ed Schonberg <schonberg@adacore.com> * gnat.dg/incomplete6.adb, gnat.dg/incomplete6.ads: New testcase. 2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * gnat.dg/initializes.ads, gnat.dg/initializes.adb: New testcase. 2017-12-15 Eric Botcazou <ebotcazou@adacore.com> * gnat.dg/component_size.adb: New testcase. From-SVN: r255695
2017-12-15re PR sanitizer/83388 (reference statement index not found error with ↵Richard Biener6-8/+56
-fsanitize=null) 2017-12-15 Richard Biener <rguenther@suse.de> PR lto/83388 * internal-fn.def (IFN_NOP): Add. * internal-fn.c (expand_NOP): Do nothing. * lto-streamer-in.c (input_function): Instead of removing sanitizer calls replace them with IFN_NOP calls. * gcc.dg/lto/pr83388_0.c: New testcase. From-SVN: r255694
2017-12-15[multiple changes]Pierre-Marie de Rodat22-136/+636
2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * sem_prag.adb (Analyze_Initialization_Item): Remove the specialized processing for a null initialization item. Such an item is always illegal. 2017-12-15 Bob Duff <duff@adacore.com> * types.ads, types.h, libgnat/a-except.adb, exp_ch11.adb (PE_Build_In_Place_Mismatch): New reason code for raising when the BIPalloc formal parameter is incorrect. This can happen if a compiler bug causes a mismatch of build-in-place between caller and callee. * exp_ch6.adb (Expand_N_Extended_Return_Statement): Use PE_Build_In_Place_Mismatch. 2017-12-15 Ed Schonberg <schonberg@adacore.com> * exp_ch4.ads, exp_ch4.adb (Expand_N_Reduction_Expression): New procedure. * exp_util.adb (Insert_Actions): Handle N_Reduction_Expression. * expander.adb (Expand): Call Expand_N_Reduction_Expression * par-ch4.adb (P_Reduction_Expression): New procedure. (P_Iterated_Component_Assoc_Or_Reduction): New precedure, extension of P_Iterated_Component_Association. (OK_Reduction_Expression_Parameter): New procedure. (P_Aggregate_Or_Paren_Expr): Improve error message for malformed delta aggregate. * sem.adb (Analyze): Call Analyze_Reduction_Expression and Analyze_Reduction_Expression_Parameter * sinfo.ads, sinfo.adb: New node kinds N_Reduction_Expression and N_Reduction_Expression_Parameter. * sem_ch4.ads, sem_ch4.adb (Analyze_Reduction_Expression, Analyze_Reduction_Expression_Parameter): New procedures. * sem_res.adb (Resolve): Handle Reduction_Expression and Reduction_Expression_Parameter * sem_spark.adb: Dummy entries for Reduction_Expression and Reduction_Expression_Parameter * sprint.adb (Sprint_Node_Actual): Print Reduction_Expression, Reduction_Expression_Parameter From-SVN: r255693
2017-12-15Make dse.c use offset/width instead of start/endRichard Sandiford2-78/+132
store_info and read_info_type in dse.c represented the ranges as start/end, but a lot of the internal code used offset/width instead. Using offset/width throughout fits better with the poly_int.h range-checking functions. 2017-12-15 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> gcc/ * dse.c (store_info, read_info_type): Replace begin and end with offset and width. (print_range): New function. (set_all_positions_unneeded, any_positions_needed_p) (check_mem_read_rtx, scan_stores, scan_reads, dse_step5): Update accordingly. (record_store): Likewise. Optimize the case in which all positions are unneeded. (get_stored_val): Replace read_begin and read_end with read_offset and read_width. (replace_read): Update call accordingly. Co-Authored-By: Alan Hayward <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r255692
2017-12-15gimple-loop-interchange.cc (STMT_COST_RATIO): New macro.Bin Cheng2-81/+114
* gimple-loop-interchange.cc (STMT_COST_RATIO): New macro. (loop_cand::m_num_stmts, loop_cand::m_const_init_reduc): New members. (loop_cand::loop_cand): Initialize above members. (loop_cand::supported_operations): Delete. (loop_cand::can_interchange_p): Inline above function. (loop_cand::classify_simple_reduction): Record number of constant initialized simple reductions. (should_interchange_loops): New parameters. Check stmt cost of loops to be interchange. (tree_loop_interchange::interchange): Prepare stmt cost of outer loop. Update call to should_interchange_loops. (should_interchange_loop_nest): Update call to should_interchange_loops. From-SVN: r255691
2017-12-15einfo.ads: Comment fix.Pierre-Marie de Rodat11-199/+493
gcc/ada/ 2017-12-15 Bob Duff <duff@adacore.com> * einfo.ads: Comment fix. 2017-12-15 Piotr Trojanek <trojanek@adacore.com> * s-vercon.adb: Minor style fixes. 2017-12-15 Ed Schonberg <schonberg@adacore.com> * sem_ch6.adb (Freeze_Expr_Types): Do not emit a freeze node for an itype that is the type of a discriminant-dependent component. 2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * sem_prag.adb (Analyze_Part_Of): The context-specific portion of the analysis is now directed to several specialized routines. (Check_Part_Of_Abstract_State): New routine. (Check_Part_Of_Concurrent_Type): New routine. Reimplement the checks involving the item, the single concurrent type, and their respective contexts. * sem_res.adb (Resolve_Entity_Name): Potential constituents of a single concurrent type are now recorded regardless of the SPARK mode. * sem_util.adb (Check_Part_Of_Reference): Split some of the tests in individual predicates. A Part_Of reference is legal when it appears within the statement list of the object's immediately enclosing package. (Is_Enclosing_Package_Body): New routine. (Is_Internal_Declaration_Or_Body): New routine. (Is_Single_Declaration_Or_Body): New routine. (Is_Single_Task_Pragma): New routine. gcc/testsuite/ 2017-12-15 Ed Schonberg <schonberg@adacore.com> * gnat.dg/expr_func2.ads, gnat.dg/expr_func2.adb: New testcase. From-SVN: r255690
2017-12-15re PR target/66488 (segfault on sizeof(long) < sizeof(void*) and large GCC ↵Eric Botcazou4-10/+8
memory usage) 2017-12-15 Eric Botcazou <ebotcazou@adacore.com> PR target/66488 * ggc-page.c (HOST_BITS_PER_PTR): Do not define here... * hwint.h (HOST_BITS_PER_PTR): ...but here instead. * config/i386/xm-mingw32.h (HOST_BITS_PER_PTR): Delete. From-SVN: r255687
2017-12-15[multiple changes]Pierre-Marie de Rodat3-4/+24
2017-12-15 Patrick Bernardi <bernardi@adacore.com> * gnat_ugn.texi: Regenerate. 2017-12-15 Bob Duff <duff@adacore.com> * gnatvsn.ads: Minor comment fixes. From-SVN: r255686
2017-12-15gnat_and_program_execution.rst: Update section "Dynamic Stack Usage ↵Pierre-Marie de Rodat12-68/+211
Analysis" to include more details about... gcc/ada/ 2017-12-15 Patrick Bernardi <bernardi@adacore.com> * doc/gnat_ugn/gnat_and_program_execution.rst: Update section "Dynamic Stack Usage Analysis" to include more details about GNAT_STACK_LIMIT. 2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * exp_util.adb (Add_Own_DIC): Ensure that the expression of the pragma is available (Is_Verifiable_DIC_Pragma): Moved from Sem_Util. * sem_util.adb (Has_Full_Default_Initialization): Has_Fully_Default_Initializing_DIC_Pragma is now used to determine whether a type has full default initialization due to pragma Default_Initial_Condition. (Has_Fully_Default_Initializing_DIC_Pragma): New routine. (Is_Verifiable_DIC_Pragma): Moved to Exp_Util. * sem_util.ads (Has_Fully_Default_Initializing_DIC_Pragma): New routine. (Is_Verifiable_DIC_Pragma): Moved to Exp_Util. * sem_warn.adb (Is_OK_Fully_Initialized): Has_Fully_Default_Initializing_DIC_Pragma is now used to determine whether a type has full default initialization due to pragma Default_Initial_Condition. 2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * sem_prag.adb (Match_Constituent): Do not quietly accept constants as suitable constituents. * exp_util.adb: Minor reformatting. 2017-12-15 Ed Schonberg <schonberg@adacore.com> * exp_aggr.adb (In_Place_Assign_OK): Extend the predicate to recognize an array aggregate in an allocator, when the designated type is unconstrained and the upper bound of the aggregate belongs to the base type of the index. 2017-12-15 Bob Duff <duff@adacore.com> * exp_ch6.adb (Expand_N_Extended_Return_Statement, Expand_Simple_Function_Return): Assert that the b-i-p-ness of the caller and callee match. Otherwise, we would need some substantial changes to allow b-i-p calls non-b-i-p, and vice versa. gcc/testsuite/ 2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * gnat.dg/dflt_init_cond.adb, gnat.dg/dflt_init_cond_pkg.ads: New testcase. From-SVN: r255685
2017-12-15gcc/ada/ChangeLog: add entries missing from previous commitPierre-Marie de Rodat1-0/+51
From-SVN: r255684
2017-12-15exp_unst.adb (Unnest_Subprograms): Nothing to do if the main unit is a ↵Pierre-Marie de Rodat23-138/+387
generic package body. gcc/ada/ 2017-12-15 Ed Schonberg <schonberg@adacore.com> * exp_unst.adb (Unnest_Subprograms): Nothing to do if the main unit is a generic package body. Unnesting is only an issue when generating code, and if the main unit is generic then nested instance bodies have not been created and analyzed, and unnesting will crash in the absence of those bodies, 2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * inline.adb (Add_Inlined_Body): Do not add a function which is completed by an expression function defined in the same context as the initial declaration because the completing body is not in a package body. (Is_Non_Loading_Expression_Function): New routine. 2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * debug.adb: Move the functionality of -gnatdL to -gnatd_i. Restore the behavior of -gnatdL from before revision 255412. * sem_elab.adb: Update the section of compiler switches. (Build_Call_Marker): Do not create a marker for a call which originates from an expanded spec or body of an instantiated gener, does not invoke a generic formal subprogram, the target is external to the instance, and -gnatdL is in effect. (In_External_Context): New routine. (Process_Conditional_ABE_Activation_Impl): Update the uses of -gnatdL and associated flag. (Process_Conditional_ABE_Call): Update the uses of -gnatdL and associated flag. * switch-c.adb (Scan_Front_End_Switches): Switch -gnatJ now sets switch -gnatd_i. * exp_unst.adb: Minor typo fixes and edits. 2017-12-15 Ed Schonberg <schonberg@adacore.com> * sem_ch6.adb (Possible_Freeze): Do not set Delayed_Freeze on an subprogram instantiation, now that the enclosing wrapper package carries an explicit freeze node. THis prevents freeze nodes for the subprogram for appearing in the wrong scope. This is relevant when the generic subprogram has a private or incomplete formal type and the instance appears within a package that declares the actual type for the instantiation, and that type has itself a delayed freeze. 2017-12-15 Patrick Bernardi <bernardi@adacore.com> * doc/gnat_ugn/gnat_and_program_execution.rst: Removed references to the environment variable GNAT_STACK_LIMIT from the Stack Overflow Checking section as it is no longer used by any of our supported targets. gcc/testsuite/ 2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * gnat.dg/expr_func_main.adb, gnat.dg/expr_func_pkg.ads, gnat.dg/expr_func_pkg.adb: New testcase. 2017-12-15 Hristian Kirtchev <kirtchev@adacore.com> * gnat.dg/abe_pkg.adb, gnat.dg/abe_pkg.ads: New testcase. 2017-12-15 Ed Schonberg <schonberg@adacore.com> * gnat.dg/subp_inst.adb, gnat.dg/subp_inst_pkg.adb, gnat.dg/subp_inst_pkg.ads: New testcase. From-SVN: r255683
2017-12-15[multiple changes]Pierre-Marie de Rodat8-30/+90
2017-12-15 Bob Duff <duff@adacore.com> * exp_ch6.adb (Expand_N_Extended_Return_Statement): If the Init_Assignment is rewritten, we need to set Assignment_OK on the new node. Otherwise, we will get spurious errors when initializing via assignment statement. 2017-12-15 Arnaud Charlet <charlet@adacore.com> * exp_unst.adb (Visit_Node): Refine handling of 'Access to ignore non relevant nodes. (Has_Non_Null_Statements): Moved to sem_util for later reuse. 2017-12-15 Eric Botcazou <ebotcazou@adacore.com> * exp_attr.adb (Is_Inline_Floating_Point_Attribute): Fix comment. * libgnat/s-fatgen.adb (Model): Use Machine attribute. (Truncation): Likewise. 2017-12-15 Bob Duff <duff@adacore.com> * exp_ch7.adb (Expand_Cleanup_Actions): Make sure the block and handled statement sequence generated for certain extended return statements have a Sloc that is not No_Location. Otherwise, the back end doesn't set any location and ends up reading uninitialized variables. From-SVN: r255680
2017-12-15types.ads, [...]: Partly revert r255414, committed by mistake.Bob Duff5-8/+9
2017-12-15 Bob Duff <duff@adacore.com> * types.ads, exp_ch6.adb, libgnat/s-regexp.ads, opt.ads: Partly revert r255414, committed by mistake. From-SVN: r255679
2017-12-15Enable VAES support [5/5]Julia Koval8-0/+127
gcc/ * config/i386/i386-builtin.def (__builtin_ia32_vaesenclast_v16qi, __builtin_ia32_vaesenclast_v32qi, __builtin_ia32_vaesenclast_v64qi): New. * config/i386/sse.md (vaesenclast_<mode>): New pattern. * config/i386/vaesintrin.h (_mm256_aesenclast_epi128, _mm512_aesenclast_epi128, _mm_aesenclast_epi128): New intrinsics. gcc/testsuite/ * gcc.target/i386/avx512f-aesenclast-2.c: New test. * gcc.target/i386/avx512vl-aesenclast-2.c: Ditto. * gcc.target/i386/avx512fvl-vaes-1.c: Handle new intrinsics. From-SVN: r255676
2017-12-15Enable VAES support [4/5]Julia Koval8-1/+125
gcc/ * config/i386/i386-builtin.def (__builtin_ia32_vaesenc_v16qi, __builtin_ia32_vaesenc_v32qi, __builtin_ia32_vaesenc_v64qi): New. * config/i386/sse.md (vaesenc_<mode>): New pattern. * config/i386/vaesintrin.h (_mm256_aesenc_epi128, _mm512_aesenc_epi128, _mm_aesenc_epi128): New intrinsics. gcc/testsuite/ * gcc.target/i386/avx512f-aesenc-2.c: New test. * gcc.target/i386/avx512vl-aesenc-2.c: Ditto. * gcc.target/i386/avx512fvl-vaes-1.c: Handle new intrinsics. From-SVN: r255675
2017-12-15Enable VAES support [3/5]Julia Koval8-1/+127
gcc/ * config/i386/i386-builtin.def (__builtin_ia32_vaesdeclast_v16qi, __builtin_ia32_vaesdeclast_v32qi, __builtin_ia32_vaesdeclast_v64qi): New. * config/i386/sse.md (vaesdeclast_<mode>): New pattern. * config/i386/vaesintrin.h (_mm256_aesdeclast_epi128, _mm512_aesdeclast_epi128, _mm_aesdeclast_epi128): New intrinsics. gcc/testsuite/ * gcc.target/i386/avx512f-aesdeclast-2.c: New test. * gcc.target/i386/avx512vl-aesdeclast-2.c * gcc.target/i386/avx512fvl-vaes-1.c: Handle new intrinsics. From-SVN: r255674
2017-12-14Fix ChangeLog entry datePeter Bergner1-1/+1
From-SVN: r255673
2017-12-15Daily bump.GCC Administrator1-1/+1
From-SVN: r255670
2017-12-14gimple-ssa-strength-reduction.c (analyze_increments): Distinguish ↵Bill Schmidt2-1/+17
replacement costs for constant strides from those for unknown strides. 2017-12-14 Bill Schmidt <wschmidt@linux.vnet.ibm.com> * gimple-ssa-strength-reduction.c (analyze_increments): Distinguish replacement costs for constant strides from those for unknown strides. From-SVN: r255664
2017-12-14* var-tracking.c (variable_tracking_main_1): Formatting fix.Jakub Jelinek2-2/+6
From-SVN: r255663
2017-12-14invoke.texi: Document -Wcast-function-type.Bernd Edlinger17-13/+253
gcc: 2017-12-14 Bernd Edlinger <bernd.edlinger@hotmail.de> * doc/invoke.texi: Document -Wcast-function-type. * recog.h (stored_funcptr): Change signature. * tree-dump.c (dump_node): Avoid warning. * typed-splay-tree.h (typed_splay_tree): Avoid warning. libcpp: 2017-12-14 Bernd Edlinger <bernd.edlinger@hotmail.de> * internal.h (maybe_print_line): Change signature. c-family: 2017-12-14 Bernd Edlinger <bernd.edlinger@hotmail.de> * c.opt (Wcast-function-type): New warning option. * c-lex.c (get_fileinfo): Avoid warning. * c-ppoutput.c (scan_translation_unit_directives_only): Remove cast. c: 2017-12-14 Bernd Edlinger <bernd.edlinger@hotmail.de> * c-typeck.c (c_safe_arg_type_equiv_p, c_safe_function_type_cast_p): New function. (build_c_cast): Implement -Wcast-function-type. cp: 2017-12-14 Bernd Edlinger <bernd.edlinger@hotmail.de> * decl2.c (start_static_storage_duration_function): Avoid warning. * typeck.c (cxx_safe_arg_type_equiv_p, cxx_safe_function_type_cast_p): New function. (build_reinterpret_cast_1): Implement -Wcast-function-type. testsuite: 2017-12-14 Bernd Edlinger <bernd.edlinger@hotmail.de> * c-c++-common/Wcast-function-type.c: New test. * g++.dg/Wcast-function-type.C: New test. From-SVN: r255661
2017-12-14Patch for middle-end/PR79538Qing Zhao8-26/+95
missing -Wformat-overflow with %s and non-member array arguments -Wformat-overflow uses the routine "get_range_strlen" to decide the maximum string length, however, currently "get_range_strlen" misses the handling of non-member arrays. Adding the handling of non-member array resolves the issue. Adding test case pr79538.c into gcc.dg. During gcc bootstrap, 2 source files (c-family/c-cppbuiltin.c, fortran/class.c) were detected new warnings by -Wformat-overflow due to the new handling of non-member array in "get_range_strlen". in order to avoid these new warnings and continue with bootstrap, updating these 2 files to avoid the warnings. in c-family/c-cppbuiltin.c, the warning is following: ../../latest_gcc_2/gcc/c-family/c-cppbuiltin.c:1627:15: note: ‘sprintf’ output 2 or more bytes (assuming 257) into a destination of size 256 sprintf (buf1, "%s=%s", macro, buf2); ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~ in the above, buf1 and buf2 are declared as: char buf1[256], buf2[256]; i.e, buf1 and buf2 have same size. adjusting the size of buf1 and buf2 resolves the warning. fortran/class.c has the similar issue as above. Instead of adjusting size of the buffers, replacing sprintf with xasprintf is a better solution for these cases. From-SVN: r255654
2017-12-14* gcc-interface/Makefile.in: Generalize support for symbolic traces.Eric Botcazou2-2/+32
From-SVN: r255653
2017-12-14* gcc-interface/misc.c (default_pass_by_ref): Minor tweak.Eric Botcazou2-6/+10
From-SVN: r255650
2017-12-14vrp_prop: Use dom_walker for -Warray-bounds (PR tree-optimization/83312)David Malcolm6-58/+152
gcc/ChangeLog: PR tree-optimization/83312 * domwalk.h (dom_walker::dom_walker): Fix typo in comment. * tree-cfg.c (find_taken_edge): Update to handle NULL_TREE for "val" param, and to cope with arbitrary basic blocks. (find_taken_edge_cond_expr): Add "cond_stmt" param and use it to handle NULL_TREE for "val", dropping "bb" param. (find_taken_edge_switch_expr): Make "switch_stmt" param const and drop "bb" param. Handle NULL_TREE for "val". (find_case_label_for_value): Make "switch_stmt" param const. * tree-vrp.c (class check_array_bounds_dom_walker): New subclass of dom_walker. (vrp_prop::check_all_array_refs): Reimplement as... (check_array_bounds_dom_walker::before_dom_children): ...this new vfunc. Replace linear search through BB block list, excluding those with non-executable in-edges via dominator walk. gcc/testsuite/ChangeLog: PR tree-optimization/83312 * gcc.dg/pr83312.c: New test case. From-SVN: r255649
2017-12-14trans.c (Call_to_gnu): Set DECL_DISREGARD_INLINE_LIMITS to 0 on the callee ↵Eric Botcazou2-4/+15
if the call is recursive. * gcc-interface/trans.c (Call_to_gnu): Set DECL_DISREGARD_INLINE_LIMITS to 0 on the callee if the call is recursive. From-SVN: r255648
2017-12-14decl.c (gnat_to_gnu_field): Do not set the alignment of the enclosing record ↵Eric Botcazou4-1/+32
type if it is not already set. * gcc-interface/decl.c (gnat_to_gnu_field): Do not set the alignment of the enclosing record type if it is not already set. From-SVN: r255645
2017-12-14[arm] Add -mverbose-cost-dump and de-verbosify cost dumpsKyrylo Tkachov3-1/+10
This patch adds an -mverbose-cost-dump option, similar to the one in aarch64. It makes the RTX cost dump print the RTX we're costing in the backend, as well as its cost. This can be distracting in other cost-related RTL dumps like combine's. So now we don't dump the backend information by default, but provide the power-user option -mverbose-cost-dump to enable the old verbose dumping. This option is for GCC developers debugging the compiler only, so no documentation are added. It's also trivially simple in functionality so no test is added either. Bootstrapped and tested on arm-none-linux-gnueabihf. Committed to trunk. * config/arm/arm.opt (mverbose-cost-dump): New option. * config/arm/arm.c (arm_rtx_costs): Use it. From-SVN: r255644
2017-12-14re PR lto/81406 (ICE in check_die, at dwarf2out.c:6185)Jakub Jelinek2-0/+25
PR lto/81406 * gcc.dg/lto/pr81406_0.c: New test. From-SVN: r255643
2017-12-14re PR tree-optimization/66974 (-Warray-bounds false positive with -O3)Richard Biener2-0/+20
2017-12-14 Richard Biener <rguenther@suse.de> PR tree-optimization/66974 * gcc.dg/Warray-bounds-24.c: New testcase. From-SVN: r255642
2017-12-14re PR tree-optimization/65258 (Wrong array bounds warning)Richard Biener2-0/+20
2017-12-14 Richard Biener <rguenther@suse.de> PR tree-optimization/65258 * gcc.dg/Warray-bounds-23.c: New testcase. From-SVN: r255641
2017-12-14re PR bootstrap/83396 (Bootstrap failures with Statement Frontiers)Andreas Schwab2-2/+7
PR bootstrap/83396 * reload1.c (emit_input_reload_insns): Skip debug markers. From-SVN: r255640
2017-12-14[compare-debug] use call loc for nop_endbrAlexandre Oliva2-8/+15
We skip debug insns and notes after a call that needs a nop_endbr, but since a debug insn could be the last in a block, it may affect the loc in the emitted nop_endbr insn. Although this has no effect on codegen, it does mess with debug info a bit, and it causes -fcompare-debug to fail for e.g. libsanitizer's tsan/tsan_platform_linux.cc on x86_64. So, pick the location of the call insn for the nop_endbr insn, to avoid the line number differences in dumps, including -fcompare-debug ones. Also, we don't need to determine what the insert point would be unless we're actually emitting the nop_endbr insn after the call, so rearrange the code to avoid wasting cycles. Finally, it seems like testing for barriers is a mistake. We probably never actually pass that test, for the barriers would hit BB_END first. If we did, we'd end up emitting the nop_endbr outside any BB, even after the end of the function! That would be Very Bad (TM). Now, since the test as it is can't hurt, I figured I wouldn't change the logic right now, just add a comment so that someone involved in endbr stuff can have a second look and hopefully fix it. for gcc/ChangeLog * config/i386/i386.c (rest_of_insert_endbranch): Use call loc for its nop_endbr. From-SVN: r255639
2017-12-14[SFN] next/prev_nonnote_insn_bb are no more, even for portsAlexandre Oliva7-32/+45
The patch that added _nondebug to next_ and prev_nonnote_insn_bb failed to find and adjust uses within config. Fixed. for gcc/ChangeLog PR bootstrap/83396 * config/arc/arc.c (hwloop_optimize): Skip debug insns. * config/sh/sh-protos.h (sh_find_set_of_reg): Adjust. * config/sh/sh.c: Skip debug insns besides notes. * config/sh/sh.md: Likewise. * config/sh/sh_treg_combine.cc: Likewise. * config/sh/sync.md: Likewise. From-SVN: r255638
2017-12-14Require effective target weak_undefined for visibility-22.cTom de Vries5-4/+24
2017-12-14 Tom de Vries <tom@codesourcery.com> * lib/target-supports.exp (check_effective_target_weak_undefined): New proc. * gcc.dg/visibility-22.c: Require effective target weak_undefined. * doc/sourcebuild.texi (Effective-Target Keywords, Other attributes): Add item for weak_undefined. From-SVN: r255637
2017-12-14re PR tree-optimization/67842 (Incorrect check in sese.h:bb_in_region)Richard Biener2-14/+5
2017-12-14 Richard Biener <rguenther@suse.de> PR tree-optimization/67842 * sese.h (bb_in_region): Remove #if 0'ed code. From-SVN: r255636
2017-12-14re PR tree-optimization/83326 (SPEC CPU2017 648.exchange2_s ~6% performance ↵Richard Biener4-8/+64
regression with r255267 (reproducer attached)) 2017-12-14 Richard Biener <rguenther@suse.de> PR tree-optimization/83326 * tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): Add may_be_zero parameter and handle it by not marking the first peeled copy as not exiting the loop. (try_peel_loop): Likewise. (canonicalize_loop_induction_variables): Use number_of_iterations_exit to handle the case of constant or zero iterations and perform loop header copying on-the-fly. * gcc.dg/tree-ssa/pr81388-2.c: Adjust. From-SVN: r255635
2017-12-14gigi.h (pad_type_has_rm_size): Declare.Eric Botcazou8-74/+133
* gcc-interface/gigi.h (pad_type_has_rm_size): Declare. * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Do not build a padding type for the alignment before validating the size. Flip conditional construct and add a comment. * gcc-interface/trans.c (Attribute_to_gnu) <Attr_Size>: Make sure to apply the exception for padded objects to the type of the object. * gcc-interface/utils.c (hash_pad_type): New static function. (lookup_and_insert_pad_type): Rename into... (canonicalize_pad_type): ...this. Call hash_pad_type, do only one lookup with insertion and always return the canonical type. (maybe_pad_type): Adjust to above changes. Set debug type later. (pad_type_has_rm_size): New predicate. (set_reverse_storage_order_on_pad_type): Adjust to above changes. From-SVN: r255631
2017-12-14re PR middle-end/83415 (ICE during gimplification of assignment to read-only ↵Richard Biener4-1/+25
vector) 2017-12-14 Richard Biener <rguenther@suse.de> PR c/83415 c/ * c-fold.c (c_fully_fold_internal): Treat VIEW_CONVERT_EXPR like REALPART_EXPR for the behavior of whether its operand is an lvalue. * gcc.dg/pr83415.c: New testcase. From-SVN: r255629
2017-12-14re PR tree-optimization/83418 (ICE in ↵Richard Biener4-3/+33
extract_range_for_var_from_comparison_expr, at vr-values.c:448) 2017-12-14 Richard Biener <rguenther@suse.de> PR tree-optimization/83418 * vr-values.c (vr_values::extract_range_for_var_from_comparison_expr): Instead of asserting we don't get unfolded comparisons deal with them. * gcc.dg/torture/pr83418.c: New testcase. From-SVN: r255628
2017-12-14re PR bootstrap/83396 (Bootstrap failures with Statement Frontiers)Jakub Jelinek4-11/+38
PR bootstrap/83396 * var-tracking.c (vt_initialize): Ignore non-DEBUG_INSNs outside of basic blocks. Assert debug bind insns don't appear outside of bbs, don't reset them. Assert insns without BLOCK_FOR_INSN are outside of bb. Simplify. * gcc.dg/pr83396.c: New test. From-SVN: r255627
2017-12-14re PR tree-optimization/83198 (ICE in format_floating, at ↵Jakub Jelinek5-5/+59
gimple-ssa-sprintf.c:1900) PR tree-optimization/83198 * gimple-ssa-sprintf.c (format_floating): Set type solely based on dir.modifier, regardless of TREE_TYPE (arg). Assume non-REAL_CST value if arg is a REAL_CST with incompatible type. * gcc.dg/pr83198.c: New test. * gcc.dg/tree-ssa/pr83198.c: New test. From-SVN: r255626
2017-12-14[PATCH PR81228][AARCH64]Fix ICE by adding LTGT in vec_cmp<mode><v_int_equiv>Sudakshina Das5-1/+46
This patch is a follow up to the existing discussions on https://gcc.gnu.org/ml/gcc-patches/2017-07/msg01904.html Bin had earlier submitted this patch to fix the ICE that occurs because of the missing LTGT in aarch64-simd.md. That discussion opened up a new bug report PR81647 for an inconsistent behavior. As discussed earlier on the gcc-patches discussion and on the bug report, PR81647 was occurring because of how UNEQ was handled in aarch64-simd.md rather than LTGT. Since __builtin_islessgreater is guaranteed to not give an FP exception but LTGT might, __builtin_islessgreater gets converted to ~UNEQ very early on in fold_builtin_unordered_cmp. Thus I will post a separate patch for correcting how UNEQ and other unordered comparisons are handled in aarch64-simd.md. This patch is only adding the missing LTGT to plug the ICE. Testing done: Checked for regressions on bootstrapped aarch64-none-linux-gnu and added a new compile time test case that gives out LTGT to make sure it doesn't ICE *** gcc/ChangeLog *** 2017-12-14 Sudakshina Das <sudi.das@arm.com> Bin Cheng <bin.cheng@arm.com> PR target/81228 * config/aarch64/aarch64.c (aarch64_select_cc_mode): Move LTGT to CCFPEmode. * config/aarch64/aarch64-simd.md (vec_cmp<mode><v_int_equiv>): Add LTGT. *** gcc/testsuite/ChangeLog *** 2017-12-14 Sudakshina Das <sudi.das@arm.com> PR target/81228 * gcc.dg/pr81228.c: New. Co-Authored-By: Bin Cheng <bin.cheng@arm.com> From-SVN: r255625
2017-12-14[AArch64] Specify fp16 support for Cortex-A55 and Cortex-A75Kyrylo Tkachov2-3/+8
The Cortex-A55 and Cortex-A75 processors support the fp16 extension. We already specify them as such in the arm port. This patch makes aarch64 consistent on this front. Bootstrapped and tested on aarch64-none-linux-gnu. Manually checked that compiling with aarch64-none-linux-gnu-gcc -mcpu=cortex-a55 -dM -E - < /dev/null shows __ARM_FEATURE_FP16_VECTOR_ARITHMETIC and __ARM_FEATURE_FP16_SCALAR_ARITHMETIC being specified as expected whereas they were not before this patch. * config/aarch64/aarch64-cores.def (cortex-a55, cortex-a75, cortex-a75.cortex-a55): Specify AARCH64_FL_F16 in the arch features. From-SVN: r255624
2017-12-14re PR c++/79650 (ICE on invalid c++ code with label arithmetic in ↵Jakub Jelinek4-1/+44
convert_nontype_argument (pt.c:6515)) PR c++/79650 * pt.c (convert_nontype_argument): Diagnose reduced_constant_expression_p expressions that aren't INTEGER_CST. * g++.dg/template/pr79650.C: New test. From-SVN: r255623
2017-12-14Daily bump.GCC Administrator1-1/+1
From-SVN: r255620
2017-12-14poly_int: add poly-int.hRichard Sandiford28-12/+8871
This patch adds a new "poly_int" class to represent polynomial integers of the form: C0 + C1*X1 + C2*X2 ... + Cn*Xn It also adds poly_int-based typedefs for offsets and sizes of various precisions. In these typedefs, the Ci coefficients are compile-time constants and the Xi indeterminates are run-time invariants. The number of coefficients is controlled by the target and is initially 1 for all ports. Most routines can handle general coefficient counts, but for now a few are specific to one or two coefficients. Support for other coefficient counts can be added when needed. The patch also adds a new macro, IN_TARGET_CODE, that can be set to indicate that a TU contains target-specific rather than target-independent code. When this macro is set and the number of coefficients is 1, the poly-int.h classes define a conversion operator to a constant. This allows most existing target code to work without modification. The main exceptions are: - values passed through ..., which need an explicit conversion to a constant - ?: expression in which one arm ends up being a polynomial and the other remains a constant. In these cases it would be valid to convert the constant to a polynomial and the polynomial to a constant, so a cast is needed to break the ambiguity. The patch also adds a new target hook to return the estimated value of a polynomial for costing purposes. The patch also adds operator<< on wide_ints (it was already defined for offset_int and widest_int). I think this was originally excluded because >> is ambiguous for wide_int, but << is useful for converting bytes to bits, etc., so is worth defining on its own. The patch also adds operator% and operator/ for offset_int and widest_int, since those types are always signed. These changes allow the poly_int interface to be more predictable. I'd originally tried adding the tests as selftests, but that ended up bloating cc1 by at least a third. It also took a while to build them at -O2. The patch therefore uses plugin tests instead, where we can force the tests to be built at -O0. They still run in negligible time when built that way. 2017-12-14 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> gcc/ * poly-int.h: New file. * poly-int-types.h: Likewise. * coretypes.h: Include them. (POLY_INT_CONVERSION): Define. * target.def (estimated_poly_value): New hook. * doc/tm.texi.in (TARGET_ESTIMATED_POLY_VALUE): New hook. * doc/tm.texi: Regenerate. * doc/poly-int.texi: New file. * doc/gccint.texi: Include it. * doc/rtl.texi: Describe restrictions on subreg modes. * Makefile.in (TEXI_GCCINT_FILES): Add poly-int.texi. * genmodes.c (NUM_POLY_INT_COEFFS): Provide a default definition. (emit_insn_modes_h): Emit a definition of NUM_POLY_INT_COEFFS. * targhooks.h (default_estimated_poly_value): Declare. * targhooks.c (default_estimated_poly_value): New function. * target.h (estimated_poly_value): Likewise. * wide-int.h (WI_UNARY_RESULT): Use wi::binary_traits. (wi::unary_traits): Delete. (wi::binary_traits::signed_shift_result_type): Define for offset_int << HOST_WIDE_INT, etc. (generic_wide_int::operator <<=): Define for all types and use wi::lshift instead of <<. (wi::hwi_with_prec): Add a default constructor. (wi::ints_for): New class. (operator <<): Define for all wide-int types. (operator /): New function. (operator %): Likewise. * selftest.h (ASSERT_KNOWN_EQ, ASSERT_KNOWN_EQ_AT, ASSERT_MAYBE_NE) (ASSERT_MAYBE_NE_AT): New macros. gcc/testsuite/ * gcc.dg/plugin/poly-int-tests.h, gcc.dg/plugin/poly-int-test-1.c, gcc.dg/plugin/poly-int-01_plugin.c, gcc.dg/plugin/poly-int-02_plugin.c, gcc.dg/plugin/poly-int-03_plugin.c, gcc.dg/plugin/poly-int-04_plugin.c, gcc.dg/plugin/poly-int-05_plugin.c, gcc.dg/plugin/poly-int-06_plugin.c, gcc.dg/plugin/poly-int-07_plugin.c: New tests. * gcc.dg/plugin/plugin.exp: Run them. Co-Authored-By: Alan Hayward <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r255617