summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* x86: Add -mfunction-return=H.J. Lu2018-01-0756-49/+476
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add -mfunction-return= option to convert function return to call and return thunks. The default is 'keep', which keeps function return unmodified. 'thunk' converts function return to call and return thunk. 'thunk-inline' converts function return to inlined call and return thunk. 'thunk-extern' converts function return to external call and return thunk provided in a separate object file. You can control this behavior for a specific function by using the function attribute function_return. Function return thunk is the same as memory thunk for -mindirect-branch= where the return address is at the top of the stack: __x86_return_thunk: call L2 L1: lfence jmp L1 L2: lea 8(%rsp), %rsp|lea 4(%esp), %esp ret and function return becomes jmp __x86_return_thunk -mindirect-branch= tests are updated with -mfunction-return=keep to avoid false test failures when -mfunction-return=lfence is added to RUNTESTFLAGS for "make check". gcc/ * config/i386/i386-protos.h (ix86_output_function_return): New. * config/i386/i386.c (ix86_set_indirect_branch_type): Also set function_return_type. (indirect_thunk_name): Add ret_p to indicate thunk for function return. (output_indirect_thunk_function): Pass false to indirect_thunk_name. (ix86_output_indirect_branch): Likewise. (output_indirect_thunk_function): Create alias for function return thunk if regno < 0. (ix86_output_function_return): New function. (ix86_handle_fndecl_attribute): Handle function_return. (ix86_attribute_table): Add function_return. * config/i386/i386.h (machine_function): Add function_return_type. * config/i386/i386.md (simple_return_internal): Use ix86_output_function_return. (simple_return_internal_long): Likewise. * config/i386/i386.opt (mfunction-return=): New option. (indirect_branch): Mention -mfunction-return=. * doc/extend.texi: Document function_return function attribute. * doc/invoke.texi: Document -mfunction-return= option. gcc/testsuite/ * gcc.target/i386/indirect-thunk-1.c (dg-options): Add -mfunction-return=keep. * gcc.target/i386/indirect-thunk-2.c: Likewise. * gcc.target/i386/indirect-thunk-3.c: Likewise. * gcc.target/i386/indirect-thunk-4.c: Likewise. * gcc.target/i386/indirect-thunk-5.c: Likewise. * gcc.target/i386/indirect-thunk-6.c: Likewise. * gcc.target/i386/indirect-thunk-7.c: Likewise. * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. * gcc.target/i386/indirect-thunk-inline-7.c: Likewise. * gcc.target/i386/ret-thunk-1.c: New test. * gcc.target/i386/ret-thunk-10.c: Likewise. * gcc.target/i386/ret-thunk-11.c: Likewise. * gcc.target/i386/ret-thunk-12.c: Likewise. * gcc.target/i386/ret-thunk-13.c: Likewise. * gcc.target/i386/ret-thunk-14.c: Likewise. * gcc.target/i386/ret-thunk-15.c: Likewise. * gcc.target/i386/ret-thunk-16.c: Likewise. * gcc.target/i386/ret-thunk-2.c: Likewise. * gcc.target/i386/ret-thunk-3.c: Likewise. * gcc.target/i386/ret-thunk-4.c: Likewise. * gcc.target/i386/ret-thunk-5.c: Likewise. * gcc.target/i386/ret-thunk-6.c: Likewise. * gcc.target/i386/ret-thunk-7.c: Likewise. * gcc.target/i386/ret-thunk-8.c: Likewise. * gcc.target/i386/ret-thunk-9.c: Likewise.
* x86: Add -mindirect-branch-loop=H.J. Lu2018-01-079-3/+143
| | | | | | | | | | | | | | | | | | | | | | | | | | | Add -mindirect-branch-loop= option to control loop filler in call and return thunks generated by -mindirect-branch=. 'lfence' uses "lfence" as loop filler. 'pause' uses "pause" as loop filler. 'nop' uses "nop" as loop filler. The default is 'lfence'. gcc/ * config/i386/i386-opts.h (indirect_branch_loop): New. * config/i386/i386.c (output_indirect_thunk): Support -mindirect-branch-loop=. * config/i386/i386.opt (mindirect-branch-loop=): New option. (indirect_branch_loop): New. (lfence): Likewise. (pause): Likewise. (nop): Likewise. * doc/invoke.texi: Document -mindirect-branch-loop= option. gcc/testsuite/ * gcc.target/i386/indirect-thunk-loop-1.c: New test. * gcc.target/i386/indirect-thunk-loop-2.c: Likewise. * gcc.target/i386/indirect-thunk-loop-3.c: Likewise. * gcc.target/i386/indirect-thunk-loop-4.c: Likewise. * gcc.target/i386/indirect-thunk-loop-5.c: Likewise.
* x86: Add -mindirect-branch=H.J. Lu2018-01-0741-16/+1289
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add -mindirect-branch= option to convert indirect call and jump to call and return thunks. The default is 'keep', which keeps indirect call and jump unmodified. 'thunk' converts indirect call and jump to call and return thunk. 'thunk-inline' converts indirect call and jump to inlined call and return thunk. 'thunk-extern' converts indirect call and jump to external call and return thunk provided in a separate object file. You can control this behavior for a specific function by using the function attribute indirect_branch. 2 kinds of thunks are geneated. Memory thunk where the function address is at the top of the stack: __x86_indirect_thunk: call L2 L1: lfence jmp L1 L2: lea 8(%rsp), %rsp|lea 4(%esp), %esp ret Indirect jmp via memory, "jmp mem", is converted to push memory jmp __x86_indirect_thunk Indirect call via memory, "call mem", is converted to jmp L2 L1: push [mem] jmp __x86_indirect_thunk L2: call L1 Register thunk where the function address is in a register, reg: __x86_indirect_thunk_reg: call L2 L1: lfence jmp L1 L2: movq %reg, (%rsp)|movl %reg, (%esp) ret where reg is one of (r|e)ax, (r|e)dx, (r|e)cx, (r|e)bx, (r|e)si, (r|e)di, (r|e)bp, r8, r9, r10, r11, r12, r13, r14 and r15. Indirect jmp via register, "jmp reg", is converted to jmp __x86_indirect_thunk_reg Indirect call via register, "call reg", is converted to call __x86_indirect_thunk_reg gcc/ * config/i386/i386-opts.h (indirect_branch): New. * config/i386/i386-protos.h (ix86_output_indirect_jmp): Likewise. * config/i386/i386.c (ix86_using_red_zone): Disallow red-zone with local indirect jump when converting indirect call and jump. (ix86_set_indirect_branch_type): New. (ix86_set_current_function): Call ix86_set_indirect_branch_type. (indirectlabelno): New. (indirect_thunk_needed): Likewise. (indirect_thunk_bnd_needed): Likewise. (indirect_thunks_used): Likewise. (indirect_thunks_bnd_used): Likewise. (INDIRECT_LABEL): Likewise. (indirect_thunk_name): Likewise. (output_indirect_thunk): Likewise. (output_indirect_thunk_function): Likewise. (ix86_output_indirect_branch): Likewise. (ix86_output_indirect_jmp): Likewise. (ix86_code_end): Call output_indirect_thunk_function if needed. (ix86_output_call_insn): Call ix86_output_indirect_branch if needed. (ix86_handle_fndecl_attribute): Handle indirect_branch. (ix86_attribute_table): Add indirect_branch. * config/i386/i386.h (machine_function): Add indirect_branch_type and has_local_indirect_jump. * config/i386/i386.md (indirect_jump): Set has_local_indirect_jump to true. (tablejump): Likewise. (*indirect_jump): Use ix86_output_indirect_jmp. (*tablejump_1): Likewise. (simple_return_indirect_internal): Likewise. * config/i386/i386.opt (mindirect-branch=): New option. (indirect_branch): New. (keep): Likewise. (thunk): Likewise. (thunk-inline): Likewise. (thunk-extern): Likewise. * doc/extend.texi: Document indirect_branch function attribute. * doc/invoke.texi: Document -mindirect-branch= option. gcc/testsuite/ * gcc.target/i386/indirect-thunk-1.c: New test. * gcc.target/i386/indirect-thunk-2.c: Likewise. * gcc.target/i386/indirect-thunk-3.c: Likewise. * gcc.target/i386/indirect-thunk-4.c: Likewise. * gcc.target/i386/indirect-thunk-5.c: Likewise. * gcc.target/i386/indirect-thunk-6.c: Likewise. * gcc.target/i386/indirect-thunk-7.c: Likewise. * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. * gcc.target/i386/indirect-thunk-attr-7.c: Likewise. * gcc.target/i386/indirect-thunk-attr-8.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise. * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise. * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. * gcc.target/i386/indirect-thunk-extern-5.c: Likewise. * gcc.target/i386/indirect-thunk-extern-6.c: Likewise. * gcc.target/i386/indirect-thunk-extern-7.c: Likewise. * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. * gcc.target/i386/indirect-thunk-inline-5.c: Likewise. * gcc.target/i386/indirect-thunk-inline-6.c: Likewise. * gcc.target/i386/indirect-thunk-inline-7.c: Likewise.
* i386: More use reference of struct ix86_frame to avoid copyH.J. Lu2017-12-181-4/+2
| | | | | | | | | When there is no need to make a copy of ix86_frame, we can use reference of struct ix86_frame to avoid copy. * config/i386/i386.c (ix86_expand_prologue): Use reference of struct ix86_frame. (ix86_expand_epilogue): Likewise.
* i386: Use reference of struct ix86_frame to avoid copyhjl2017-12-181-6/+3
| | | | | | | | | | | | | | When there is no need to make a copy of ix86_frame, we can use reference of struct ix86_frame to avoid copy. Tested on x86-64. * config/i386/i386.c (ix86_can_use_return_insn_p): Use reference of struct ix86_frame. (ix86_initial_elimination_offset): Likewise. (ix86_expand_split_stack_prologue): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254480 138bc75d-0d04-0410-961f-82ee72b054a4
* i386: Move struct ix86_frame to machine_functionH.J. Lu2017-12-182-56/+65
| | | | | | | | | | | | | | | | Make ix86_frame available to i386 code generation. * config/i386/i386.c (ix86_frame): Moved to ... * config/i386/i386.h (ix86_frame): Here. (machine_function): Add frame. * config/i386/i386.c (ix86_compute_frame_layout): Repace the frame argument with &cfun->machine->frame. (ix86_can_use_return_insn_p): Don't pass &frame to ix86_compute_frame_layout. Copy frame from cfun->machine->frame. (ix86_can_eliminate): Likewise. (ix86_expand_prologue): Likewise. (ix86_expand_epilogue): Likewise. (ix86_expand_split_stack_prologue): Likewise.
* Daily bump.gccadmin2017-12-181-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255770 138bc75d-0d04-0410-961f-82ee72b054a4
* Backport from mainlinedanglin2017-12-172-1/+17
| | | | | | | | | | | | 2017-12-03 John David Anglin <danglin@gcc.gnu.org> * config/pa/pa.c (pa_legitimate_address_p): For scaled indexing, require base operand is a REG_POINTER prior to reload on targets with non-equivalent space registers. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255762 138bc75d-0d04-0410-961f-82ee72b054a4
* Daily bump.gccadmin2017-12-171-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255757 138bc75d-0d04-0410-961f-82ee72b054a4
* 2017-12-16 Jerry DeLisle <jvdelisle@gcc.gnu.org>jvdelisle2017-12-162-9/+21
| | | | | | | | | | Backport from trunk PR libgfortran/81937 * io/list_read.c (next_char_internal): Don't attempt to read from the internal unit stream if no bytes are left. Decrement bytes_left in the right place. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255752 138bc75d-0d04-0410-961f-82ee72b054a4
* 2017-12-16 Jerry DeLisle <jvdelisle@gcc.gnu.org>jvdelisle2017-12-165-8/+45
| | | | | | | | | | | | | | | | | | | | Backport from trunk PR libgfortran/78549 * io/inquire.c (inquire_via_unit): Adjust test for existence for pre-connected internal units. * io/transfer.c (finalize_transfer): When done with a transfer to internal units, free the format buffer and close the stream. (st_read_done): Delete freeing the stream, now handled using sclose in finalize_transfer. (st_write_done): Likewise. * io/unit.c (get_unit): Return NULL for special reserved unit numbers, signifying not accessible to the user. (init_units): Insert the two special internal units into the unit treap. This makes these unit structures available without further allocations for later use by internal unit I/O. These units are automatically deleted by normal program termination. * io/unix.c (mem_close): Add a guard check to protect from double free. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255751 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-166-15/+84
| | | | | | | | | | | | | | | | | | | 2017-12-15 Jakub Jelinek <jakub@redhat.com> PR c++/83205 * decl.c (cp_finish_decomp): Handle the case when tsize is not error_mark_node, but doesn't fit into uhwi. Split up count != eltscnt and !tree_fits_uhwi_p (tsize) error_at calls into error_n and inform_n to handle plural forms properly. * g++.dg/cpp1z/decomp3.C: Adjust for structured binding count mismatch diagnostics split into error and warning with plural forms. * g++.dg/cpp1z/decomp10.C: Likewise. * g++.dg/cpp1z/decomp32.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255736 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-168-9/+125
| | | | | | | | | | | | | | | | | | | | 2017-12-15 Jakub Jelinek <jakub@redhat.com> PR c++/81197 * cp-tree.h (cp_maybe_mangle_decomp): Declare. * decl.c (cp_maybe_mangle_decomp): New function. (cp_finish_decomp): Don't SET_DECL_ASSEMBLER_NAME here. * parser.c (cp_convert_range_for, cp_parser_decomposition_declaration): Call cp_maybe_mangle_decomp. * pt.c (tsubst_expr): Likewise. * mangle.c (find_decomp_unqualified_name): New function. (write_unqualified_name): Handle DECL_DECOMPOSITION_P where DECL_ASSEMBLER_NAME is already set. * g++.dg/cpp1z/decomp34.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255735 138bc75d-0d04-0410-961f-82ee72b054a4
* Daily bump.gccadmin2017-12-161-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255733 138bc75d-0d04-0410-961f-82ee72b054a4
* PR c++/83217jakub2017-12-154-1/+31
| | | | | | | | | | * decl.c (cp_finish_decomp): If decl's type is REFERENCE_TYPE, call complete_type (TREE_TYPE (type)). * g++.dg/cpp1z/decomp33.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255730 138bc75d-0d04-0410-961f-82ee72b054a4
* PR tree-optimization/83269jakub2017-12-154-6/+35
| | | | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255729 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-155-5/+57
| | | | | | | | | | | | | | | 2017-12-14 Jakub Jelinek <jakub@redhat.com> 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255728 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-1/+45
| | | | | | | | | | | | | 2017-12-14 Jakub Jelinek <jakub@redhat.com> 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255727 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-156-22/+254
| | | | | | | | | | | | | | | | | | | | | | | | 2017-12-12 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/80631 * tree-vect-loop.c (get_initial_def_for_reduction): Fix comment typo. (vect_create_epilog_for_reduction): Add INDUC_VAL argument, for INTEGER_INDUC_COND_REDUCTION use INDUC_VAL instead of hardcoding zero as the value if COND_EXPR is never true. For INTEGER_INDUC_COND_REDUCTION don't emit the final COND_EXPR if INDUC_VAL is equal to INITIAL_DEF. (vectorizable_reduction): Compute INDUC_VAL for vect_create_epilog_for_reduction, if no value is suitable, don't use INTEGER_INDUC_COND_REDUCTION for now. Formatting fixes. * gcc.dg/vect/pr80631-1.c: New test. * gcc.dg/vect/pr80631-2.c: New test. PR tree-optimization/80631 * gcc.target/i386/avx2-pr80631.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255726 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-6/+68
| | | | | | | | | | | | | | 2017-12-08 Joseph Myers <joseph@codesourcery.com> Alexander Monakov <amonakov@ispras.ru> Jakub Jelinek <jakub@redhat.com> PR target/81906 * config/i386/i386.c (ix86_expand_rint): Handle flag_rounding_math. * gcc.target/i386/pr81906.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255725 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-3/+35
| | | | | | | | | | | | 2017-12-06 Jakub Jelinek <jakub@redhat.com> PR c++/80259 * decl2.c (grokfield): Diagnose = delete redefinition of a friend. * g++.dg/cpp0x/pr80259.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255723 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-2/+56
| | | | | | | | | | | | | | 2017-12-02 Jakub Jelinek <jakub@redhat.com> PR c++/81212 * tree-cfg.c (pass_warn_function_return::execute): Handle __builtin_ubsan_handle_missing_return like __builtin_unreachable with BUILTINS_LOCATION. * g++.dg/ubsan/pr81212.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255722 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-1/+37
| | | | | | | | | | | | | | | 2017-12-02 Jakub Jelinek <jakub@redhat.com> PR target/78643 PR target/80583 * expr.c (get_inner_reference): If DECL_MODE of a non-bitfield is BLKmode for vector field with vector raw mode, use TYPE_MODE instead of DECL_MODE. * gcc.target/i386/pr80583.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255721 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-155-1/+39
| | | | | | | | | | | | | | 2017-11-29 Jakub Jelinek <jakub@redhat.com> PR target/80819 * config/i386/sse.md (vec_concatv2di): Remove * from (=Yr,0,*rm) alternative. * gcc.target/i386/pr80819-1.c: New test. * gcc.target/i386/pr80819-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255720 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-155-1/+32
| | | | | | | | | | | | | | | | 2017-11-27 Jakub Jelinek <jakub@redhat.com> PR c++/81888 * parser.c (cp_parser_decomposition_declaration): Reject just BRACE_ENCLOSED_INITIALIZER_P initializers with nelts != 1 rather than all such CONSTRUCTORs, and only if is_direct_init is true. * g++.dg/cpp1z/decomp30.C: Add a test for structured binding with = {} and = { a, a } initializers. * g++.dg/cpp1z/decomp31.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255719 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-7/+52
| | | | | | | | | | | | | | | | 2017-11-27 Jakub Jelinek <jakub@redhat.com> PR c++/81675 * cp-gimplify.c (cp_fold) <case COND_EXPR>: Don't return immediately for VOID_TYPE_P COND_EXPRs, instead fold the operands and if op0 is INTEGER_CST, ensure that both op1 and op2 are non-NULL and fall through into normal folding, otherwise just rebuild x if any op changed. * g++.dg/warn/pr81675.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255718 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-3/+30
| | | | | | | | | | | | | | | 2017-11-25 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/81553 * combine.c (simplify_if_then_else): In (if_then_else COND (OP Z C1) Z) to (OP Z (mult COND (C1 * STORE_FLAG_VALUE))) optimization, if OP is a shift where C1 has different mode than the whole shift, use C1's mode for MULT rather than the shift's mode. * gcc.c-torture/compile/pr81553.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255717 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-155-3/+32
| | | | | | | | | | | | | 2017-11-24 Jakub Jelinek <jakub@redhat.com> PR fortran/81304 * trans-openmp.c (gfc_trans_omp_array_reduction_or_udr): Set attr.implicit_type in intrinsic_sym to avoid undesirable warning. * testsuite/libgomp.fortran/pr81304.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255716 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-3/+23
| | | | | | | | | | | | | | 2017-11-24 Jakub Jelinek <jakub@redhat.com> PR sanitizer/83014 * ubsan.c (ubsan_type_descriptor): Use pp_unsigned_wide_integer instead of pp_printf with HOST_WIDE_INT_PRINT_DEC. Avoid calling tree_to_uhwi twice. * gcc.dg/ubsan/pr83014.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255715 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-1/+24
| | | | | | | | | | | | 2017-11-24 Jakub Jelinek <jakub@redhat.com> * tree-object-size.c (pass_through_call): Do not handle BUILT_IN_STPNCPY_CHK which is not a pass through call. * gcc.dg/builtin-object-size-18.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255714 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-152-7/+14
| | | | | | | | | | | | 2017-11-23 Jakub Jelinek <jakub@redhat.com> * parser.c (cp_parser_omp_declare): Change return type to bool from void, return true for declare simd. (cp_parser_pragma): Return cp_parser_omp_declare returned value rather than always false. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255713 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-1/+45
| | | | | | | | | | | | | | 2017-11-23 Dirk Broemmel <d.broemmel@fz-juelich.de> Jakub Jelinek <jakub@redhat.com> PR fortran/81841 * parse.c (parse_spec): Allow ST_OMP_THREADPRIVATE inside of BLOCK DATA. * libgomp.fortran/pr81841.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255712 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-8/+79
| | | | | | | | | | | | | | | | 2017-11-23 Jakub Jelinek <jakub@redhat.com> PR middle-end/82253 * expr.c (expand_assignment): For CONCAT to_rtx, complex type from and bitpos/bitsize covering the whole destination, use store_expr only if the complex mode is the same. Otherwise, use expand_normal and if it returns CONCAT, subreg each part separately instead of trying to subreg the whole result. * gfortran.dg/pr82253.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255711 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-1/+41
| | | | | | | | | | | | | | | 2017-11-22 Jakub Jelinek <jakub@redhat.com> PR debug/83084 * valtrack.c (propagate_for_debug_subst, propagate_for_debug): Reset debug insns if they would contain UNSPEC_VOLATILE or volatile asm. (dead_debug_insert_temp): Likewise, but also ignore even non-volatile asm. * g++.dg/opt/pr83084.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255710 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-2/+20
| | | | | | | | | | | | | | 2017-11-21 James Cowgill <James.Cowgill@imgtec.com> Jakub Jelinek <jakub@redhat.com> PR target/82880 * config/mips/frame-header-opt.c (mips_register_frame_header_opt): Remove static keyword from f variable. * gcc.dg/opts-8.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255709 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-7/+32
| | | | | | | | | | | | | 2017-11-21 Jakub Jelinek <jakub@redhat.com> PR c++/83059 * c-common.c (get_atomic_generic_size): Use TREE_INT_CST_LOW instead of tree_to_uhwi, formatting fix. * c-c++-common/pr83059.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255708 138bc75d-0d04-0410-961f-82ee72b054a4
* Backported from mainlinejakub2017-12-154-2/+73
| | | | | | | | | | | | | | 2017-11-20 Jakub Jelinek <jakub@redhat.com> PR c++/82781 * constexpr.c (cxx_eval_vector_conditional_expression): New function. (cxx_eval_constant_expression) <case VEC_COND_EXPR>: Use it instead of cxx_eval_conditional_expression. * g++.dg/ext/constexpr-pr82781.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255707 138bc75d-0d04-0410-961f-82ee72b054a4
* 2017-12-15 Richard Biener <rguenther@suse.de>rguenth2017-12-152-1/+8
| | | | | | | | | | PR bootstrap/83439 * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): Adjust remaining gimple_set_modified to use the modified variable instead. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255704 138bc75d-0d04-0410-961f-82ee72b054a4
* PR target/66488ebotcazou2017-12-154-10/+8
| | | | | | | | | * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255688 138bc75d-0d04-0410-961f-82ee72b054a4
* 2017-12-15 Richard Biener <rguenther@suse.de>rguenth2017-12-154-46/+102
| | | | | | | | | | | | | | | Backport from mainline PR tree-optimization/82060 * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children): Move devirtualization after stmt folding and before EH/AB/noreturn cleanup to get the stmt refs canonicalized. Use a bool instead of gimple_modified_p since that doesn't work for NOPs. Schedule NOPs generated by folding for removal. * g++.dg/torture/pr82060.C: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255682 138bc75d-0d04-0410-961f-82ee72b054a4
* Fix regression on soft float targets for armv8_2-fp16-move-2.csudi2017-12-152-1/+4
| | | | | | | | | | | *** gcc/testsuite/ChangeLog *** 2017-12-15 Sudakshina Das <sudi.das@arm.com> * gcc.target/arm/armv8_2-fp16-move-2.c: Remove dg-add-options. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255681 138bc75d-0d04-0410-961f-82ee72b054a4
* 2017-12-15 Richard Biener <rguenther@suse.de>rguenth2017-12-156-15/+79
| | | | | | | | | | | | | | | | | | | | | | Backport from mainline 2017-09-05 Richard Biener <rguenther@suse.de> PR tree-optimization/82102 * tree-ssa-pre.c (eliminate): Check if lhs is NULL. * gcc.dg/torture/pr82102.c: New testcase. 2017-09-13 Richard Biener <rguenther@suse.de> PR middle-end/82128 * gimple-fold.c (gimple_fold_call): Update SSA name in-place to default-def to avoid breaking iterator update with the weird interaction with cgraph_update_edges_for_call_stmt_node. * g++.dg/pr82128.C: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255678 138bc75d-0d04-0410-961f-82ee72b054a4
* 2017-12-15 Richard Biener <rguenther@suse.de>rguenth2017-12-1510-5/+141
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Backport from mainline 2017-11-24 Richard Biener <rguenther@suse.de> PR tree-optimization/82402 * tree-vect-loop-manip.c (create_lcssa_for_virtual_phi): Properly set SSA_NAME_OCCURS_IN_ABNORMAL_PHI. * gcc.dg/torture/pr82402.c: New testcase. 2017-10-24 Richard Biener <rguenther@suse.de> PR tree-optimization/82697 * tree-ssa-phiopt.c (cond_store_replacement): Use alias-set zero for conditional load and unconditional store. * gcc.dg/torture/pr82697.c: New testcase. 2017-11-02 Richard Biener <rguenther@suse.de> PR middle-end/82765 * varasm.c (decode_addr_const): Make offset HOST_WIDE_INT. Truncate ARRAY_REF index and element size. * gcc.dg/pr82765.c: New testcase. 2017-11-09 Richard Biener <rguenther@suse.de> PR tree-optimization/82902 * tree-ssa-phiprop.c (propagate_with_phi): Test proper type. * g++.dg/torture/pr82902.C: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255677 138bc75d-0d04-0410-961f-82ee72b054a4
* Daily bump.gccadmin2017-12-151-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255669 138bc75d-0d04-0410-961f-82ee72b054a4
* gcc/bergner2017-12-145-88/+93
| | | | | | | | | | | | | | | | | | | | | | | | | | | Backport from mainline 2017-10-02 Peter Bergner <bergner@vnet.ibm.com> PR target/80210 * config/rs6000/rs6000.c (rs6000_option_override_internal): Rewrite function to not use the have_cpu variable. Do not set cpu_index, rs6000_cpu_index or rs6000_tune_index if we end up using TARGET_DEFAULT or the default cpu. (rs6000_valid_attribute_p): Remove duplicate initializations of old_optimize and func_optimize. (rs6000_pragma_target_parse): Call rs6000_activate_target_options (). (rs6000_activate_target_options): Make global. * config/rs6000/rs6000-protos.h (rs6000_activate_target_options): Add prototype. gcc/testsuite/ Backport from mainline 2017-10-02 Peter Bergner <bergner@vnet.ibm.com> PR target/80210 * gcc.target/powerpc/pr80210-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255655 138bc75d-0d04-0410-961f-82ee72b054a4
* PR libstdc++/83427 detect weak result type from noexcept functionsredi2017-12-144-48/+139
| | | | | | | | | | PR libstdc++/83427 * include/bits/refwrap.h (_Weak_result_type_impl) (_Reference_wrapper_base): Deduce noexcept for function types. * testsuite/20_util/bind/83427.cc: New test. * testsuite/20_util/reference_wrapper/83427.cc: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255652 138bc75d-0d04-0410-961f-82ee72b054a4
* * gcc-interface/decl.c (gnat_to_gnu_field): Do not set the alignmentebotcazou2017-12-144-1/+32
| | | | | | | of the enclosing record type if it is not already set. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255646 138bc75d-0d04-0410-961f-82ee72b054a4
* PR libstdc++/59568 don't use putback or update value when extraction failsredi2017-12-143-4/+206
| | | | | | | | | | | PR libstdc++/59568 * include/std/complex (operator>>): Only use putback if a character was successfully extracted and only set the value if a number was successfully extracted. * testsuite/26_numerics/complex/inserters_extractors/char/59568.cc: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255633 138bc75d-0d04-0410-961f-82ee72b054a4
* gcc/bergner2017-12-145-0/+18
| | | | | | | | | | | | | | | | | Backport from mainline 2017-12-13 Peter Bergner <bergner@vnet.ibm.com> * config/rs6000/ppc-auxv.h (PPC_FEATURE2_HTM_NO_SUSPEND): New define. * config/rs6000/rs6000.c (cpu_supports_info): Use it. gcc/testsuite/ Backport from mainline 2017-12-13 Peter Bergner <bergner@vnet.ibm.com> * gcc.target/powerpc/cpu-builtin-1.c (htm-no-suspend): Add test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255622 138bc75d-0d04-0410-961f-82ee72b054a4
* Daily bump.gccadmin2017-12-141-1/+1
| | | | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@255619 138bc75d-0d04-0410-961f-82ee72b054a4