aboutsummaryrefslogtreecommitdiff
path: root/gcc/doc
AgeCommit message (Collapse)AuthorFilesLines
2017-12-16PR tree-optimization/78918 - missing -Wrestrict on memcpy copying over selfMartin Sebor1-3/+18
gcc/c-family/ChangeLog: PR tree-optimization/78918 * c-common.c (check_function_restrict): Avoid checking built-ins. * c.opt (-Wrestrict): Include in -Wall. gcc/ChangeLog: PR tree-optimization/78918 * Makefile.in (OBJS): Add gimple-ssa-warn-restrict.o. * builtins.c (check_sizes): Rename... (check_access): ...to this. Rename function arguments for clarity. (check_memop_sizes): Adjust names. (expand_builtin_memchr, expand_builtin_memcpy): Same. (expand_builtin_memmove, expand_builtin_mempcpy): Same. (expand_builtin_strcat, expand_builtin_stpncpy): Same. (check_strncat_sizes, expand_builtin_strncat): Same. (expand_builtin_strncpy, expand_builtin_memset): Same. (expand_builtin_bzero, expand_builtin_memcmp): Same. (expand_builtin_memory_chk, maybe_emit_chk_warning): Same. (maybe_emit_sprintf_chk_warning): Same. (expand_builtin_strcpy): Adjust. (expand_builtin_stpcpy): Same. (expand_builtin_with_bounds): Detect out-of-bounds accesses in pointer-checking forms of memcpy, memmove, and mempcpy. (gcall_to_tree_minimal, max_object_size): Define new functions. * builtins.h (max_object_size): Declare. * calls.c (alloc_max_size): Call max_object_size instead of hardcoding ssizetype limit. (get_size_range): Handle new argument. * calls.h (get_size_range): Add a new argument. * cfgexpand.c (expand_call_stmt): Propagate no-warning bit. * doc/invoke.texi (-Wrestrict): Adjust, add example. * gimple-fold.c (gimple_fold_builtin_memory_op): Detect overlapping operations. (gimple_fold_builtin_memory_chk): Same. (gimple_fold_builtin_stxcpy_chk): New function. * gimple-ssa-warn-restrict.c: New source. * gimple-ssa-warn-restrict.h: New header. * gimple.c (gimple_build_call_from_tree): Propagate location. * passes.def (pass_warn_restrict): Add new pass. * tree-pass.h (make_pass_warn_restrict): Declare. * tree-ssa-strlen.c (handle_builtin_strcpy): Detect overlapping operations. (handle_builtin_strcat): Same. (strlen_optimize_stmt): Rename... (strlen_check_and_optimize_stmt): ...to this. Handle strncat, stpncpy, strncpy, and their checking forms. gcc/testsuite/ChangeLog: PR tree-optimization/78918 * c-c++-common/Warray-bounds.c: New test. * c-c++-common/Warray-bounds-2.c: New test. * c-c++-common/Warray-bounds-3.c: New test. * c-c++-common/Warray-bounds-4.c: New test. * c-c++-common/Warray-bounds-5.c: New test. * c-c++-common/Wrestrict-2.c: New test. * c-c++-common/Wrestrict.c: New test. * c-c++-common/Wrestrict.s: New test. * c-c++-common/Wsizeof-pointer-memaccess1.c: Adjust * c-c++-common/Wsizeof-pointer-memaccess2.c: Same. * g++.dg/torture/Wsizeof-pointer-memaccess1.C: Same. * g++.dg/torture/Wsizeof-pointer-memaccess2.C: Same. * gcc.dg/range.h: New header. * gcc.dg/memcpy-6.c: New test. * gcc.dg/pr69172.c: Adjust. * gcc.dg/pr79223.c: Same. * gcc.dg/pr81345.c: Adjust. * gcc.dg/Wobjsize-1.c: Same. * gcc.dg/Wrestrict-2.c: New test. * gcc.dg/Wrestrict.c: New test. * gcc.dg/Wsizeof-pointer-memaccess1.c: Adjust. * gcc.dg/builtin-stpncpy.c: Same. * gcc.dg/builtin-stringop-chk-1.c: Same. * gcc.target/i386/chkp-stropt-17.c: New test. * gcc.dg/torture/Wsizeof-pointer-memaccess1.c: Adjust. From-SVN: r255755
2017-12-16poly_int: IN_TARGET_CODERichard Sandiford1-0/+11
This patch makes each target-specifc TU define an IN_TARGET_CODE macro, which is used to decide whether poly_int<1, C> should convert to C. 2017-12-16 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> gcc/ * doc/sourcebuild.texi: Document IN_TARGET_CODE. * genattrtab.c (write_header): Define IN_TARGET_CODE to 1 in the target C file. * genautomata.c (main): Likewise. * genconditions.c (write_header): Likewise. * genemit.c (main): Likewise. * genextract.c (print_header): Likewise. * genopinit.c (main): Likewise. * genoutput.c (output_prologue): Likewise. * genpeep.c (main): Likewise. * genpreds.c (write_insn_preds_c): Likewise. * genrecog.c (writer_header): Likewise. * config/aarch64/aarch64-builtins.c (IN_TARGET_CODE): Define. * config/aarch64/aarch64-c.c (IN_TARGET_CODE): Likewise. * config/aarch64/aarch64.c (IN_TARGET_CODE): Likewise. * config/aarch64/cortex-a57-fma-steering.c (IN_TARGET_CODE): Likewise. * config/aarch64/driver-aarch64.c (IN_TARGET_CODE): Likewise. * config/alpha/alpha.c (IN_TARGET_CODE): Likewise. * config/alpha/driver-alpha.c (IN_TARGET_CODE): Likewise. * config/arc/arc-c.c (IN_TARGET_CODE): Likewise. * config/arc/arc.c (IN_TARGET_CODE): Likewise. * config/arc/driver-arc.c (IN_TARGET_CODE): Likewise. * config/arm/aarch-common.c (IN_TARGET_CODE): Likewise. * config/arm/arm-builtins.c (IN_TARGET_CODE): Likewise. * config/arm/arm-c.c (IN_TARGET_CODE): Likewise. * config/arm/arm.c (IN_TARGET_CODE): Likewise. * config/arm/driver-arm.c (IN_TARGET_CODE): Likewise. * config/avr/avr-c.c (IN_TARGET_CODE): Likewise. * config/avr/avr-devices.c (IN_TARGET_CODE): Likewise. * config/avr/avr-log.c (IN_TARGET_CODE): Likewise. * config/avr/avr.c (IN_TARGET_CODE): Likewise. * config/avr/driver-avr.c (IN_TARGET_CODE): Likewise. * config/avr/gen-avr-mmcu-specs.c (IN_TARGET_CODE): Likewise. * config/bfin/bfin.c (IN_TARGET_CODE): Likewise. * config/c6x/c6x.c (IN_TARGET_CODE): Likewise. * config/cr16/cr16.c (IN_TARGET_CODE): Likewise. * config/cris/cris.c (IN_TARGET_CODE): Likewise. * config/darwin.c (IN_TARGET_CODE): Likewise. * config/epiphany/epiphany.c (IN_TARGET_CODE): Likewise. * config/epiphany/mode-switch-use.c (IN_TARGET_CODE): Likewise. * config/epiphany/resolve-sw-modes.c (IN_TARGET_CODE): Likewise. * config/fr30/fr30.c (IN_TARGET_CODE): Likewise. * config/frv/frv.c (IN_TARGET_CODE): Likewise. * config/ft32/ft32.c (IN_TARGET_CODE): Likewise. * config/h8300/h8300.c (IN_TARGET_CODE): Likewise. * config/i386/djgpp.c (IN_TARGET_CODE): Likewise. * config/i386/driver-i386.c (IN_TARGET_CODE): Likewise. * config/i386/driver-mingw32.c (IN_TARGET_CODE): Likewise. * config/i386/host-cygwin.c (IN_TARGET_CODE): Likewise. * config/i386/host-i386-darwin.c (IN_TARGET_CODE): Likewise. * config/i386/host-mingw32.c (IN_TARGET_CODE): Likewise. * config/i386/i386-c.c (IN_TARGET_CODE): Likewise. * config/i386/i386.c (IN_TARGET_CODE): Likewise. * config/i386/intelmic-mkoffload.c (IN_TARGET_CODE): Likewise. * config/i386/msformat-c.c (IN_TARGET_CODE): Likewise. * config/i386/winnt-cxx.c (IN_TARGET_CODE): Likewise. * config/i386/winnt-stubs.c (IN_TARGET_CODE): Likewise. * config/i386/winnt.c (IN_TARGET_CODE): Likewise. * config/i386/x86-tune-sched-atom.c (IN_TARGET_CODE): Likewise. * config/i386/x86-tune-sched-bd.c (IN_TARGET_CODE): Likewise. * config/i386/x86-tune-sched-core.c (IN_TARGET_CODE): Likewise. * config/i386/x86-tune-sched.c (IN_TARGET_CODE): Likewise. * config/ia64/ia64-c.c (IN_TARGET_CODE): Likewise. * config/ia64/ia64.c (IN_TARGET_CODE): Likewise. * config/iq2000/iq2000.c (IN_TARGET_CODE): Likewise. * config/lm32/lm32.c (IN_TARGET_CODE): Likewise. * config/m32c/m32c-pragma.c (IN_TARGET_CODE): Likewise. * config/m32c/m32c.c (IN_TARGET_CODE): Likewise. * config/m32r/m32r.c (IN_TARGET_CODE): Likewise. * config/m68k/m68k.c (IN_TARGET_CODE): Likewise. * config/mcore/mcore.c (IN_TARGET_CODE): Likewise. * config/microblaze/microblaze-c.c (IN_TARGET_CODE): Likewise. * config/microblaze/microblaze.c (IN_TARGET_CODE): Likewise. * config/mips/driver-native.c (IN_TARGET_CODE): Likewise. * config/mips/frame-header-opt.c (IN_TARGET_CODE): Likewise. * config/mips/mips.c (IN_TARGET_CODE): Likewise. * config/mmix/mmix.c (IN_TARGET_CODE): Likewise. * config/mn10300/mn10300.c (IN_TARGET_CODE): Likewise. * config/moxie/moxie.c (IN_TARGET_CODE): Likewise. * config/msp430/driver-msp430.c (IN_TARGET_CODE): Likewise. * config/msp430/msp430-c.c (IN_TARGET_CODE): Likewise. * config/msp430/msp430.c (IN_TARGET_CODE): Likewise. * config/nds32/nds32-cost.c (IN_TARGET_CODE): Likewise. * config/nds32/nds32-fp-as-gp.c (IN_TARGET_CODE): Likewise. * config/nds32/nds32-intrinsic.c (IN_TARGET_CODE): Likewise. * config/nds32/nds32-isr.c (IN_TARGET_CODE): Likewise. * config/nds32/nds32-md-auxiliary.c (IN_TARGET_CODE): Likewise. * config/nds32/nds32-memory-manipulation.c (IN_TARGET_CODE): Likewise. * config/nds32/nds32-pipelines-auxiliary.c (IN_TARGET_CODE): Likewise. * config/nds32/nds32-predicates.c (IN_TARGET_CODE): Likewise. * config/nds32/nds32.c (IN_TARGET_CODE): Likewise. * config/nios2/nios2.c (IN_TARGET_CODE): Likewise. * config/nvptx/mkoffload.c (IN_TARGET_CODE): Likewise. * config/nvptx/nvptx.c (IN_TARGET_CODE): Likewise. * config/pa/pa.c (IN_TARGET_CODE): Likewise. * config/pdp11/pdp11.c (IN_TARGET_CODE): Likewise. * config/powerpcspe/driver-powerpcspe.c (IN_TARGET_CODE): Likewise. * config/powerpcspe/host-darwin.c (IN_TARGET_CODE): Likewise. * config/powerpcspe/host-ppc64-darwin.c (IN_TARGET_CODE): Likewise. * config/powerpcspe/powerpcspe-c.c (IN_TARGET_CODE): Likewise. * config/powerpcspe/powerpcspe-linux.c (IN_TARGET_CODE): Likewise. * config/powerpcspe/powerpcspe.c (IN_TARGET_CODE): Likewise. * config/riscv/riscv-builtins.c (IN_TARGET_CODE): Likewise. * config/riscv/riscv-c.c (IN_TARGET_CODE): Likewise. * config/riscv/riscv.c (IN_TARGET_CODE): Likewise. * config/rl78/rl78-c.c (IN_TARGET_CODE): Likewise. * config/rl78/rl78.c (IN_TARGET_CODE): Likewise. * config/rs6000/driver-rs6000.c (IN_TARGET_CODE): Likewise. * config/rs6000/host-darwin.c (IN_TARGET_CODE): Likewise. * config/rs6000/host-ppc64-darwin.c (IN_TARGET_CODE): Likewise. * config/rs6000/rs6000-c.c (IN_TARGET_CODE): Likewise. * config/rs6000/rs6000-linux.c (IN_TARGET_CODE): Likewise. * config/rs6000/rs6000-p8swap.c (IN_TARGET_CODE): Likewise. * config/rs6000/rs6000-string.c (IN_TARGET_CODE): Likewise. * config/rs6000/rs6000.c (IN_TARGET_CODE): Likewise. * config/rx/rx.c (IN_TARGET_CODE): Likewise. * config/s390/driver-native.c (IN_TARGET_CODE): Likewise. * config/s390/s390-c.c (IN_TARGET_CODE): Likewise. * config/s390/s390.c (IN_TARGET_CODE): Likewise. * config/sh/sh-c.c (IN_TARGET_CODE): Likewise. * config/sh/sh-mem.cc (IN_TARGET_CODE): Likewise. * config/sh/sh.c (IN_TARGET_CODE): Likewise. * config/sh/sh_optimize_sett_clrt.cc (IN_TARGET_CODE): Likewise. * config/sh/sh_treg_combine.cc (IN_TARGET_CODE): Likewise. * config/sparc/driver-sparc.c (IN_TARGET_CODE): Likewise. * config/sparc/sparc-c.c (IN_TARGET_CODE): Likewise. * config/sparc/sparc.c (IN_TARGET_CODE): Likewise. * config/spu/spu-c.c (IN_TARGET_CODE): Likewise. * config/spu/spu.c (IN_TARGET_CODE): Likewise. * config/stormy16/stormy16.c (IN_TARGET_CODE): Likewise. * config/tilegx/mul-tables.c (IN_TARGET_CODE): Likewise. * config/tilegx/tilegx-c.c (IN_TARGET_CODE): Likewise. * config/tilegx/tilegx.c (IN_TARGET_CODE): Likewise. * config/tilepro/mul-tables.c (IN_TARGET_CODE): Likewise. * config/tilepro/tilepro-c.c (IN_TARGET_CODE): Likewise. * config/tilepro/tilepro.c (IN_TARGET_CODE): Likewise. * config/v850/v850-c.c (IN_TARGET_CODE): Likewise. * config/v850/v850.c (IN_TARGET_CODE): Likewise. * config/vax/vax.c (IN_TARGET_CODE): Likewise. * config/visium/visium.c (IN_TARGET_CODE): Likewise. * config/vms/vms-c.c (IN_TARGET_CODE): Likewise. * config/vms/vms-f.c (IN_TARGET_CODE): Likewise. * config/vms/vms.c (IN_TARGET_CODE): Likewise. * config/xtensa/xtensa.c (IN_TARGET_CODE): Likewise. Co-Authored-By: Alan Hayward <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r255743
2017-12-16Add VEC_SERIES_EXPR and associated optabRichard Sandiford2-0/+22
Similarly to the VEC_DUPLICATE_EXPR, this patch adds a tree code equivalent of the VEC_SERIES rtx code: VEC_SERIES_EXPR. 2017-12-16 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> gcc/ * doc/generic.texi (VEC_SERIES_EXPR): Document. * doc/md.texi (vec_series@var{m}): Document. * tree.def (VEC_SERIES_EXPR): New tree code. * tree.h (build_vec_series): Declare. * tree.c (build_vec_series): New function. * cfgexpand.c (expand_debug_expr): Handle VEC_SERIES_EXPR. * tree-pretty-print.c (dump_generic_node): Likewise. * gimple-pretty-print.c (dump_binary_rhs): Likewise. * tree-inline.c (estimate_operator_cost): Likewise. * expr.c (expand_expr_real_2): Likewise. * optabs-tree.c (optab_for_tree_code): Likewise. * tree-cfg.c (verify_gimple_assign_binary): Likewise. * fold-const.c (const_binop): Fold VEC_SERIES_EXPRs of constants. * expmed.c (make_tree): Handle VEC_SERIES. * optabs.def (vec_series_optab): New optab. * optabs.h (expand_vec_series_expr): Declare. * optabs.c (expand_vec_series_expr): New function. * tree-vect-generic.c (expand_vector_operations_1): Check that the operands also have vector type. Co-Authored-By: Alan Hayward <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r255741
2017-12-16Add VEC_DUPLICATE_EXPR and associated optabRichard Sandiford2-0/+17
SVE needs a way of broadcasting a scalar to a variable-length vector. This patch adds VEC_DUPLICATE_EXPR for when CONSTRUCTOR would be used for fixed-length vectors; this is the tree equivalent of the existing rtl code VEC_DUPLICATE. The patch also adds a vec_duplicate_optab to go with VEC_DUPLICATE_EXPR. 2017-12-16 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hawyard@arm.com> David Sherwood <david.sherwood@arm.com> gcc/ * doc/generic.texi (VEC_DUPLICATE_EXPR): Document. (VEC_COND_EXPR): Add missing @tindex. * doc/md.texi (vec_duplicate@var{m}): Document. * tree.def (VEC_DUPLICATE_EXPR): New tree codes. * tree.c (build_vector_from_val): Add stubbed-out handling of variable-length vectors, using VEC_DUPLICATE_EXPR. (uniform_vector_p): Handle VEC_DUPLICATE_EXPR. * cfgexpand.c (expand_debug_expr): Likewise. * tree-cfg.c (verify_gimple_assign_unary): Likewise. * tree-inline.c (estimate_operator_cost): Likewise. * tree-pretty-print.c (dump_generic_node): Likewise. * tree-vect-generic.c (ssa_uniform_vector_p): Likewise. * fold-const.c (const_unop): Fold VEC_DUPLICATE_EXPRs of a constant. (test_vec_duplicate_folding): New function. (fold_const_c_tests): Call it. * optabs.def (vec_duplicate_optab): New optab. * optabs-tree.c (optab_for_tree_code): Handle VEC_DUPLICATE_EXPR. * optabs.h (expand_vector_broadcast): Declare. * optabs.c (expand_vector_broadcast): Make non-static. Try using vec_duplicate_optab. * expr.c (store_constructor): Try using vec_duplicate_optab for uniform vectors. (expand_expr_real_2): Handle VEC_DUPLICATE_EXPR. Co-Authored-By: Alan Hayward <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r255740
2017-12-15tree-core.h (struct attribute_spec): Swap affects_type_identity and handler ↵Jakub Jelinek1-1/+1
fields. * tree-core.h (struct attribute_spec): Swap affects_type_identity and handler fields. * config/alpha/alpha.c (vms_attribute_table): Swap affects_type_identity and handler fields, adjust comments. * config/mips/mips.c (mips_attribute_table): Likewise. * config/visium/visium.c (visium_attribute_table): Likewise. * config/epiphany/epiphany.c (epiphany_attribute_table): Likewise. * config/microblaze/microblaze.c (microblaze_attribute_table): Likewise. * config/spu/spu.c (spu_attribute_table): Likewise. * config/mcore/mcore.c (mcore_attribute_table): Likewise. * config/arc/arc.c (arc_attribute_table): Likewise. * config/m68k/m68k.c (m68k_attribute_table): Likewise. * config/v850/v850.c (v850_handle_interrupt_attribute, v850_handle_data_area_attribute): Formatting fixes. (v850_attribute_table): Swap affects_type_identity and handler fields, adjust comments. * config/m32r/m32r.c (m32r_attribute_table): Likewise. * config/arm/arm.c (arm_attribute_table): Likewise. * config/avr/avr.c (avr_attribute_table): Likewise. * config/s390/s390.c (s390_attribute_table): Likewise. * config/sh/sh.c (sh_attribute_table): Likewise. * config/i386/i386.c (ix86_handle_cconv_attribute, ix86_handle_callee_pop_aggregate_return): Formatting fixes. (ix86_attribute_table): Swap affects_type_identity and handler fields, adjust comments. * config/i386/cygming.h (SUBTARGET_ATTRIBUTE_TABLE): Likewise. * config/sparc/sparc.c (sparc_attribute_table): Likewise. * config/m32c/m32c.c (m32c_attribute_table): Likewise. * config/sol2.h (SOLARIS_ATTRIBUTE_TABLE): Likewise. * config/ia64/ia64.c (ia64_attribute_table): Likewise. * config/msp430/msp430.c (msp430_attribute_table): Likewise. * config/rx/rx.c (rx_attribute_table): Likewise. * config/cr16/cr16.c (cr16_attribute_table): Likewise. * config/h8300/h8300.c (h8300_attribute_table): Likewise. * config/nvptx/nvptx.c (nvptx_attribute_table): Likewise. * config/powerpcspe/powerpcspe.c (rs6000_attribute_table): Likewise. * config/darwin.h (SUBTARGET_ATTRIBUTE_TABLE): Likewise. * config/stormy16/stormy16.c (xstormy16_attribute_table): Likewise. * config/bfin/bfin.c (bfin_attribute_table): Likewise. * config/rs6000/rs6000.c (rs6000_attribute_table): Likewise. * config/rl78/rl78.c (rl78_attribute_table): Likewise. * config/nds32/nds32.c (nds32_attribute_table): Likewise. * doc/plugins.texi (user_attr): Likewise. Add NULL for exclude. * attribs.c (empty_attribute_table): Swap affects_type_identity and handler fields. (register_scoped_attributes, decl_attributes): Formatting fixes. ada/ * gcc-interface/utils.c (gnat_internal_attribute_table): Swap affects_type_identity and handler fields, adjust comments. brig/ * brig-lang.c (brig_attribute_table): Swap affects_type_identity and handler fields, adjust comments. c-family/ * c-attribs.c (c_common_attribute_table, c_common_format_attribute_table): Swap affects_type_identity and handler fields, adjust comments. cp/ * tree.c (cxx_attribute_table, std_attribute_table): Swap affects_type_identity and handler fields, adjust comments. fortran/ * f95-lang.c (gfc_attribute_table): Swap affects_type_identity and handler fields, adjust comments. lto/ * lto-lang.c (lto_attribute_table, lto_format_attribute_table): Swap affects_type_identity and handler fields, adjust comments. testsuite/ * g++.dg/plugin/attribute_plugin.c (user_attr): Swap affects_type_identity and handler fields, add NULL for exclude. From-SVN: r255699
2017-12-14invoke.texi: Document -Wcast-function-type.Bernd Edlinger1-1/+17
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-14Require effective target weak_undefined for visibility-22.cTom de Vries1-0/+3
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-14poly_int: add poly-int.hRichard Sandiford5-0/+1067
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
2017-12-12Enable VAES support [1/5]Julia Koval1-2/+5
gcc/ * common/config/i386/i386-common.c (OPTION_MASK_ISA_VAES_SET, OPTION_MASK_ISA_VAES_UNSET): New. (ix86_handle_option): Handle -mvaes. * config/i386/cpuid.h: Define bit_VAES. * config/i386/driver-i386.c (host_detect_local_cpu): Detect -mvaes. * config/i386/i386-c.c (__VAES__): New. * config/i386/i386.c (ix86_target_string): Add -mvaes. (ix86_valid_target_attribute_inner_p): Ditto. * config/i386/i386.h (TARGET_VAES, TARGET_VAES_P): New. * config/i386/i386.opt: Add -mvaes. * doc/invoke.texi: Ditto. From-SVN: r255571
2017-12-12[SFN] Introduce -gstatement-frontiers option, enable debug markersAlexandre Oliva1-0/+12
Introduce a command line option to enable statement frontiers, enabled by default in optimized builds with DWARF2+ debug information. This patch depends on an earlier patch that completed the infrastructure for debug markers, and on another patch that turns -g into a negatable option prefix. for gcc/ChangeLog * common.opt (gstatement-frontiers): New, setting debug_nonbind_markers_p. * rtl.h (MAY_HAVE_DEBUG_MARKER_INSNS): Activate. * toplev.c (process_options): Autodetect value for debug statement frontiers option. * tree.h (MAY_HAVE_DEBUG_MARKER_STMTS): Activate. * doc/invoke.texi (gstatement-frontiers, gno-statement-frontiers): New. From-SVN: r255569
2017-12-12[SFN] introduce statement frontier notes, still disabledAlexandre Oliva4-10/+79
This patch completes the infrastructure for the introduction of statement frontiers in C-family languages. It brings in all the code remaining code needed to introduce and transform begin stmt trees, gimple stmts, insns and notes, and ultimately use them to generate the is_stmt column in DWARF2+ line number tables/programs, however none of it is activated: the option that would do so will be introduced in a subsequent patch. This patch depends on an earlier patch with not-quite-boilerplate changes towards SFN. for gcc/c-family/ChangeLog * c-semantics.c (pop_stmt_list): Move begin stmt marker into subsequent statement list. for gcc/c/ChangeLog * c-objc-common.h (LANG_HOOKS_EMITS_BEGIN_STMT): Redefine as true. * c-parser.c (add_debug_begin_stmt): New. (c_parser_declaration_or_fndef): Call it. (c_parser_compound_statement_nostart): Likewise. (c_parser_statement_after_labels): Likewise. * c-typeck (c_finish_stmt_expr): Skip begin stmts markers. for gcc/cp/ChangeLog * constexpr.c (check_constexpr_ctor_body_1): Skip begin stmt markers. (constexpr_fn_retval): Likewise. (potential_constant_expression_1): Likewise. (cxx_eval_statement_list): Check that a begin stmt marker is not used as the value of a statement list. (cxx_eval_constant_expression): Return begin stmt markers unchanged. * cp-array-notation.c (stmt_location): New. (cp_expand_cond_array_notations): Use it. * cp-objcp-common.h (LANG_HOOKS_EMITS_BEGIN_STMT): Redefine as true. * parser.c (add_debug_begin_stmt): New. (cp_parser_statement): Call it. * pt.c (tsubst_copy): Handle begin stmt markers. for gcc/ChangeLog * cfgexpand.c (expand_gimple_basic_block): Handle begin stmt markers. Integrate source bind into debug stmt expand loop. (pass_expand::execute): Check debug marker limit. Avoid deep TER and expand debug locations for debug bind insns only. * cse.c (insn_live_p): Keep nonbind markers and debug bindings followed by them. * df-scan.c (df_insn_delete): Accept out-of-block debug insn. * final.c (reemit_insn_block_notes): Take current block from nonbind markers. Declare note where it's first set. (final_scan_insn): Handle begin stmt notes. Emit is_stmt according to begin stmt markers if enabled. (notice_source_line): Handle nonbind markers. Fail if their location is unknown or that of builtins. (rest_of_handle_final): Convert begin stmt markers to notes if var-tracking didn't run. (rest_of_clean_state): Skip begin stmt markers. * gimple-pretty-print.c (dump_gimple_debug): Handle begin stmt markers. * function.c (allocate_struct_function): Set begin_stmt_markers. * function.h (struct function): Add debug_marker_count counter and debug_nonbind_markers flag. * gimple-iterator.c (gsi_remove): Adjust debug_marker_count. * gimple-low.c (lower_function_body): Adjust debug_nonbind_markers. (lower_stmt): Drop or skip gimple debug stmts. (lower_try_catch): Skip debug stmts. * gimple.c (gimple_build_debug_begin_stmt): New. (gimple_copy): Increment debug_marker_count if copying one. * gimple.h (gimple_build_debug_begin_stmt): Declare. * gimplify.c (rexpr_location): New. (rexpr_has_location): New. (warn_switch_unreachable_r): Handle gimple debug stmts. (shortcut_cond_r): Call expr_location. (find_goto): New. (find_goto_label): New. (shortcut_cond_expr): Call expr_has_location, expr_location, and find_goto_label. (gimplify_cond_expr): Call find_goto_label, expr_has_location, and expr_location. (gimplify_expr): Handle begin stmt markers. Reject debug expr decls. * langhooks-def.h (LANG_HOOKS_EMITS_BEGIN_STMT): New. Add to... (LANG_HOOKS_INITIALIZER): ... this. * langhooks.h (struct lang_hooks): Add emits_begin_stmt. * lra-contraints.c (inherit_reload_reg): Tolerate between-blocks debug insns. (update_ebb_live_info): Skip debug insn markers. * lra.c (debug_insn_static_data): Rename to... (debug_bind_static_data): ... this. (debug_marker_static_data): New. (lra_set_insn_recog_data): Select one of the above depending on debug insn kind. (lra_update_isn_regno_info): Don't assume debug insns have freqs. (push_insns): Skip debug insns. * lto-streamer-in.c (input_function): Drop debug stmts depending on active options. Adjust debug_nonbind_markers. * params.def (PARAM_MAX_DEBUG_MARKER_COUNT): New. * print-rtl.c (rtx_writer::print_rtx_operand_code_0): Handle begin stmt marker notes. (print_insn): Likewise. * recog.c (extract_insn): Recognize rtl for debug markers. * rtl.def (DEBUG_MARKER): New. * tree-inline.c: Include params.h. (remap_gimple_stmt): Handle nonbind markers. (maybe_move_debug_stmts_to_successors): Likewise. (copy_debug_stmt): Likewise. * tree-iterator.c (append_to_statement_list_1): Append begin stmt markers regardless of no side effects. (tsi_link_before): Don't update container's side effects when adding a begin stmt marker. (tsi_link_after): Likewise. (expr_first): Skip begin stmt markers. (expr_last): Likewise. * tree-pretty-print (dump_generic_node): Handle begin stmt markers. * tree-ssa-threadedge.c (propagate_threaded_block_debug_info): Disregard nonbind markers. * tree.c (make_node_stat): Don't set side effects for begin stmt markers. (build1_stat): Likewise. * tree.def (DEBUG_BEGIN_STMT): New. * tree.h (GOTO_DESTINATION): Require a GOTO_EXPR. * var-tracking.c (delete_debug_insns): Renamed to... (delete_vta_debug_insns): ... this. (reemit_marker_as_note): New. (vt_initialize): Reemit markers. (delete_vta_debug_insns): Likewise. (vt_debug_insns_local): Reemit or delete markers. (variable_tracking_main_1): Likewise. * doc/generic.texi (DEBUG_BEGIN_STMT): Document. * doc/gimple.texi (gimple_debug_begin_stmt_p): New. (gimple_debug_nonbind_marker_p): New. (gimple_build_debug_bind): Adjust. (gimple_build_debug_begin_stmt): New. * doc/invoke.texi (max-debug-marker-count): New param. * doc/rtl.texi (debug_implicit_ptr, entry_value): New. (debug_parameter_ref, debug_marker): New. (NOTE_INSN_BEGIN_STMT): New. (DEBUG_INSN): Describe begin stmt markers. From-SVN: r255568
2017-12-11altivec.h (vec_extract_fp32_from_shorth, [...]): Add #defines.Carl Love1-1/+49
gcc/ChangeLog: 2017-12-11 Carl Love <cel@us.ibm.com> * config/rs6000/altivec.h (vec_extract_fp32_from_shorth, vec_extract_fp32_from_shortl]): Add #defines. * config/rs6000/rs6000-builtin.def (VSLDOI_2DI): Add macro expansion. * config/rs6000/rs6000-c.c (ALTIVEC_BUILTIN_VEC_UNPACKH, ALTIVEC_BUILTIN_VEC_UNPACKL, ALTIVEC_BUILTIN_VEC_AND, ALTIVEC_BUILTIN_VEC_SLD, ALTIVEC_BUILTIN_VEC_SRL, ALTIVEC_BUILTIN_VEC_SRO, ALTIVEC_BUILTIN_VEC_SLD, ALTIVEC_BUILTIN_VEC_SLL): Add expansions. * doc/extend.texi: Add documentation for the added builtins. gcc/testsuite/ChangeLog: 2017-12-11 Carl Love <cel@us.ibm.com> * gcc.target/powerpc/altivec-7.c: Renamed altivec-7.h. * gcc.target/powerpc/altivec-7.h (main): Add testcases for vec_unpackl. Add dg-final tests for the instructions generated. * gcc.target/powerpc/altivec-7-be.c: New file to test on big endian. * gcc.target/powerpc/altivec-7-le.c: New file to test on little endian. * gcc.target/powerpc/altivec-13.c (foo): Add vec_sld, vec_srl, vec_sro testcases. Add dg-final tests for the instructions generated. * gcc.target/powerpc/builtins-3-p8.c (test_vsi_packs_vui, test_vsi_packs_vsi, test_vsi_packs_vssi, test_vsi_packs_vusi, test_vsi_packsu-vssi, test_vsi_packsu-vusi, test_vsi_packsu-vsll, test_vsi_packsu-vull, test_vsi_packsu-vsi, test_vsi_packsu-vui): Add testcases. Add dg-final tests for new instructions. * gcc.target/powerpc/p8vector-builtin-2.c (vbschar_eq, vbchar_eq, vuchar_eq, vbint_eq, vsint_eq, viint_eq, vuint_eq, vbool_eq, vbint_ne, vsint_ne, vuint_ne, vbool_ne, vsign_ne, vuns_ne, vbshort_ne): Add tests. Add dg-final instruction tests. * gcc.target/powerpc/vsx-vector-6.c: Renamed vsx-vector-6.h. * gcc.target/powerpc/vsx-vector-6.h (vec_andc,vec_nmsub, vec_nmadd, vec_or, vec_nor, vec_andc, vec_or, vec_andc, vec_msums): Add tests. Add dg-final tests for the generated instructions. * gcc.target/powerpc/builtins-3.c (test_sll_vsc_vsc_vsuc, test_sll_vuc_vuc, test_sll_vsi_vsi_vuc, test_sll_vui_vui_vuc, test_sll_vbll_vull, test_sll_vbll_vbll_vus, test_sll_vp_vp_vuc, test_sll_vssi_vssi_vuc, test_sll_vusi_vusi_vuc, test_slo_vsc_vsc_vsc, test_slo_vuc_vuc_vsc, test_slo_vsi_vsi_vsc, test_slo_vsi_vsi_vuc, test_slo_vui_vui_vsc, test_slo_vui_vui_vuc, test_slo_vsll_slo_vsll_vsc, test_slo_vsll_slo_vsll_vuc, test_slo_vull_slo_vull_vsc, test_slo_vull_slo_vull_vuc, test_slo_vp_vp_vsc, test_slo_vp_vp_vuc, test_slo_vssi_vssi_vsc, test_slo_vssi_vssi_vuc, test_slo_vusi_vusi_vsc, test_slo_vusi_vusi_vuc, test_slo_vusi_vusi_vuc, test_slo_vf_vf_vsc, test_slo_vf_vf_vuc, test_cmpb_float): Add tests. From-SVN: r255555
2017-12-10* doc/install.texi (Specific): Tweak link to mkssoftware.com.Gerald Pfeifer1-1/+1
From-SVN: r255529
2017-12-08re PR tree-optimization/83323 (186.crafty miscompares)Michael Matz1-5/+3
Fix PR83323 * gimple-loop-jam (unroll_jam_possible_p): Correct test for head-controlled loops and loop BBs. * common.opt (funroll-and-jam): Remove, instead ... (floop-unroll-and-jam): ... reuse this option. * opts.c (default_options_table): Use OPT_floop_unroll_and_jam. * doc/invoke.texi (-funroll-and-jam): Move docu to ... (-floop-unroll-and-jam): ... this option. testsuite/ * gcc.dg/pr83323.c: New test. * gcc.dg/unroll-and-jam.c: Use -floop-unroll-and-jam. From-SVN: r255514
2017-12-07New VECTOR_CST layoutRichard Sandiford1-4/+71
This patch uses a simple compression scheme to represent the contents of a VECTOR_CST using its leading elements. There are three formats: 1) a repeating sequence of N values. This is encoded using the first N elements. 2) a "foreground" sequence of N values inserted at the beginning of a "background" repeating sequence of N values, such as: { 1, 2, 0, 0, 0, 0, ... }. This is encoded using the first 2*N elements. 2) a "foreground" sequence of N values inserted at the beginning of a "background" repeating sequence of N interleaved linear series, such as: { 0, 0, 8, 10, 9, 11, 10, 12, ... }. This is encoded using the first 3*N elements. In practice the foreground values are often part of the same series as the background values, such as: { 1, 11, 2, 12, 3, 13, ... }. This reduces the amount of work involved in processing simple vector constants and means that the encoding extends naturally to variable-length vectors. 2017-12-07 Richard Sandiford <richard.sandiford@arm.com> gcc/ * doc/generic.texi (VECTOR_CST): Describe new representation of vector constants. * vector-builder.h: New file. * tree-vector-builder.h: Likewise. * tree-vector-builder.c: Likewise. * Makefile.in (OBJS): Add tree-vector-builder.o. * tree.def (VECTOR_CST): Update comment to refer to generic.texi. * tree-core.h (tree_base): Add a vector_cst field to the u union. (tree_vector): Change the number of elements to vector_cst_encoded_nelts. * tree.h (VECTOR_CST_NELTS): Redefine using TYPE_VECTOR_SUBPARTS. (VECTOR_CST_ELTS): Delete. (VECTOR_CST_ELT): Redefine using vector_cst_elt. (VECTOR_CST_LOG2_NPATTERNS, VECTOR_CST_NPATTERNS): New macros. (VECTOR_CST_NELTS_PER_PATTERN, VECTOR_CST_DUPLICATE_P): Likewise. (VECTOR_CST_STEPPED_P, VECTOR_CST_ENCODED_ELTS): Likewise. (VECTOR_CST_ENCODED_ELT): Likewise. (vector_cst_encoded_nelts): New function. (make_vector): Take the values of VECTOR_CST_LOG2_NPATTERNS and VECTOR_CST_NELTS_PER_PATTERN as arguments. (vector_cst_int_elt, vector_cst_elt): Declare. * tree.c: Include tree-vector-builder.h. (tree_code_size): Abort if passed VECTOR_CST. (tree_size): Update for new VECTOR_CST layout. (make_vector): Take the values of VECTOR_CST_LOG2_NPATTERNS and VECTOR_CST_NELTS_PER_PATTERN as arguments. (build_vector): Use tree_vector_builder. (vector_cst_int_elt, vector_cst_elt): New functions. (drop_tree_overflow): For VECTOR_CST, drop the TREE_OVERFLOW from the encoded elements and then create the vector in the canonical form. (check_vector_cst, check_vector_cst_duplicate, check_vector_cst_fill) (check_vector_cst_stepped, test_vector_cst_patterns): New functions. (tree_c_tests): Call test_vector_cst_patterns. * lto-streamer-out.c (DFS::DFS_write_tree_body): Handle the new VECTOR_CST fields. (hash_tree): Likewise. * tree-streamer-out.c (write_ts_vector_tree_pointers): Likewise. (streamer_write_tree_header): Likewise. * tree-streamer-in.c (lto_input_ts_vector_tree_pointers): Likewise. (streamer_alloc_tree): Likewise. Update call to make_vector. * fold-const.c (fold_ternary_loc): Avoid using VECTOR_CST_ELTS. gcc/lto/ * lto.c (compare_tree_sccs_1): Compare the new VECTOR_CST flags. From-SVN: r255474
2017-12-07re PR tree-optimization/81303 (410.bwaves regression caused by r249919)Bin Cheng1-2/+26
PR tree-optimization/81303 * Makefile.in (gimple-loop-interchange.o): New object file. * common.opt (floop-interchange): Reuse the option from graphite. * doc/invoke.texi (-floop-interchange): Ditto. New document for -floop-interchange and mention it for -O3. * opts.c (default_options_table): Enable -floop-interchange at -O3. * gimple-loop-interchange.cc: New file. * params.def (PARAM_LOOP_INTERCHANGE_MAX_NUM_STMTS): New parameter. (PARAM_LOOP_INTERCHANGE_STRIDE_RATIO): New parameter. * passes.def (pass_linterchange): New pass. * timevar.def (TV_LINTERCHANGE): New time var. * tree-pass.h (make_pass_linterchange): New declaration. * tree-ssa-loop-ivcanon.c (create_canonical_iv): Change to external interchange. Record IV before/after increment in new parameters. * tree-ssa-loop-ivopts.h (create_canonical_iv): New declaration. * tree-vect-loop.c (vect_is_simple_reduction): Factor out reduction path check into... (check_reduction_path): ...New function here. * tree-vectorizer.h (check_reduction_path): New declaration. gcc/testsuite * gcc.dg/tree-ssa/loop-interchange-1.c: New test. * gcc.dg/tree-ssa/loop-interchange-1b.c: New test. * gcc.dg/tree-ssa/loop-interchange-2.c: New test. * gcc.dg/tree-ssa/loop-interchange-3.c: New test. * gcc.dg/tree-ssa/loop-interchange-4.c: New test. * gcc.dg/tree-ssa/loop-interchange-5.c: New test. * gcc.dg/tree-ssa/loop-interchange-6.c: New test. * gcc.dg/tree-ssa/loop-interchange-7.c: New test. * gcc.dg/tree-ssa/loop-interchange-8.c: New test. * gcc.dg/tree-ssa/loop-interchange-9.c: New test. * gcc.dg/tree-ssa/loop-interchange-10.c: New test. * gcc.dg/tree-ssa/loop-interchange-11.c: New test. * gcc.dg/tree-ssa/loop-interchange-12.c: New test. * gcc.dg/tree-ssa/loop-interchange-13.c: New test. Co-Authored-By: Richard Biener <rguenther@suse.de> From-SVN: r255472
2017-12-07PR c/81544 - attribute noreturn and warn_unused_result on the same function ↵Martin Sebor1-4/+14
accepted PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted PR c/81566 - invalid attribute aligned accepted on functions gcc/ada/ChangeLog: PR c/81544 * gcc-interface/utils.c (gnat_internal_attribute_table): Initialize new member of struct attribute_spec. gcc/c/ChangeLog: PR c/81544 * c-decl.c (c_decl_attributes): Look up existing declaration and pass it to decl_attributes. gcc/c-family/ChangeLog: PR c/81544 PR c/81566 * c-attribs.c (attr_aligned_exclusions): New array. (attr_alloc_exclusions, attr_cold_hot_exclusions): Same. (attr_common_exclusions, attr_const_pure_exclusions): Same. (attr_gnu_inline_exclusions, attr_inline_exclusions): Same. (attr_noreturn_exclusions, attr_returns_twice_exclusions): Same. (attr_warn_unused_result_exclusions): Same. (handle_hot_attribute, handle_cold_attribute): Simplify. (handle_const_attribute): Warn on function returning void. (handle_pure_attribute): Same. (handle_aligned_attribute): Diagnose conflicting attribute specifications. * c-warn.c (diagnose_mismatched_attributes): Simplify. gcc/cp/ChangeLog: PR c/81544 * cp-tree.h (decls_match): Add default argument. * decl.c (decls_match): Avoid calling into the target back end and triggering an error. * decl2.c (cplus_decl_attributes): Look up existing declaration and pass it to decl_attributes. * tree.c (cxx_attribute_table): Initialize new member of struct attribute_spec. gcc/fortran/ChangeLog: PR c/81544 * f95-lang.c (gfc_attribute_table): Initialize new member of struct attribute_spec. gcc/lto/ChangeLog: PR c/81544 * lto-lang.c (lto_attribute_table): Initialize new member of struct attribute_spec. gcc/ChangeLog: PR c/81544 * attribs.c (empty_attribute_table): Initialize new member of struct attribute_spec. (decl_attributes): Add argument. Handle mutually exclusive combinations of attributes. (selftests::test_attribute_exclusions): New function. (selftests::attribute_c_tests): Ditto. * attribs.h (decl_attributes): Add default argument. * selftest.h (attribute_c_tests): Declare. * selftest-run-tests.c (selftest::run_tests): Call attribute_c_tests. * tree-core.h (attribute_spec::exclusions, exclude): New type and member. * doc/extend.texi (Common Function Attributes): Update const and pure. gcc/testsuite/ChangeLog: PR c/81544 * c-c++-common/Wattributes-2.c: New test. * c-c++-common/Wattributes.c: New test. * c-c++-common/attributes-3.c: Adjust. * gcc.dg/Wattributes-6.c: New test. * gcc.dg/Wattributes-7.c: New test. * gcc.dg/attr-noinline.c * gcc.dg/pr44964.c: Same. * gcc.dg/torture/pr42363.c: Same. * gcc.dg/tree-ssa/ssa-ccp-2.c: Same. From-SVN: r255469
2017-12-07Add unroll and jam passMichael Matz1-1/+15
* gimple-loop-jam.c: New file. * Makefile.in (OBJS): Add gimple-loop-jam.o. * common.opt (funroll-and-jam): New option. * opts.c (default_options_table): Add unroll-and-jam at -O3. * params.def (PARAM_UNROLL_JAM_MIN_PERCENT): New param. (PARAM_UNROLL_JAM_MAX_UNROLL): Ditto. * passes.def: Add pass_loop_jam. * timevar.def (TV_LOOP_JAM): Add. * tree-pass.h (make_pass_loop_jam): Declare. * cfgloop.c (flow_loop_tree_node_add): Add AFTER argument. * cfgloop.h (flow_loop_tree_node_add): Adjust declaration. * cfgloopmanip.c (duplicate_loop): Add AFTER argument, adjust call to flow_loop_tree_node_add. (duplicate_subloops, copy_loops_to): Append to sibling list. * cfgloopmanip.h: (duplicate_loop): Adjust declaration. * doc/invoke.texi (-funroll-and-jam): Document new option. (unroll-jam-min-percent, unroll-jam-max-unroll): Document new params. testsuite/ * gcc.dg/unroll-and-jam.c: New test. From-SVN: r255467
2017-12-06invoke.texi (-Wstringop-truncation): Mention attribute nonstring.Martin Sebor1-0/+8
gcc/ChangeLog: * doc/invoke.texi (-Wstringop-truncation): Mention attribute nonstring. From-SVN: r255447
2017-12-05invoke.texi: Document the options.Martin Liska1-0/+22
gcc/ * doc/invoke.texi: Document the options. * flag-types.h (enum sanitize_code): Add SANITIZE_POINTER_COMPARE and SANITIZE_POINTER_SUBTRACT. * ipa-inline.c (sanitize_attrs_match_for_inline_p): Add handling of SANITIZE_POINTER_COMPARE and SANITIZE_POINTER_SUBTRACT. * opts.c: Define new sanitizer options. * sanitizer.def (BUILT_IN_ASAN_POINTER_COMPARE): Likewise. (BUILT_IN_ASAN_POINTER_SUBTRACT): Likewise. gcc/c/ * c-typeck.c (pointer_diff): Add new argument and instrument pointer subtraction. (build_binary_op): Similar for pointer comparison. gcc/cp/ * typeck.c (pointer_diff): Add new argument and instrument pointer subtraction. (cp_build_binary_op): Create compound expression if doing an instrumentation. gcc/testsuite/ * c-c++-common/asan/pointer-compare-1.c: New test. * c-c++-common/asan/pointer-compare-2.c: New test. * c-c++-common/asan/pointer-subtract-1.c: New test. * c-c++-common/asan/pointer-subtract-2.c: New test. * c-c++-common/asan/pointer-subtract-3.c: New test. * c-c++-common/asan/pointer-subtract-4.c: New test. libsanitizer/ * asan/asan_descriptions.cc: Cherry-pick upstream r319668. * asan/asan_descriptions.h: Likewise. * asan/asan_report.cc: Likewise. * asan/asan_thread.cc: Likewise. * asan/asan_thread.h: Likewise. Co-Authored-By: Jakub Jelinek <jakub@redhat.com> From-SVN: r255404
2017-12-02doc update for -dpSegher Boessenkool1-1/+1
* doc/invoke.texi (-dp): Say that instruction cost is printed as well. From-SVN: r255351
2017-12-01Delete obsolete DWARF1 references.Jim Wilson2-4/+4
gcc/ * common.opt (use_gnu_debug_info_extensions): Delete DWARF_DEBUG from comment. * config/vx-common.h (DWARF_DEBUGGING_INFO): Delete undef. * doc/tm.texi.in (PREFERRED_DEBUGGING_TYPE): Delete DWARF_DEBUG reference. * doc/tm.texi: Regenerate. From-SVN: r255345
2017-12-01* doc/extend.texi: Mention C++14 library complex suffix.Jason Merrill1-0/+4
From-SVN: r255339
2017-12-01Fix "central flowgraph" typo in machine desc docsJonathan Wakely1-1/+1
* doc/md.texi (Insn Splitting): Fix "central flowgraph" typo. From-SVN: r255305
2017-11-30Cleanup riscv option docs.Jim Wilson1-14/+20
gcc/ * doc/invoke.texi (RISC-V Options): Delete nonexistent -mmemcpy and -mno-memcpy options. For -mplt, -mfdiv, -mdiv, -msave-restore, and -mstrict-align, add info on default value. Delete redundant lines for -mabi. Add missing -mexplicit-relocs docs. From-SVN: r255280
2017-11-28Remove Cilk Plus support.Julia Koval5-132/+0
* Makefile.def (target_modules): Remove libcilkrts. * Makefile.in: Ditto. * configure: Ditto. * configure.ac: Ditto. contrib/ * contrib/gcc_update: Ditto. gcc/ * Makefile.in (cilkplus.def, cilk-builtins.def, c-family/cilk.o, c-family/c-cilkplus.o, c-family/array-notation-common.o, cilk-common.o, cilk.h, cilk-common.c): Remove. * builtin-types.def (BT_FN_INT_PTR_PTR_PTR_FTYPE_BT_INT_BT_PTR_BT_PTR_BT_PTR): Remove. * builtins.c (is_builtin_name): Remove cilkplus condition. (BUILT_IN_CILK_DETACH, BUILT_IN_CILK_POP_FRAME): Remove. * builtins.def (DEF_CILK_BUILTIN_STUB, DEF_CILKPLUS_BUILTIN, cilk-builtins.def, cilkplus.def): Remove. * cif-code.def (CILK_SPAWN): Remove. * cilk-builtins.def: Delete. * cilk-common.c: Ditto. * cilk.h: Ditto. * cilkplus.def: Ditto. * config/darwin.h (fcilkplus): Delete. * cppbuiltin.c: Ditto. * doc/extend.texi: Remove cilkplus doc. * doc/generic.texi: Ditto. * doc/invoke.texi: Ditto. * doc/passes.texi: Ditto. * gcc.c (fcilkplus): Remove. * gengtype.c (cilk.h): Remove. * gimple-pretty-print.c (dump_gimple_omp_for): Remove cilkplus support. * gimple.h (GF_OMP_FOR_KIND_CILKFOR, GF_OMP_FOR_KIND_CILKSIMD): Remove. * gimplify.c (gimplify_return_expr, maybe_fold_stmt, gimplify_call_expr, is_gimple_stmt, gimplify_modify_expr, gimplify_scan_omp_clauses, gimplify_adjust_omp_clauses, gimplify_omp_for, gimplify_expr): Remove cilkplus conditions. * ipa-fnsummary.c (ipa_dump_fn_summary, compute_fn_summary, inline_read_section): Ditto. * ipa-inline-analysis.c (cilk.h): Remove. * ira.c (ira_setup_eliminable_regset): Remove cilkplus support. * lto-wrapper.c (merge_and_complain, append_compiler_options, append_linker_options): Remove condition for fcilkplus. * lto/lto-lang.c (cilk.h): Remove. (lto_init): Remove condition for fcilkplus. * omp-expand.c (expand_cilk_for_call): Delete. (expand_omp_taskreg, expand_omp_for_static_chunk, expand_omp_for): Remove cilkplus conditions. (expand_cilk_for): Delete. * omp-general.c (omp_extract_for_data): Remove cilkplus support. * omp-low.c (scan_sharing_clauses, create_omp_child_function, execute_lower_omp, diagnose_sb_0): Ditto. * omp-simd-clone.c (simd_clone_clauses_extract): Ditto. * tree-core.h (OMP_CLAUSE__CILK_FOR_COUNT_): Delete. * tree-nested.c: Ditto. * tree-pretty-print.c (dump_omp_clause): Remove cilkplus support. (dump_generic_node): Ditto. * tree.c (OMP_CLAUSE__CILK_FOR_COUNT_): Delete. * tree.def (cilk_simd, cilk_for, cilk_spawn_stmt, cilk_sync_stmt): Delete. * tree.h (CILK_SPAWN_FN, EXPR_CILK_SPAWN): Delete. gcc/c-family/ * array-notation-common.c: Delete. * c-cilkplus.c: Ditto. * c-common.c (_Cilk_spawn, _Cilk_sync, _Cilk_for): Remove. * c-common.def (ARRAY_NOTATION_REF): Remove. * c-common.h (RID_CILK_SPAWN, build_array_notation_expr, build_array_notation_ref, C_ORT_CILK, c_check_cilk_loop, c_validate_cilk_plus_loop, cilkplus_an_parts, cilk_ignorable_spawn_rhs_op, cilk_recognize_spawn): Remove. * c-gimplify.c (CILK_SPAWN_STMT): Remove. * c-omp.c: Remove CILK_SIMD check. * c-pragma.c: Ditto. * c-pragma.h: Remove CILK related pragmas. * c-pretty-print.c (c_pretty_printer::postfix_expression): Remove ARRAY_NOTATION_REF condition. (c_pretty_printer::expression): Ditto. * c.opt (fcilkplus): Remove. * cilk.c: Delete. gcc/c/ * Make-lang.in (c/c-array-notation.o): Remove. * c-array-notation.c: Delete. * c-decl.c: Remove cilkplus condition. * c-parser.c (c_parser_cilk_simd, c_parser_cilk_for, c_parser_cilk_verify_simd, c_parser_array_notation, c_parser_cilk_clause_vectorlength, c_parser_cilk_grainsize, c_parser_cilk_simd_fn_vector_attrs, c_finish_cilk_simd_fn_tokens): Delete. (c_parser_declaration_or_fndef): Remove cilkplus condition. (c_parser_direct_declarator_inner): Ditto. (CILK_SIMD_FN_CLAUSE_MASK): Delete. (c_parser_attributes, c_parser_compound_statement, c_parser_statement_after_labels, c_parser_if_statement, c_parser_switch_statement, c_parser_while_statement, c_parser_do_statement, c_parser_for_statement, c_parser_unary_expression, c_parser_postfix_expression, c_parser_postfix_expression_after_primary, c_parser_pragma, c_parser_omp_clause_name, c_parser_omp_all_clauses, c_parser_omp_for_loop, c_finish_omp_declare_simd): Remove cilkplus support. * c-typeck.c (build_array_ref, build_function_call_vec, convert_arguments, lvalue_p, build_compound_expr, c_finish_return, c_finish_if_stmt, c_finish_loop, build_binary_op): Remove cilkplus support. gcc/cp/ * Make-lang.in (cp/cp-array-notation.o, cp/cp-cilkplus.o): Delete. * call.c (convert_for_arg_passing, build_cxx_call): Remove cilkplus. * constexpr.c (potential_constant_expression_1): Ditto. * cp-array-notation.c: Delete. * cp-cilkplus.c: Ditto. * cp-cilkplus.h: Ditto. * cp-gimplify.c (cp_gimplify_expr, cp_fold_r, cp_genericize): Remove cilkplus condition. * cp-objcp-common.c (ARRAY_NOTATION_REF): Delete. * cp-tree.h (cilkplus_an_triplet_types_ok_p): Delete. * decl.c (grokfndecl, finish_function): Remove cilkplus condition. * error.c (dump_decl, dump_expr): Remove ARRAY_NOTATION_REF condition. * lambda.c (cp-cilkplus.h): Remove. * parser.c (cp_parser_cilk_simd, cp_parser_cilk_for, cp_parser_cilk_simd_vectorlength): Delete. (cp_debug_parser, cp_parser_ctor_initializer_opt_and_function_body, cp_parser_postfix_expression, cp_parser_postfix_open_square_expression, cp_parser_statement, cp_parser_jump_statement, cp_parser_direct_declarator, cp_parser_late_return_type_opt, cp_parser_gnu_attribute_list, cp_parser_omp_clause_name, cp_parser_omp_clause_aligned, cp_parser_omp_clause_linear, cp_parser_omp_all_clauses, cp_parser_omp_flush, cp_parser_omp_for_cond, cp_parser_omp_for_incr, cp_parser_omp_for_loop_init, cp_parser_omp_for_loop, cp_parser_omp_declare_simd): Remove cilkplus support. (CILK_SIMD_FN_CLAUSE_MASK, cp_parser_late_parsing_cilk_simd_fn_info, cp_parser_cilk_grainsize): Remove. (cp_parser_pragma, c_parse_file): Remove cilkplus support. (cp_parser_cilk_simd_vectorlength, cp_parser_cilk_simd_linear, cp_parser_cilk_simd_clause_name, cp_parser_cilk_simd_all_clauses, cp_parser_cilk_simd, cp_parser_cilk_for): Remove. * parser.h (IN_CILK_SIMD_FOR, IN_CILK_SPAWN): Remove. * pt.c (tsubst_attribute, tsubst_expr, tsubst_copy_and_build): Remove cilkplus support. * semantics.c (finish_goto_stmt, begin_while_stmt, finish_do_body, finish_init_stmt, finish_switch_cond, simplify_aggr_init_expr, finish_omp_clauses, finish_omp_clauses, finish_omp_for): Remove cilkplus support. * tree.c (lvalue_kind): Remove ARRAY_NOTATION_REF conditon. * typeck.c (cp_build_array_ref, cp_build_compound_expr, check_return_expr): Remove cilkplus support. gcc/testsuite/ * c-c++-common/attr-simd-3.c: Delete. * c-c++-common/cilk-plus/AN/an-if.c: Delete. * c-c++-common/cilk-plus/AN/array_test1.c: Delete. * c-c++-common/cilk-plus/AN/array_test2.c: Delete. * c-c++-common/cilk-plus/AN/array_test_ND.c: Delete. * c-c++-common/cilk-plus/AN/builtin_fn_custom.c: Delete. * c-c++-common/cilk-plus/AN/builtin_fn_mutating.c: Delete. * c-c++-common/cilk-plus/AN/builtin_func_double.c: Delete. * c-c++-common/cilk-plus/AN/builtin_func_double2.c: Delete. * c-c++-common/cilk-plus/AN/comma_exp.c: Delete. * c-c++-common/cilk-plus/AN/conditional.c: Delete. * c-c++-common/cilk-plus/AN/decl-ptr-colon.c: Delete. * c-c++-common/cilk-plus/AN/dimensionless-arrays.c: Delete. * c-c++-common/cilk-plus/AN/exec-once.c: Delete. * c-c++-common/cilk-plus/AN/exec-once2.c: Delete. * c-c++-common/cilk-plus/AN/fn_ptr-2.c: Delete. * c-c++-common/cilk-plus/AN/fn_ptr.c: Delete. * c-c++-common/cilk-plus/AN/fp_triplet_values.c: Delete. * c-c++-common/cilk-plus/AN/gather-scatter-errors.c: Delete. * c-c++-common/cilk-plus/AN/gather_scatter.c: Delete. * c-c++-common/cilk-plus/AN/if_test.c: Delete. * c-c++-common/cilk-plus/AN/if_test_errors.c: Delete. * c-c++-common/cilk-plus/AN/misc.c: Delete. * c-c++-common/cilk-plus/AN/n-ptr-test.c: Delete. * c-c++-common/cilk-plus/AN/parser_errors.c: Delete. * c-c++-common/cilk-plus/AN/parser_errors2.c: Delete. * c-c++-common/cilk-plus/AN/parser_errors3.c: Delete. * c-c++-common/cilk-plus/AN/parser_errors4.c: Delete. * c-c++-common/cilk-plus/AN/pr57457-2.c: Delete. * c-c++-common/cilk-plus/AN/pr57457.c: Delete. * c-c++-common/cilk-plus/AN/pr57490.c: Delete. * c-c++-common/cilk-plus/AN/pr57541-2.c: Delete. * c-c++-common/cilk-plus/AN/pr57541.c: Delete. * c-c++-common/cilk-plus/AN/pr57577.c: Delete. * c-c++-common/cilk-plus/AN/pr58942.c: Delete. * c-c++-common/cilk-plus/AN/pr61191.c: Delete. * c-c++-common/cilk-plus/AN/pr61455-2.c: Delete. * c-c++-common/cilk-plus/AN/pr61455.c: Delete. * c-c++-common/cilk-plus/AN/pr61962.c: Delete. * c-c++-common/cilk-plus/AN/pr61963.c: Delete. * c-c++-common/cilk-plus/AN/pr62008.c: Delete. * c-c++-common/cilk-plus/AN/pr63884.c: Delete. * c-c++-common/cilk-plus/AN/rank_mismatch.c: Delete. * c-c++-common/cilk-plus/AN/rank_mismatch2.c: Delete. * c-c++-common/cilk-plus/AN/rank_mismatch3.c: Delete. * c-c++-common/cilk-plus/AN/sec_implicit.c: Delete. * c-c++-common/cilk-plus/AN/sec_implicit2.c: Delete. * c-c++-common/cilk-plus/AN/sec_implicit_ex.c: Delete. * c-c++-common/cilk-plus/AN/sec_reduce_ind_same_value.c: Delete. * c-c++-common/cilk-plus/AN/sec_reduce_max_min_ind.c: Delete. * c-c++-common/cilk-plus/AN/sec_reduce_return.c: Delete. * c-c++-common/cilk-plus/AN/side-effects-1.c: Delete. * c-c++-common/cilk-plus/AN/test_builtin_return.c: Delete. * c-c++-common/cilk-plus/AN/test_sec_limits.c: Delete. * c-c++-common/cilk-plus/AN/tst_lngth.c: Delete. * c-c++-common/cilk-plus/AN/vla.c: Delete. * c-c++-common/cilk-plus/CK/Wparentheses-1.c: Delete. * c-c++-common/cilk-plus/CK/cilk-for-2.c: Delete. * c-c++-common/cilk-plus/CK/cilk-for-3.c: Delete. * c-c++-common/cilk-plus/CK/cilk-fors.c: Delete. * c-c++-common/cilk-plus/CK/cilk_for_errors.c: Delete. * c-c++-common/cilk-plus/CK/cilk_for_grain.c: Delete. * c-c++-common/cilk-plus/CK/cilk_for_grain_errors.c: Delete. * c-c++-common/cilk-plus/CK/cilk_for_ptr_iter.c: Delete. * c-c++-common/cilk-plus/CK/compound_cilk_spawn.c: Delete. * c-c++-common/cilk-plus/CK/concec_cilk_spawn.c: Delete. * c-c++-common/cilk-plus/CK/errors.c: Delete. * c-c++-common/cilk-plus/CK/fib.c: Delete. * c-c++-common/cilk-plus/CK/fib_init_expr_xy.c: Delete. * c-c++-common/cilk-plus/CK/fib_no_return.c: Delete. * c-c++-common/cilk-plus/CK/fib_no_sync.c: Delete. * c-c++-common/cilk-plus/CK/invalid_spawns.c: Delete. * c-c++-common/cilk-plus/CK/invalid_sync.c: Delete.c * c-c++-common/cilk-plus/CK/nested_cilk_for.c: Delete. * c-c++-common/cilk-plus/CK/no_args_error.c: Delete. * c-c++-common/cilk-plus/CK/pr59631.c: Delete. * c-c++-common/cilk-plus/CK/pr60197-2.c: Delete. * c-c++-common/cilk-plus/CK/pr60197.c: Delete. * c-c++-common/cilk-plus/CK/pr60469.c: Delete. * c-c++-common/cilk-plus/CK/pr60586.c: Delete. * c-c++-common/cilk-plus/CK/pr63307.c: Delete. * c-c++-common/cilk-plus/CK/pr69826-1.c: Delete. * c-c++-common/cilk-plus/CK/pr69826-2.c: Delete. * c-c++-common/cilk-plus/CK/pr79428-4.c: Delete. * c-c++-common/cilk-plus/CK/pr79428-7.c: Delete. * c-c++-common/cilk-plus/CK/spawn_in_return.c: Delete. * c-c++-common/cilk-plus/CK/spawnee_inline.c: Delete. * c-c++-common/cilk-plus/CK/spawner_inline.c: Delete. * c-c++-common/cilk-plus/CK/spawning_arg.c: Delete. * c-c++-common/cilk-plus/CK/steal_check.c: Delete. * c-c++-common/cilk-plus/CK/sync_wo_spawn.c: Delete. * c-c++-common/cilk-plus/CK/test__cilk.c: Delete. * c-c++-common/cilk-plus/CK/varargs_test.c: Delete. * c-c++-common/cilk-plus/PS/Wparentheses-1.c: Delete. * c-c++-common/cilk-plus/PS/body.c: Delete. * c-c++-common/cilk-plus/PS/clauses1.c: Delete. * c-c++-common/cilk-plus/PS/clauses2.c: Delete. * c-c++-common/cilk-plus/PS/clauses3.c: Delete. * c-c++-common/cilk-plus/PS/clauses4.c: Delete. * c-c++-common/cilk-plus/PS/for1.c: Delete. * c-c++-common/cilk-plus/PS/for2.c: Delete. * c-c++-common/cilk-plus/PS/for3.c: Delete. * c-c++-common/cilk-plus/PS/pr69363.c: Delete. * c-c++-common/cilk-plus/PS/reduction-1.c: Delete. * c-c++-common/cilk-plus/PS/reduction-2.c: Delete. * c-c++-common/cilk-plus/PS/reduction-3.c: Delete. * c-c++-common/cilk-plus/PS/run-1.c: Delete. * c-c++-common/cilk-plus/PS/safelen.c: Delete. * c-c++-common/cilk-plus/PS/vectorlength-2.c: Delete. * c-c++-common/cilk-plus/PS/vectorlength-3.c: Delete. * c-c++-common/cilk-plus/PS/vectorlength.c: Delete. * c-c++-common/cilk-plus/SE/ef_error.c: Delete. * c-c++-common/cilk-plus/SE/ef_error2.c: Delete. * c-c++-common/cilk-plus/SE/ef_error3.c: Delete. * c-c++-common/cilk-plus/SE/ef_test.c: Delete. * c-c++-common/cilk-plus/SE/ef_test2.c: Delete. * c-c++-common/cilk-plus/SE/vlength_errors.c: Delete. * g++.dg/cilk-plus/AN/array_function.c: Delete. * g++.dg/cilk-plus/AN/array_test1_tplt.c: Delete. * g++.dg/cilk-plus/AN/array_test2_tplt.c: Delete. * g++.dg/cilk-plus/AN/array_test_ND_tplt.c: Delete. * g++.dg/cilk-plus/AN/braced_list.c: Delete. * g++.dg/cilk-plus/AN/builtin_fn_custom_tplt.c: Delete. * g++.dg/cilk-plus/AN/builtin_fn_mutating_tplt.c: Delete. * g++.dg/cilk-plus/AN/fp_triplet_values_tplt.c: Delete. * g++.dg/cilk-plus/AN/postincr_test.c: Delete. * g++.dg/cilk-plus/AN/preincr_test.c: Delete. * g++.dg/cilk-plus/CK/catch_exc.c: Delete. * g++.dg/cilk-plus/CK/cf3.c: Delete. * g++.dg/cilk-plus/CK/cilk-for-tplt.c: Delete. * g++.dg/cilk-plus/CK/const_spawn.c: Delete. * g++.dg/cilk-plus/CK/fib-opr-overload.c: Delete. * g++.dg/cilk-plus/CK/fib-tplt.c: Delete. * g++.dg/cilk-plus/CK/for1.c: Delete. * g++.dg/cilk-plus/CK/lambda_spawns.c: Delete. * g++.dg/cilk-plus/CK/lambda_spawns_tplt.c: Delete. * g++.dg/cilk-plus/CK/pr60586.c: Delete. * g++.dg/cilk-plus/CK/pr66326.c: Delete. * g++.dg/cilk-plus/CK/pr68001.c: Delete. * g++.dg/cilk-plus/CK/pr68997.c: Delete. * g++.dg/cilk-plus/CK/pr69024.c: Delete. * g++.dg/cilk-plus/CK/pr69048.c: Delete. * g++.dg/cilk-plus/CK/pr69267.c: Delete. * g++.dg/cilk-plus/CK/pr80038.c: Delete. * g++.dg/cilk-plus/CK/stl_iter.c: Delete. * g++.dg/cilk-plus/CK/stl_rev_iter.c: Delete. * g++.dg/cilk-plus/CK/stl_test.c: Delete. * g++.dg/cilk-plus/cilk-plus.exp * g++.dg/cilk-plus/ef_test.C: Delete. * g++.dg/cilk-plus/for.C: Delete. * g++.dg/cilk-plus/for2.C: Delete. * g++.dg/cilk-plus/for3.C: Delete. * g++.dg/cilk-plus/for4.C: Delete. * g++.dg/cilk-plus/pr60967.C: Delete. * g++.dg/cilk-plus/pr69028.C: Delete. * g++.dg/cilk-plus/pr70565.C: Delete. * g++.dg/pr57662.C: Delete. * gcc.dg/cilk-plus/cilk-plus.exp * gcc.dg/cilk-plus/for1.c: Delete. * gcc.dg/cilk-plus/for2.c: Delete. * gcc.dg/cilk-plus/jump-openmp.c: Delete. * gcc.dg/cilk-plus/jump.c: Delete. * gcc.dg/cilk-plus/pr69798-1.c: Delete. * gcc.dg/cilk-plus/pr69798-2.c: Delete. * gcc.dg/cilk-plus/pr78306.c: Delete. * gcc.dg/cilk-plus/pr79116.c: Delete. * gcc.dg/graphite/id-28.c: Delete. * lib/cilk-plus-dg.exp: Delete. * lib/target-supports.exp (cilkplus_runtime): Delete. Co-Authored-By: Sebastian Peryt <sebastian.peryt@intel.com> From-SVN: r255195
2017-11-27extend.texi: Add -A suffix (ARMv8*-A, ARMv7-A).Tamar Christina3-21/+21
2017-11-27 Tamar Christina <tamar.christina@arm.com> * doc/extend.texi: Add -A suffix (ARMv8*-A, ARMv7-A). * doc/invoke.texi: Add -A suffix (ARMv8*-A, ARMv7-A). * doc/sourcebuild.texi: Add -A suffix (ARMv8*-A, ARMv7-A). From-SVN: r255169
2017-11-26i386.c (processor_target_table): Add skylake_cost for skylake-avx512.Uros Bizjak1-0/+7
* config/i386/i386.c (processor_target_table): Add skylake_cost for skylake-avx512. * config/i386/x86-tune-costs.h (skylake_memcpy, skylake_memset, skylake_cost): New. * config/i386/driver-i386.c (host_detect_local_cpu): Detect skylake-avx512. * config.gcc: Add -march=cannonlake. * config/i386/driver-i386.c (host_detect_local_cpu): Detect cannonlake. * config/i386/i386-c.c (ix86_target_macros_internal): Handle cannonlake. * config/i386/i386.c (processor_costs): Add m_CANNONLAKE. (PTA_CANNONLAKE): New. (processor_target_table): Add cannonlake. (ix86_option_override_internal): Ditto. (fold_builtin_cpu): Ditto. (get_builtin_code_for_version): Handle cannonlake. (M_INTEL_COREI7_CANNONLAKE): New. * config/i386/i386.h (TARGET_CANNONLAKE, PROCESSOR_CANNONLAKE): New. * doc/invoke.texi: Add -march=cannonlake. gcc/testsuite/ * gcc.target/i386/funcspec-56.inc: Handle new march. * g++.dg/ext/mv16.C: Ditto. libgcc/ * config/i386/cpuinfo.c (get_intel_cpu): Handle cannonlake. * config/i386/cpuinfo.h (processor_subtypes): Add INTEL_COREI7_CANNONLAKE. From-SVN: r255155
2017-11-26Plugin support on Windows/MinGWBoris Kolpackov1-5/+50
config/ChangeLog: 2017-11-14 Boris Kolpackov <boris@codesynthesis.com> * gcc-plugin.m4: Add support for MinGW. gcc/ChangeLog: 2017-11-14 Boris Kolpackov <boris@codesynthesis.com> * plugin.c (add_new_plugin): Use platform-specific library extensions. (try_init_one_plugin): Alternative implementation for MinGW. * Makefile.in (plugin_implib): New. (gengtype-lex.c): Fix broken AIX workaround. * configure: Regenerate. * doc/plugins.texi: Document support for MinGW. gcc/c/ChangeLog: 2017-11-14 Boris Kolpackov <boris@codesynthesis.com> * Make-lang.in (c.install-plugin): Install backend import library. gcc/cp/ChangeLog: 2017-11-14 Boris Kolpackov <boris@codesynthesis.com> * Make-lang.in (c++.install-plugin): Install backend import library. libcc1/ChangeLog: 2017-11-14 Boris Kolpackov <boris@codesynthesis.com> * configure: Regenerate. From-SVN: r255154
2017-11-23generic.texi (ANNOTATE_EXPR): Document 3rd operand.Eric Botcazou1-1/+1
* doc/generic.texi (ANNOTATE_EXPR): Document 3rd operand. * cfgloop.h (struct loop): Add unroll field. * function.h (struct function): Add has_unroll bitfield. * gimplify.c (gimple_boolify) <ANNOTATE_EXPR>: Deal with unroll kind. (gimplify_expr) <ANNOTATE_EXPR>: Propagate 3rd operand. * loop-init.c (pass_loop2::gate): Return true if cfun->has_unroll. (pass_rtl_unroll_loops::gate): Likewise. * loop-unroll.c (decide_unrolling): Tweak note message. Skip loops for which loop->unroll==1. (decide_unroll_constant_iterations): Use note for consistency and take loop->unroll into account. Return early if loop->unroll is set. Fix thinko in existing test. (decide_unroll_runtime_iterations): Use note for consistency and take loop->unroll into account. (decide_unroll_stupid): Likewise. * lto-streamer-in.c (input_cfg): Read loop->unroll. * lto-streamer-out.c (output_cfg): Write loop->unroll. * tree-cfg.c (replace_loop_annotate_in_block) <annot_expr_unroll_kind>: New case. (replace_loop_annotate) <annot_expr_unroll_kind>: Likewise. (print_loop): Print loop->unroll if set. * tree-core.h (enum annot_expr_kind): Add annot_expr_unroll_kind. * tree-inline.c (copy_loops): Copy unroll and set cfun->has_unroll. * tree-pretty-print.c (dump_generic_node) <annot_expr_unroll_kind>: New case. * tree-ssa-loop-ivcanon.c (try_unroll_loop_completely): Bail out if loop->unroll is set and smaller than the trip count. Otherwise bypass entirely the heuristics if loop->unroll is set. Remove dead note. Fix off-by-one bug in other note. (try_peel_loop): Bail out if loop->unroll is set. Fix formatting. (tree_unroll_loops_completely_1): Force unrolling if loop->unroll is greater than 1. (tree_unroll_loops_completely): Make static. (pass_complete_unroll::execute): Use correct type for variable. (pass_complete_unrolli::execute): Fix formatting. * tree.def (ANNOTATE_EXPR): Add 3rd operand. ada/ * gcc-interface/trans.c (gnat_gimplify_stmt) <LOOP_STMT>: Pass 3rd operand to ANNOTATE_EXPR and also pass unrolling hints. c/ * c-parser.c (c_parser_while_statement): Pass 3rd operand to ANNOTATE_EXPR. (c_parser_do_statement): Likewise. (c_parser_for_statement): Likewise. cp/ * pt.c (tsubst_expr) <ANNOTATE_EXPR>: Recurse on 3rd operand. * semantics.c (finish_while_stmt_cond): Pass 3rd operand to ANNOTATE_EXPR. (finish_do_stmt): Likewise. (finish_for_cond): Likewise. fortran/ * trans-stmt.c (gfc_trans_forall_loop): Pass 3rd operand to ANNOTATE_EXPR. From-SVN: r255106
2017-11-22re PR rtl-optimization/83030 (ICE in create_pseudo_cfg, at dwarf2cfi.c:2840)Eric Botcazou1-64/+66
PR rtl-optimization/83030 * doc/rtl.texi (Flags in an RTL Expression): Alphabetize, add entry for CROSSING_JUMP_P and mention usage of 'jump' for JUMP_INSNs. (Insns): Delete entry for REG_CROSSING_JUMP in register notes. * bb-reorder.c (update_crossing_jump_flags): Do not test whether the CROSSING_JUMP_P flag is already set before setting it. * cfgrtl.c (fixup_partition_crossing): Likewise. * reorg.c (relax_delay_slots): Do not consider a CROSSING_JUMP_P insn as useless. From-SVN: r255083
2017-11-22re PR c++/60336 (empty struct value is passed differently in C and C++)Marek Polacek2-0/+14
PR c++/60336 PR middle-end/67239 PR target/68355 * c-decl.c (grokdeclarator): Set DECL_PADDING_P on unnamed bit-fields. * class.c (layout_class_type): Set DECL_PADDING_P on padding. * decl.c (cxx_init_decl_processing): Set TRANSLATION_UNIT_WARN_EMPTY_P. (grokdeclarator): Set DECL_PADDING_P on unnamed bit-fields. * lto.c (compare_tree_sccs_1): Compare TYPE_EMPTY_P and DECL_PADDING_P. * calls.c (initialize_argument_information): Call warn_parameter_passing_abi target hook. (store_one_arg): Use 0 for empty record size. Don't push 0 size argument onto stack. (must_pass_in_stack_var_size_or_pad): Return false for empty types. * common.opt: Update -fabi-version description. * config/i386/i386.c (init_cumulative_args): Set cum->warn_empty. (ix86_gimplify_va_arg): Call arg_int_size_in_bytes instead of int_size_in_bytes. (ix86_is_empty_record): New function. (ix86_warn_parameter_passing_abi): New function. (TARGET_EMPTY_RECORD_P): Redefine. (TARGET_WARN_PARAMETER_PASSING_ABI): Redefine. * config/i386/i386.h (CUMULATIVE_ARGS): Add warn_empty. * doc/tm.texi: Regenerated. * doc/tm.texi.in (TARGET_EMPTY_RECORD_P, TARGET_WARN_PARAMETER_PASSING_ABI): Add. * dwarf2out.c (get_ultimate_context): Move to tree.c. * explow.c (hard_function_value): Call arg_int_size_in_bytes instead of int_size_in_bytes. * expr.c (copy_blkmode_to_reg): Likewise. * function.c (aggregate_value_p): Return 0 for empty types. (assign_parm_find_entry_rtl): Call warn_parameter_passing_abi target hook. (locate_and_pad_parm): Call arg size_in_bytes instead size_in_bytes. * lto-streamer-out.c (hash_tree): Hash TYPE_EMPTY_P and DECL_PADDING_P. * stor-layout.c (finalize_type_size): Set TYPE_EMPTY_P. * target.def (empty_record_p, warn_parameter_passing_abi): New target hooks. * targhooks.c (hook_void_CUMULATIVE_ARGS_tree): New hook. (std_gimplify_va_arg_expr): Skip empty records. Call arg_size_in_bytes instead size_in_bytes. * targhooks.h (hook_void_CUMULATIVE_ARGS_tree): Declare. * tree-core.h (tree_type_common): Add empty_flag. (tree_decl_common): Update comments. * tree-streamer-in.c (unpack_ts_decl_common_value_fields): Stream DECL_PADDING_P. (unpack_ts_type_common_value_fields): Stream TYPE_EMPTY_P. * tree-streamer-out.c (pack_ts_decl_common_value_fields): Stream DECL_PADDING_P. (pack_ts_type_common_value_fields): Stream TYPE_EMPTY_P. * tree.c (default_is_empty_type): New function. (default_is_empty_record): New function. (arg_int_size_in_bytes): New function. (arg_size_in_bytes): New function. (get_ultimate_context): New function. * tree.h: Define TYPE_EMPTY_P, DECL_PADDING_P and TRANSLATION_UNIT_WARN_EMPTY_P. (default_is_empty_record, arg_int_size_in_bytes, arg_size_in_bytes, get_ultimate_context): Declare. * g++.dg/abi/empty12.C: New test. * g++.dg/abi/empty12.h: New test. * g++.dg/abi/empty12a.c: New test. * g++.dg/abi/empty13.C: New test. * g++.dg/abi/empty13.h: New test. * g++.dg/abi/empty13a.c: New test. * g++.dg/abi/empty14.C: New test. * g++.dg/abi/empty14.h: New test. * g++.dg/abi/empty14a.c: New test. * g++.dg/abi/empty15.C: New test. * g++.dg/abi/empty15.h: New test. * g++.dg/abi/empty15a.c: New test. * g++.dg/abi/empty16.C: New test. * g++.dg/abi/empty16.h: New test. * g++.dg/abi/empty16a.c: New test. * g++.dg/abi/empty17.C: New test. * g++.dg/abi/empty17.h: New test. * g++.dg/abi/empty17a.c: New test. * g++.dg/abi/empty18.C: New test. * g++.dg/abi/empty18.h: New test. * g++.dg/abi/empty18a.c: New test. * g++.dg/abi/empty19.C: New test. * g++.dg/abi/empty19.h: New test. * g++.dg/abi/empty19a.c: New test. * g++.dg/abi/empty20.C: New test. * g++.dg/abi/empty21.C: New test. * g++.dg/abi/empty22.C: New test. * g++.dg/abi/empty22.h: New test. * g++.dg/abi/empty22a.c: New test. * g++.dg/abi/empty23.C: New test. * g++.dg/abi/empty24.C: New test. * g++.dg/abi/empty25.C: New test. * g++.dg/abi/empty25.h: New test. * g++.dg/abi/empty25a.c: New test. * g++.dg/abi/empty26.C: New test. * g++.dg/abi/empty26.h: New test. * g++.dg/abi/empty26a.c: New test. * g++.dg/abi/empty27.C: New test. * g++.dg/abi/empty28.C: New test. * g++.dg/abi/pr60336-1.C: New test. * g++.dg/abi/pr60336-10.C: New test. * g++.dg/abi/pr60336-11.C: New test. * g++.dg/abi/pr60336-12.C: New test. * g++.dg/abi/pr60336-2.C: New test. * g++.dg/abi/pr60336-3.C: New test. * g++.dg/abi/pr60336-4.C: New test. * g++.dg/abi/pr60336-5.C: New test. * g++.dg/abi/pr60336-6.C: New test. * g++.dg/abi/pr60336-7.C: New test. * g++.dg/abi/pr60336-8.C: New test. * g++.dg/abi/pr60336-9.C: New test. * g++.dg/abi/pr68355.C: New test. * g++.dg/lto/pr60336_0.C: New test. Co-Authored-By: H.J. Lu <hongjiu.lu@intel.com> Co-Authored-By: Jason Merrill <jason@redhat.com> From-SVN: r255066
2017-11-21PR tree-optimization/82945 - add warning for passing non-strings to ↵Martin Sebor1-7/+18
functions that expect string arguments gcc/ChangeLog: PR tree-optimization/82945 * builtins.c (expand_builtin_strlen): Call maybe_warn_nonstring_arg. * calls.h (maybe_warn_nonstring_arg): Declare new function. * calls.c (get_attr_nonstring_decl, maybe_warn_nonstring_arg): New functions. (initialize_argument_information): Call maybe_warn_nonstring_arg. * calls.h (get_attr_nonstring_decl): Declare new function. * doc/extend.texi (attribute nonstring): Update. * gimple-fold.c (gimple_fold_builtin_strncpy): Call get_attr_nonstring_decl and handle it. * tree-ssa-strlen.c (maybe_diag_stxncpy_trunc): Same. Improve detection of nul-termination. (strlen_to_stridx): Change to a pointer. (handle_builtin_strlen, handle_builtin_stxncpy): Adjust. (pass_strlen::execute): Same. gcc/testsuite/ChangeLog: PR tree-optimization/82945 * c-c++-common/Wstringop-truncation-2.c: New test. * c-c++-common/Wstringop-truncation.c: Adjust. * c-c++-common/attr-nonstring-2.c: Adjust. * c-c++-common/attr-nonstring-3.c: New test. From-SVN: r255031
2017-11-21i386-opts.h (enum prefer_vector_width): Added new enum for the new option ↵Sergey Shalnov1-5/+19
-mprefer-vector-width=[none|128|256|512]. * config/i386/i386-opts.h (enum prefer_vector_width): Added new enum for the new option -mprefer-vector-width=[none|128|256|512]. * config/i386/i386.c (ix86_target_string): remove old style options -mprefer-avx256 and make -mprefer-avx128 as alias. (ix86_option_override_internal): Apply defaults for the -mprefer-vector-width=[128|256] option. * config/i386/i386.h (TARGET_PREFER_AVX128, TARGET_PREFER_AVX256): Implement macros to work with -mprefer-vector-width=. * config/i386/i386.opt: Implemented option -mprefer-vector-width=[none|128|256|512]. * doc/invoke.texi: Documentation for -mprefer-vector-width=[none|128|256|512]. gcc/testsuite/ * g++.dg/ext/pr57362.C (__attribute__): Test prefer-vector-width=[128|256] target attribute. * gcc.target/i386/avx512f-constant-float-return.c (dg-optioins): Use -mprefer-vector-width=256 instead of -mprefer-avx256. * gcc.target/i386/avx512f-prefer.c: Ditto. * gcc.target/i386/pr82460-2.c: Ditto. From-SVN: r255030
2017-11-21Improve -Wmaybe-uninitialized documentationJonathan Wakely1-9/+11
* doc/invoke.texi (-Wmaybe-uninitialized): Rephrase for clarity. From-SVN: r255022
2017-11-21New POINTER_DIFF_EXPRMarc Glisse1-2/+11
2017-11-21 Marc Glisse <marc.glisse@inria.fr> gcc/c/ * c-fold.c (c_fully_fold_internal): Handle POINTER_DIFF_EXPR. * c-typeck.c (pointer_diff): Use POINTER_DIFF_EXPR. gcc/c-family/ * c-pretty-print.c (pp_c_additive_expression, c_pretty_printer::expression): Handle POINTER_DIFF_EXPR. gcc/cp/ * constexpr.c (cxx_eval_constant_expression, potential_constant_expression_1): Handle POINTER_DIFF_EXPR. * cp-gimplify.c (cp_fold): Likewise. * error.c (dump_expr): Likewise. * typeck.c (pointer_diff): Use POINTER_DIFF_EXPR. gcc/ * doc/generic.texi: Document POINTER_DIFF_EXPR, update POINTER_PLUS_EXPR. * cfgexpand.c (expand_debug_expr): Handle POINTER_DIFF_EXPR. * expr.c (expand_expr_real_2): Likewise. * fold-const.c (const_binop, fold_addr_of_array_ref_difference, fold_binary_loc): Likewise. * match.pd (X-X, P+(Q-P), &D-P, (P+N)-P, P-(P+N), (P+M)-(P+N), P-Q==0, -(A-B), X-Z<Y-Z, (X-Z)-(Y-Z), Z-X<Z-Y, (Z-X)-(Z-Y), (A-B)+(C-A)): New transformations for POINTER_DIFF_EXPR, based on MINUS_EXPR transformations. * optabs-tree.c (optab_for_tree_code): Handle POINTER_DIFF_EXPR. * tree-cfg.c (verify_expr, verify_gimple_assign_binary): Likewise. * tree-inline.c (estimate_operator_cost): Likewise. * tree-pretty-print.c (dump_generic_node, op_code_prio, op_symbol_code): Likewise. * tree-vect-stmts.c (vectorizable_operation): Likewise. * vr-values.c (extract_range_from_binary_expr): Likewise. * varasm.c (initializer_constant_valid_p_1): Likewise. * tree.def: New tree code POINTER_DIFF_EXPR. From-SVN: r255021
2017-11-17re PR target/82641 (Unable to enable crc32 for a certain function with ↵Tamar Christina1-0/+34
target attribute on ARM (aarch32)) 2017-11-17 Tamar Christina <tamar.christina@arm.com> PR target/82641 * config/arm/arm.c (arm_valid_target_attribute_rec): Parse "arch=" and "+<ext>". (arm_valid_target_attribute_tree): Re-init global options. (arm_option_override): Make non-static. (arm_options_perform_arch_sanity_checks): Make errors fatal. * gcc/config/arm/arm-c.c (__ARM_FEATURE_CMSE): Support undef. (__ARM_FEATURE_CRC32): Support undef. * config/arm/arm_acle.h (__ARM_FEATURE_CRC32): Replace with pragma. * doc/extend.texi (ARM Function Attributes): Add pragma and target. gcc/testsuite/ 2017-11-17 Tamar Christina <tamar.christina@arm.com> PR target/82641 * gcc.target/arm/pragma_arch_attribute.c: New. From-SVN: r254878
2017-11-17Enable building libgcc with CET options.Igor Tsimbalist1-0/+13
Enable building libgcc with CET options by default on Linux/x86 if binutils supports CET v2.0. It can be disabled with --disable-cet. It is an error to configure GCC with --enable-cet if bintuiils doesn't support CET v2.0. ENDBR instruction is added to __morestack_large_model since it is called indirectly. 2017-11-17 Igor Tsimbalist <igor.v.tsimbalist@intel.com> config/ * cet.m4: New file. gcc/ * config.gcc (extra_headers): Add cet.h for x86 targets. * config/i386/cet.h: New file. * doc/install.texi: Add --enable-cet/--disable-cet. libgcc/ * Makefile.in (configure_deps): Add $(srcdir)/../config/cet.m4. (CET_FLAGS): New. * config/i386/morestack.S: Include <cet.h>. (__morestack_large_model): Add _CET_ENDBR at function entrance. * config/i386/resms64.h: Include <cet.h>. * config/i386/resms64f.h: Likewise. * config/i386/resms64fx.h: Likewise. * config/i386/resms64x.h: Likewise. * config/i386/savms64.h: Likewise. * config/i386/savms64f.h: Likewise. * config/i386/t-linux (HOST_LIBGCC2_CFLAGS): Add $(CET_FLAGS). (CRTSTUFF_T_CFLAGS): Likewise. * configure.ac: Include ../config/cet.m4. Set and substitute CET_FLAGS. * configure: Regenerated. From-SVN: r254868
2017-11-17re PR fortran/83017 (DO CONCURRENT not parallelizing)Richard Biener1-0/+6
2017-11-17 Richard Biener <rguenther@suse.de> PR tree-optimization/83017 * tree-parloops.c (MIN_PER_THREAD): Use --param parloops-min-per-thread. (gen_parallel_loop): Properly count iterations. (parallelize_loops): Handle loop->can_be_parallel independent of flag_loop_parallelize_all. Make static profitability test match the runtime one. * params.def (PARAM_PARLOOPS_MIN_PER_THREAD): New. * invoke.texi (parloops-min-per-thread): Document. * gcc.dg/autopar/pr49960.c: Adjust. From-SVN: r254867
2017-11-17expr.c (copy_blkmode_to_reg): Fix bitsize for targets with fast unaligned ↵Tamar Christina1-0/+4
access. 2017-11-17 Tamar Christina <tamar.christina@arm.com> * expr.c (copy_blkmode_to_reg): Fix bitsize for targets with fast unaligned access. * doc/sourcebuild.texi (word_mode_no_slow_unalign): New. gcc/testsuite/ 2017-11-17 Tamar Christina <tamar.christina@arm.com> * gcc.dg/struct-simple.c: New. * lib/target-supports.exp (check_effective_target_word_mode_no_slow_unalign): New. From-SVN: r254862
2017-11-16Add -std=c18 etc. option aliases.Joseph Myers1-1/+5
ISO C17 won't go to ballot until December, meaning publication of the standard won't be until 2018, leaving ambiguity as to whether people will end up referring to the standard as C17, as it's currently known and which corresponds to the __STDC_VERSION__ value, or C18 based on the publication date. In case people end up referring to this standard as C18, this patch adds corresponding option aliases -std=c18, -std=iso9899:2018, -std=gnu18 so people can use those names based on publication date if they wish. The "expected to be" explanations in help texts and the manual can be removed as and when the standard is published, hopefully before GCC 8 is out. Bootstrapped with no regressions on x86_64-pc-linux-gnu. gcc: * doc/invoke.texi (-std=c17): Refer to 2018 expected publication date of C17. (-std=c18, -std=iso9899:2018, -std=gnu18): Document option aliases. gcc/c-family: * c.opt (-std=c17, std=gnu17, -std=iso9899:2017): Refer to 2018 expected publication date of C17. (-std=c18, -std=gnu18, -std=iso9899:2018): New option aliases. gcc/testsuite: * gcc.dg/c18-version-1.c, gcc.dg/c18-version-2.c: New tests. From-SVN: r254847
2017-11-16re PR bootstrap/82856 (--enable-maintainter-mode broken by incompatiblity of ↵Thomas Koenig1-1/+6
gcc's required automake and modern Perl) 2017-11-16 Thomas Koenig <tkoenig@gcc.gnu.org> PR bootstrap/82856 * doc/install.texi: Document incompatibility of Perl >=5.6.26 with the required version of automake 1.11.6. From-SVN: r254845
2017-11-16Set default to -fomit-frame-pointerWilco Dijkstra1-28/+13
Almost all targets add an explict -fomit-frame-pointer in the target specific options. Rather than doing this in a target-specific way, do this in the generic options so it works identically across all targets. In many cases the target no longer needs to define TARGET_OPTION_OPTIMIZATION_TABLE, reducing the amount of target code. gcc/ * opts.c (default_options_table): Add OPT_fomit_frame_pointer entry. * common/config/alpha/alpha-common.c (TARGET_OPTION_OPTIMIZATION_TABLE): Remove OPT_fomit_frame_pointer entry. * common/config/arc/arc-common.c: Likewise. * common/config/arm/arm-common.c: Likewise. * common/config/avr/avr-common.c: Likewise. * common/config/c6x/c6x-common.c: Likewise. * common/config/cr16/cr16-common.c: Likewise. * common/config/cris/cris-common.c: Likewise. * common/config/epiphany/epiphany-common.c: Likewise. * common/config/fr30/fr30-common.c: Likewise. * common/config/frv/frv-common.c: Likewise. * common/config/ia64/ia64-common.c: Likewise. * common/config/iq2000/iq2000-common.c: Likewise. * common/config/lm32/lm32-common.c: Likewise. * common/config/m32r/m32r-common.c: Likewise. * common/config/mcore/mcore-common.c: Likewise. * common/config/microblaze/microblaze-common.c: Likewise. * common/config/mips/mips-common.c: Likewise. * common/config/mmix/mmix-common.c: Likewise. * common/config/mn10300/mn10300-common.c: Likewise. * common/config/nios2/nios2-common.c: Likewise. * common/config/pa/pa-common.c: Likewise. * common/config/pdp11/pdp11-common.c: Likewise. * common/config/powerpcspe/powerpcspe-common.c: Likewise. * common/config/riscv/riscv-common.c: Likewise. * common/config/rs6000/rs6000-common.c: Likewise. * common/config/rx/rx-common.c: Likewise. * common/config/s390/s390-common.c: Likewise. * common/config/sh/sh-common.c: Likewise. * common/config/sparc/sparc-common.c: Likewise. * common/config/tilegx/tilegx-common.c: Likewise. * common/config/tilepro/tilepro-common.c: Likewise. * common/config/v850/v850-common.c: Likewise. * common/config/visium/visium-common.c: Likewise. * common/config/xstormy16/xstormy16-common.c: Likewise. * common/config/xtensa/xtensa-common.c: Likewise. doc/ * invoke.texi (-fomit-frame-pointer): Update documentation. From-SVN: r254815
2017-11-16Enable VBMI2 support [1/7]Julia Koval1-5/+11
gcc/ * common/config/i386/i386-common.c (OPTION_MASK_ISA_AVX512VBMI2_SET, OPTION_MASK_ISA_AVX512VBMI2_UNSET): New. (ix86_handle_option): Handle -mavx512vbmi2. * config/i386/cpuid.h: Add bit_AVX512VBMI2. * config/i386/driver-i386.c (host_detect_local_cpu): Handle new bit. * config/i386/i386-c.c (__AVX512VBMI2__): New. * config/i386/i386.c (ix86_target_string): Handle -mavx512vbmi2. (ix86_valid_target_attribute_inner_p): Ditto. * config/i386/i386.h (TARGET_AVX512VBMI2, TARGET_AVX512VBMI2_P): New. * config/i386/i386.opt (mavx512vbmi2): New option. * doc/invoke.texi: Add new option. From-SVN: r254796
2017-11-15arm-cpus.in (armv8_3, [...]): NewTamar Christina1-1/+1
2017-11-15 Tamar Christina <tamar.christina@arm.com> * config/arm/arm-cpus.in (armv8_3, ARMv8_3a, armv8.3-a): New * config/arm/arm-tables.opt (armv8.3-a): Regenerated. * doc/invoke.texi (ARM Options): Add armv8.3-a. From-SVN: r254776
2017-11-15Add __builtin_tgmath for better tgmath.h implementation (bug 81156).Joseph Myers1-0/+57
Various implementations of C99/C11 <tgmath.h> have the property that their macro expansions contain many copies of the macro arguments, so resulting in exponential blowup of the size of macro expansions where a call to such a macro contains other such calls in the macro arguments. This patch adds a (C-only) language feature __builtin_tgmath designed to avoid this problem by implementing the <tgmath.h> function selection rules directly in the compiler. The effect is that type-generic macros can be defined simply as #define pow(a, b) __builtin_tgmath (powf, pow, powl, \ cpowf, cpow, cpowl, a, b) as in the example added to the manual, with each macro argument expanded exactly once. The details of __builtin_tgmath are as described in the manual. This is C-only since C++ uses function overloading and just defines <ctgmath> to include <ccomplex> and <cmath>. __builtin_tgmath handles C99/C11 type-generic macros, and _FloatN, _FloatNx and decimal floating-point types (following the proposed resolution to the floating-point TS DR#9 that makes the rules for finding a common type from arguments to a type-generic macro follow the usual arithmetic conversions after adjustment of integer arguments to _Decimal64 or double - or to _Complex double in the case of GNU complex integer arguments). Type-generic macros for functions from TS 18661 that round their results to a narrower type are handled, but there are still some unresolved questions regarding such macros so further changes in that regard may be needed in future. The current implementation follows an older version of the DR#13 resolution (allowing a function for a wide-enough argument type to be selected if no exactly-matching function is available), but with appropriate calls to __builtin_tgmath is still fully compatible with the latest version of the resolution (not yet in the DR log), and allowing such not-exactly-matching argument types to be chosen in that case avoids needing another special case to treat integers as _Float64 instead of double in certain cases. Regarding other possible language/library features, not currently implemented in GCC: * Imaginary types could be naturally supported by allowing cases where the type-generic type is an imaginary type T and arguments or return types may be T (as at present), or the corresponding real type to T (as at present), or (new) the corresponding real type if T is real or imaginary but T if T is complex. (tgmath.h would need a series of functions such as static inline _Imaginary double __sin_imag (_Imaginary double __x) { return _Imaginary_I * sinh (__imag__ __x); } to be used in __builtin_tgmath calls.) * __builtin_tgmath would use the constant rounding direction in the presence of support for the FENV_ROUND / FENV_DEC_ROUND pragmas. Support for those would also require a new __builtin_<something> to cause a non-type-generic call to use the constant rounding direction (it seems cleaner to add a new __builtin_<something> when required than to make __builtin_tgmath handle a non-type-generic case with only one function argument). * TS 18661-5 __STDC_TGMATH_OPERATOR_EVALUATION__ would require new __builtin_<something> that evaluates with excess range and precision like arithmetic operators do. * The proposed C bindings for IEEE 754-2018 augmented arithmetic operations involve struct return types. As currently implemented __builtin_tgmath does not handle those, but support could be added. There are many error cases that the implementation diagnoses. I've tried to ensure reasonable error messages for erroneous uses of __builtin_tgmath, but the errors for erroneous uses of the resulting type-generic macros (that is, when the non-function arguments have inappropriate types) are more important as they are more likely to be seen by users. GCC's own tgmath.h, as used for some targets, is updated in this patch. I've tested those changes minimally, via adjusting gcc.dg/c99-tgmath-* locally to use that tgmath.h version. I've also run the glibc testsuite (which has much more thorough tests of correctness of tgmath.h function selection) with a glibc patch to use __builtin_tgmath in glibc's tgmath.h. Bootstrapped with no regressions on x86_64-pc-linux-gnu. PR c/81156 gcc: * doc/extend.texi (Other Builtins): Document __builtin_tgmath. * ginclude/tgmath.h (__tg_cplx, __tg_ldbl, __tg_dbl, __tg_choose) (__tg_choose_2, __tg_choose_3, __TGMATH_REAL_1_2) (__TGMATH_REAL_2_3): Remove macros. (__TGMATH_CPLX, __TGMATH_CPLX_2, __TGMATH_REAL, __TGMATH_REAL_2) (__TGMATH_REAL_3, __TGMATH_CPLX_ONLY): Define using __builtin_tgmath. (frexp, ldexp, nexttoward, scalbn, scalbln): Define using __TGMATH_REAL_2. (remquo): Define using __TGMATH_REAL_3. gcc/c: * c-parser.c (check_tgmath_function): New function. (enum tgmath_parm_kind): New enum. (c_parser_postfix_expression): Handle __builtin_tgmath. gcc/c-family: * c-common.c (c_common_reswords): Add __builtin_tgmath. * c-common.h (enum rid): Add RID_BUILTIN_TGMATH. gcc/testsuite: * gcc.dg/builtin-tgmath-1.c, gcc.dg/builtin-tgmath-2.c, gcc.dg/builtin-tgmath-err-1.c, gcc.dg/builtin-tgmath-err-2.c, gcc.dg/dfp/builtin-tgmath-dfp-err.c, gcc.dg/dfp/builtin-tgmath-dfp.c: New tests. From-SVN: r254749
2017-11-13Implement __VA_OPT__Tom Tromey1-10/+36
This implements __VA_OPT__, a new preprocessor feature added in C++2A. The paper can be found here: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0306r4.html gcc/ChangeLog * doc/cpp.texi (Variadic Macros): Document __VA_OPT__. gcc/testsuite/ChangeLog * c-c++-common/cpp/va-opt-pedantic.c: New file. * c-c++-common/cpp/va-opt.c: New file. * c-c++-common/cpp/va-opt-error.c: New file. libcpp/ChangeLog * pch.c (cpp_read_state): Set n__VA_OPT__. * macro.c (vaopt_state): New class. (_cpp_arguments_ok): Check va_opt flag. (replace_args, create_iso_definition): Use vaopt_state. * lex.c (lex_identifier_intern): Possibly issue errors for __VA_OPT__. (lex_identifier): Likewise. (maybe_va_opt_error): New function. * internal.h (struct lexer_state) <va_args_ok>: Update comment. (struct spec_nodes) <n__VA_OPT__>: New field. * init.c (struct lang_flags) <va_opt>: New field. (lang_defaults): Add entries for C++2A. Update all entries for va_opt. (cpp_set_lang): Initialize va_opt. * include/cpplib.h (struct cpp_options) <va_opt>: New field. * identifiers.c (_cpp_init_hashtable): Initialize n__VA_OPT__. From-SVN: r254707
2017-11-13rs6000-c.c (altivec_overloaded_builtins): Add support for builtins...Carl Love1-0/+45
gcc/ChangeLog: 2017-11-13 Carl Love <cel@us.ibm.com> * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add support for builtins: unsigned int vec_first_{,miss}_match_{,or_eos}index, vector {un,}signed {char,int,short}, vector {un,}signed {char,int,short}) arguments. * config/rs6000/rs6000-builtin.def (VFIRSTMATCHINDEX, VFIRSTMATCHOREOSINDEX, VFIRSTMISMATCHINDEX, VFIRSTMISMATCHOREOSINDEX): Add BU_P9V_AV_2 expansions for the builtins. * config/rs6000/altivec.h (vec_first_match_index, vec_first_mismatch_index, vec_first_match_or_eos_index, vec_first_mismatch_or_eos_index): Add #defines for the builtins. * config/rs6000/rs6000-protos.h (bytes_in_mode): Add new extern declaration. * config/rs6000/rs6000.c (bytes_in_mode): Add new function. * config/rs6000/vsx.md (first_match_index_<mode>, first_match_or_eos_index_<mode>, first_mismatch_index_<mode>, first_mismatch_or_eos_index_<mode>): Add define expand. (vctzlsbb_<mode>): Add mode field to define_insn for vctzlsbb. * doc/extend.texi: Update the built-in documenation file for the new built-in functions. gcc/testsuite/ChangeLog: 2017-11-13 Carl Love <cel@us.ibm.com> * gcc.target/powerpc/builtins-6-p9-runnable.c: Add new runnable test. * gcc.target/powerpc/vsu/vec-cnttz-lsbb-2.c: Update expected error message. From-SVN: r254704
2017-11-13[Documentation] Fix latency in pipeline description exampleLuis Machado1-2/+2
2017-11-09 Luis Machado <luis.machado@linaro.org> gcc/ * doc/md.texi (Specifying processor pipeline description): Fix incorrect latency for the div instruction example. From-SVN: r254680
2017-11-11re PR c/81117 (Improve buffer overflow checking in strncpy)Martin Sebor1-1/+1
gcc/ChangeLog: PR c/81117 * doc/extend.texi (attribute nonstring): Remove spurious argument. From-SVN: r254659