1. 03 Jan, 2018 2 commits
    • poly_int: TYPE_VECTOR_SUBPARTS · 928686b1
      This patch changes TYPE_VECTOR_SUBPARTS to a poly_uint64.  The value is
      encoded in the 10-bit precision field and was previously always stored
      as a simple log2 value.  The challenge was to use this 10 bits to
      encode the number of elements in variable-length vectors, so that
      we didn't need to increase the size of the tree.
      
      In practice the number of vector elements should always have the form
      N + N * X (where X is the runtime value), and as for constant-length
      vectors, N must be a power of 2 (even though X itself might not be).
      The patch therefore uses the low 8 bits to encode log2(N) and bit
      8 to select between constant-length and variable-length vectors.
      Targets without variable-length vectors continue to use the old scheme.
      
      A new valid_vector_subparts_p function tests whether a given number
      of elements can be encoded.  This is false for the vector modes that
      represent an LD3 or ST3 vector triple (which we want to treat as arrays
      of vectors rather than single vectors).
      
      Most of the patch is mechanical; previous patches handled the changes
      that weren't entirely straightforward.
      
      2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree.h (TYPE_VECTOR_SUBPARTS): Turn into a function and handle
      	polynomial numbers of units.
      	(SET_TYPE_VECTOR_SUBPARTS): Likewise.
      	(valid_vector_subparts_p): New function.
      	(build_vector_type): Remove temporary shim and take the number
      	of units as a poly_uint64 rather than an int.
      	(build_opaque_vector_type): Take the number of units as a
      	poly_uint64 rather than an int.
      	* tree.c (build_vector_from_ctor): Handle polynomial
      	TYPE_VECTOR_SUBPARTS.
      	(type_hash_canon_hash, type_cache_hasher::equal): Likewise.
      	(uniform_vector_p, vector_type_mode, build_vector): Likewise.
      	(build_vector_from_val): If the number of units is variable,
      	use build_vec_duplicate_cst for constant operands and
      	VEC_DUPLICATE_EXPR otherwise.
      	(make_vector_type): Remove temporary is_constant ().
      	(build_vector_type, build_opaque_vector_type): Take the number of
      	units as a poly_uint64 rather than an int.
      	(check_vector_cst): Handle polynomial TYPE_VECTOR_SUBPARTS and
      	VECTOR_CST_NELTS.
      	* cfgexpand.c (expand_debug_expr): Likewise.
      	* expr.c (count_type_elements, categorize_ctor_elements_1): Likewise.
      	(store_constructor, expand_expr_real_1): Likewise.
      	(const_scalar_mask_from_tree): Likewise.
      	* fold-const-call.c (fold_const_reduction): Likewise.
      	* fold-const.c (const_binop, const_unop, fold_convert_const): Likewise.
      	(operand_equal_p, fold_vec_perm, fold_ternary_loc): Likewise.
      	(native_encode_vector, vec_cst_ctor_to_array): Likewise.
      	(fold_relational_const): Likewise.
      	(native_interpret_vector): Likewise.  Change the size from an
      	int to an unsigned int.
      	* gimple-fold.c (gimple_fold_stmt_to_constant_1): Handle polynomial
      	TYPE_VECTOR_SUBPARTS.
      	(gimple_fold_indirect_ref, gimple_build_vector): Likewise.
      	(gimple_build_vector_from_val): Use VEC_DUPLICATE_EXPR when
      	duplicating a non-constant operand into a variable-length vector.
      	* hsa-brig.c (hsa_op_immed::emit_to_buffer): Handle polynomial
      	TYPE_VECTOR_SUBPARTS and VECTOR_CST_NELTS.
      	* ipa-icf.c (sem_variable::equals): Likewise.
      	* match.pd: Likewise.
      	* omp-simd-clone.c (simd_clone_subparts): Likewise.
      	* print-tree.c (print_node): Likewise.
      	* stor-layout.c (layout_type): Likewise.
      	* targhooks.c (default_builtin_vectorization_cost): Likewise.
      	* tree-cfg.c (verify_gimple_comparison): Likewise.
      	(verify_gimple_assign_binary): Likewise.
      	(verify_gimple_assign_ternary): Likewise.
      	(verify_gimple_assign_single): Likewise.
      	* tree-pretty-print.c (dump_generic_node): Likewise.
      	* tree-ssa-forwprop.c (simplify_vector_constructor): Likewise.
      	(simplify_bitfield_ref, is_combined_permutation_identity): Likewise.
      	* tree-vect-data-refs.c (vect_permute_store_chain): Likewise.
      	(vect_grouped_load_supported, vect_permute_load_chain): Likewise.
      	(vect_shift_permute_load_chain): Likewise.
      	* tree-vect-generic.c (nunits_for_known_piecewise_op): Likewise.
      	(expand_vector_condition, optimize_vector_constructor): Likewise.
      	(lower_vec_perm, get_compute_type): Likewise.
      	* tree-vect-loop.c (vect_determine_vectorization_factor): Likewise.
      	(get_initial_defs_for_reduction, vect_transform_loop): Likewise.
      	* tree-vect-patterns.c (vect_recog_bool_pattern): Likewise.
      	(vect_recog_mask_conversion_pattern): Likewise.
      	* tree-vect-slp.c (vect_supported_load_permutation_p): Likewise.
      	(vect_get_constant_vectors, vect_transform_slp_perm_load): Likewise.
      	* tree-vect-stmts.c (perm_mask_for_reverse): Likewise.
      	(get_group_load_store_type, vectorizable_mask_load_store): Likewise.
      	(vectorizable_bswap, simd_clone_subparts, vectorizable_assignment)
      	(vectorizable_shift, vectorizable_operation, vectorizable_store)
      	(vectorizable_load, vect_is_simple_cond, vectorizable_comparison)
      	(supportable_widening_operation): Likewise.
      	(supportable_narrowing_operation): Likewise.
      	* tree-vector-builder.c (tree_vector_builder::binary_encoded_nelts):
      	Likewise.
      	* varasm.c (output_constant): Likewise.
      
      gcc/ada/
      	* gcc-interface/utils.c (gnat_types_compatible_p): Handle
      	polynomial TYPE_VECTOR_SUBPARTS.
      
      gcc/brig/
      	* brigfrontend/brig-to-generic.cc (get_unsigned_int_type): Handle
      	polynomial TYPE_VECTOR_SUBPARTS.
      	* brigfrontend/brig-util.h (gccbrig_type_vector_subparts): Likewise.
      
      gcc/c-family/
      	* c-common.c (vector_types_convertible_p, c_build_vec_perm_expr)
      	(convert_vector_to_array_for_subscript): Handle polynomial
      	TYPE_VECTOR_SUBPARTS.
      	(c_common_type_for_mode): Check valid_vector_subparts_p.
      	* c-pretty-print.c (pp_c_initializer_list): Handle polynomial
      	VECTOR_CST_NELTS.
      
      gcc/c/
      	* c-typeck.c (comptypes_internal, build_binary_op): Handle polynomial
      	TYPE_VECTOR_SUBPARTS.
      
      gcc/cp/
      	* constexpr.c (cxx_eval_array_reference): Handle polynomial
      	VECTOR_CST_NELTS.
      	(cxx_fold_indirect_ref): Handle polynomial TYPE_VECTOR_SUBPARTS.
      	* call.c (build_conditional_expr_1): Likewise.
      	* decl.c (cp_finish_decomp): Likewise.
      	* mangle.c (write_type): Likewise.
      	* typeck.c (structural_comptypes): Likewise.
      	(cp_build_binary_op): Likewise.
      	* typeck2.c (process_init_constructor_array): Likewise.
      
      gcc/fortran/
      	* trans-types.c (gfc_type_for_mode): Check valid_vector_subparts_p.
      
      gcc/lto/
      	* lto-lang.c (lto_type_for_mode): Check valid_vector_subparts_p.
      	* lto.c (hash_canonical_type): Handle polynomial TYPE_VECTOR_SUBPARTS.
      
      gcc/go/
      	* go-lang.c (go_langhook_type_for_mode): Check valid_vector_subparts_p.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r256197
      Richard Sandiford committed
    • Update copyright years. · 85ec4feb
      From-SVN: r256169
      Jakub Jelinek committed
  2. 31 Dec, 2017 1 commit
  3. 28 Dec, 2017 1 commit
    • builtins.def: (_Float<N> and _Float<N>X BUILT_IN_CEIL): Add _Float<N> and _Float<N>X variants... · c6cfa2bf
      [gcc]
      2017-12-28  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	* builtins.def: (_Float<N> and _Float<N>X BUILT_IN_CEIL): Add
      	_Float<N> and _Float<N>X variants for rounding built-in
      	functions.
      	(_Float<N> and _Float<N>X BUILT_IN_FLOOR): Likewise.
      	(_Float<N> and _Float<N>X BUILT_IN_NEARBYINT): Likewise.
      	(_Float<N> and _Float<N>X BUILT_IN_RINT): Likewise.
      	(_Float<N> and _Float<N>X BUILT_IN_ROUND): Likewise.
      	(_Float<N> and _Float<N>X BUILT_IN_TRUNC): Likewise.
      	* builtins.c (mathfn_built_in_2): Likewise.
      	* internal-fn.def (CEIL): Likewise.
      	(FLOOR): Likewise.
      	(NEARBYINT): Likewise.
      	(RINT): Likewise.
      	(ROUND): Likewise.
      	(TRUNC): Likewise.
      	* convert.c (convert_to_integer_1): Likewise.
      	* fold-const.c (tree_call_nonnegative_warnv_p): Likewise.
      	(integer_valued_real_call_p): Likewise.
      	* fold-const-call.c (fold_const_call_ss): Likewise.
      	* gencfn-macros.c (print_case_cfn): Change CFN and operator
      	printers to take a const char * suffix instead of a bool.
      	(print_define_operator_list): Likewise.
      	(fltall_suffixes): New list of suffixes, that include the
      	traditional suffixes as well as all of the _Float<N> and
      	_Float<N>X suffixes.
      	(main): For _Float<N> and _Float<N>X functions, emit both
      	<name>_FN and <name>_ALL variants.  The <macro>_FN variant only
      	has the _Float<N> and _Float<N>X case names or operators.  The
      	<name>_ALL variant has both the traditional and the
      	_Float<N>/_Float<N>X case names or operators.
      	* match.pd (COPYSIGN optimizations): Provide optimizations for
      	_Float<N> and _Float<N>X types where possible.
      	(MIN/MAX optimizations): Likewise.
      	(sqrt optimizations): Likewise.
      	(rounding optimizations): Likewise.
      
      [gcc/c]
      2017-12-28  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	* c-decl.c (header_for_builtin_fn): Add integer rounding _Float<N>
      	and _Float<N>X built-in functions.
      
      From-SVN: r256026
      Michael Meissner committed
  4. 22 Dec, 2017 3 commits
    • re PR debug/83550 (Bad location of DW_TAG_structure_type with forward declaration since r224161) · 14ec014e
      	PR debug/83550
      	* c-decl.c (finish_struct): Set DECL_SOURCE_LOCATION on
      	TYPE_STUB_DECL and call rest_of_type_compilation before processing
      	incomplete vars rather than after it.
      
      	* c-c++-common/dwarf2/pr83550.c: New test.
      
      From-SVN: r255981
      Jakub Jelinek committed
    • re PR debug/83547 ((statement-frontiers) error: void value not ignored as it ought to be) · 11d29d63
      	PR debug/83547
      	* tree-iterator.c (alloc_stmt_list): Start with cleared
      	TREE_SIDE_EFFECTS regardless whether a new STATEMENT_LIST is allocated
      	or old one reused.
      c/
      	* c-typeck.c (c_finish_stmt_expr): Ignore !TREE_SIDE_EFFECTS as
      	indicator of ({ }), instead skip all trailing DEBUG_BEGIN_STMTs first,
      	and consider empty ones if there are no other stmts.  For
      	-Wunused-value walk all statements before the one only followed by
      	DEBUG_BEGIN_STMTs.
      testsuite/
      	* gcc.c-torture/compile/pr83547.c: New test.
      
      From-SVN: r255980
      Jakub Jelinek committed
    • extend.texi (Loop-Specific Pragmas): Document pragma GCC unroll. · 170a8bd6
      	* doc/extend.texi (Loop-Specific Pragmas): Document pragma GCC unroll.
      c-family/
      	* c-pragma.c (init_pragma): Register pragma GCC unroll.
      	* c-pragma.h (enum pragma_kind): Add PRAGMA_UNROLL.
      c/
      	* c-parser.c (c_parser_while_statement): Add unroll parameter and
      	build ANNOTATE_EXPR if present.  Add 3rd operand to ANNOTATE_EXPR.
      	(c_parser_do_statement): Likewise.
      	(c_parser_for_statement): Likewise.
      	(c_parser_statement_after_labels): Adjust calls to above.
      	(c_parse_pragma_ivdep): New static function.
      	(c_parser_pragma_unroll): Likewise.
      	(c_parser_pragma) <PRAGMA_IVDEP>: Add support for pragma Unroll.
      	<PRAGMA_UNROLL>: New case.
      cp/
      	* constexpr.c (cxx_eval_constant_expression) <ANNOTATE_EXPR>: Remove
      	assertion on 2nd operand.
      	(potential_constant_expression_1): Likewise.
      	* cp-tree.def (RANGE_FOR_STMT): Take a 5th operand.
      	* cp-tree.h (RANGE_FOR_UNROLL): New macro.
      	(cp_convert_range_for): Adjust prototype.
      	(finish_while_stmt_cond): Likewise.
      	(finish_do_stmt): Likewise.
      	(finish_for_cond): Likewise.
      	* init.c (build_vec_init): Adjut call to finish_for_cond.
      	* parser.c (cp_parser_statement): Adjust call to
      	cp_parser_iteration_statement.
      	(cp_parser_for): Add unroll parameter and pass it in calls to
      	cp_parser_range_for and cp_parser_c_for.
      	(cp_parser_c_for): Add unroll parameter and pass it in call to
      	finish_for_cond.
      	(cp_parser_range_for): Add unroll parameter, set in on RANGE_FOR_STMT
      	and pass it in call to cp_convert_range_for.
      	(cp_convert_range_for): Add unroll parameter and pass it in call to
      	finish_for_cond.
      	(cp_parser_iteration_statement): Add unroll parameter and pass it in
      	calls to finish_while_stmt_cond, finish_do_stmt and cp_parser_for.
      	(cp_parser_pragma_ivdep): New static function.
      	(cp_parser_pragma_unroll): Likewise.
      	(cp_parser_pragma) <PRAGMA_IVDEP>: Add support for pragma Unroll.
      	<PRAGMA_UNROLL>: New case.
      	* pt.c (tsubst_expr) <FOR_STMT>: Adjust call to finish_for_cond.
      	<RANGE_FOR_STMT>: Pass unrolling factor to cp_convert_range_for.
      	<WHILE_STMT>: Adjust call to finish_while_stmt_cond.
      	<DO_STMT>: Adjust call to finish_do_stmt.
      	* semantics.c (finish_while_stmt_cond): Add unroll parameter and
      	build ANNOTATE_EXPR if present.
      	(finish_do_stmt): Likewise.
      	(finish_for_cond): Likewise.
      	(begin_range_for_stmt): Build RANGE_FOR_STMT with 5th operand.
      fortran/
      	* array.c (gfc_copy_iterator): Copy unroll field.
      	* decl.c (directive_unroll): New global variable.
      	(gfc_match_gcc_unroll): New function.
      	* gfortran.h (gfc_iterator]): Add unroll field.
      	(directive_unroll): Declare:
      	* match.c (gfc_match_do): Use memset to initialize the iterator.
      	* match.h (gfc_match_gcc_unroll): New prototype.
      	* parse.c (decode_gcc_attribute): Match "unroll".
      	(parse_do_block): Set iterator's unroll.
      	(parse_executable): Diagnose misplaced unroll directive.
      	* trans-stmt.c (gfc_trans_simple_do) Annotate loop condition with
      	annot_expr_unroll_kind.
      	(gfc_trans_do): Likewise.
      	* gfortran.texi (GNU Fortran Compiler Directives): Split section into
      	subections 'ATTRIBUTES directive' and 'UNROLL directive'.
      
      From-SVN: r255973
      Eric Botcazou committed
  5. 19 Dec, 2017 1 commit
    • read-rtl.c (parse_reg_note_name): Replace Yoda conditions with typical order conditions. · 01512446
      	* read-rtl.c (parse_reg_note_name): Replace Yoda conditions with
      	typical order conditions.
      	* sel-sched.c (extract_new_fences_from): Likewise.
      	* config/visium/constraints.md (J, K, L): Likewise.
      	* config/visium/predicates.md (const_shift_operand): Likewise.
      	* config/visium/visium.c (visium_legitimize_address,
      	visium_legitimize_reload_address): Likewise.
      	* config/m68k/m68k.c (output_reg_adjust, emit_reg_adjust): Likewise.
      	* config/arm/arm.c (arm_block_move_unaligned_straight): Likewise.
      	* config/avr/constraints.md (Y01, Ym1, Y02, Ym2): Likewise.
      	* config/avr/avr-log.c (avr_vdump, avr_log_set_avr_log,
      	SET_DUMP_DETAIL): Likewise.
      	* config/avr/predicates.md (const_8_16_24_operand): Likewise.
      	* config/avr/avr.c (STR_PREFIX_P, avr_popcount_each_byte,
      	avr_is_casesi_sequence, avr_casei_sequence_check_operands,
      	avr_set_core_architecture, avr_set_current_function,
      	avr_legitimize_reload_address, avr_asm_len, avr_print_operand,
      	output_movqi, output_movsisf, avr_out_plus, avr_out_bitop,
      	avr_out_fract, avr_adjust_insn_length, avr_encode_section_info,
      	avr_2word_insn_p, output_reload_in_const, avr_has_nibble_0xf,
      	avr_map_decompose, avr_fold_builtin): Likewise.
      	* config/avr/driver-avr.c (avr_devicespecs_file): Likewise.
      	* config/avr/gen-avr-mmcu-specs.c (str_prefix_p, print_mcu): Likewise.
      	* config/i386/i386.c (ix86_parse_stringop_strategy_string): Likewise.
      	* config/m32c/m32c-pragma.c (m32c_pragma_memregs): Likewise.
      	* config/m32c/m32c.c (m32c_conditional_register_usage,
      	m32c_address_cost): Likewise.
      	* config/m32c/predicates.md (shiftcount_operand,
      	longshiftcount_operand): Likewise.
      	* config/iq2000/iq2000.c (iq2000_expand_prologue): Likewise.
      	* config/nios2/nios2.c (nios2_handle_custom_fpu_insn_option,
      	can_use_cdx_ldstw): Likewise.
      	* config/nios2/nios2.h (CDX_REG_P): Likewise.
      	* config/cr16/cr16.h (RETURN_ADDR_RTX, REGNO_MODE_OK_FOR_BASE_P):
      	Likewise.
      	* config/cr16/cr16.md (*mov<mode>_double): Likewise.
      	* config/cr16/cr16.c (cr16_create_dwarf_for_multi_push): Likewise.
      	* config/h8300/h8300.c (h8300_rtx_costs, get_shift_alg): Likewise.
      	* config/vax/constraints.md (U06, U08, U16, CN6, S08, S16): Likewise.
      	* config/vax/vax.c (adjacent_operands_p): Likewise.
      	* config/ft32/constraints.md (L, b, KA): Likewise.
      	* config/ft32/ft32.c (ft32_load_immediate, ft32_expand_prologue):
      	Likewise.
      	* cfgexpand.c (expand_stack_alignment): Likewise.
      	* gcse.c (insert_expr_in_table): Likewise.
      	* print-rtl.c (rtx_writer::print_rtx_operand_codes_E_and_V): Likewise.
      	* cgraphunit.c (cgraph_node::expand): Likewise.
      	* ira-build.c (setup_min_max_allocno_live_range_point): Likewise.
      	* emit-rtl.c (add_insn): Likewise.
      	* input.c (dump_location_info): Likewise.
      	* passes.c (NEXT_PASS): Likewise.
      	* read-rtl-function.c (parse_note_insn_name,
      	function_reader::read_rtx_operand_r, function_reader::parse_mem_expr):
      	Likewise.
      	* sched-rgn.c (sched_rgn_init): Likewise.
      	* diagnostic-show-locus.c (layout::show_ruler): Likewise.
      	* combine.c (find_split_point, simplify_if_then_else, force_to_mode,
      	if_then_else_cond, simplify_shift_const_1, simplify_comparison): Likewise.
      	* explow.c (eliminate_constant_term): Likewise.
      	* final.c (leaf_renumber_regs_insn): Likewise.
      	* cfgrtl.c (print_rtl_with_bb): Likewise.
      	* genhooks.c (emit_init_macros): Likewise.
      	* poly-int.h (maybe_ne, maybe_le, maybe_lt): Likewise.
      	* tree-data-ref.c (conflict_fn): Likewise.
      	* selftest.c (assert_streq): Likewise.
      	* expr.c (store_constructor_field, expand_expr_real_1): Likewise.
      	* fold-const.c (fold_range_test, extract_muldiv_1, fold_truth_andor,
      	fold_binary_loc, multiple_of_p): Likewise.
      	* reload.c (push_reload, find_equiv_reg): Likewise.
      	* et-forest.c (et_nca, et_below): Likewise.
      	* dbxout.c (dbxout_symbol_location): Likewise.
      	* reorg.c (relax_delay_slots): Likewise.
      	* dojump.c (do_compare_rtx_and_jump): Likewise.
      	* gengtype-parse.c (type): Likewise.
      	* simplify-rtx.c (simplify_gen_ternary, simplify_gen_relational,
      	simplify_const_relational_operation): Likewise.
      	* reload1.c (do_output_reload): Likewise.
      	* dumpfile.c (get_dump_file_info_by_switch): Likewise.
      	* gengtype.c (type_for_name): Likewise.
      	* gimple-ssa-sprintf.c (format_directive): Likewise.
      ada/
      	* gcc-interface/trans.c (Loop_Statement_to_gnu): Replace Yoda
      	conditions with typical order conditions.
      	* gcc-interface/misc.c (gnat_get_array_descr_info,
      	default_pass_by_ref): Likewise.
      	* gcc-interface/decl.c (gnat_to_gnu_entity): Likewise.
      	* adaint.c (__gnat_tmp_name): Likewise.
      c-family/
      	* known-headers.cc (get_stdlib_header_for_name): Replace Yoda
      	conditions with typical order conditions.
      c/
      	* c-typeck.c (comptypes_internal, function_types_compatible_p,
      	perform_integral_promotions, digest_init): Replace Yoda conditions
      	with typical order conditions.
      	* c-decl.c (check_bitfield_type_and_width): Likewise.
      cp/
      	* name-lookup.c (get_std_name_hint): Replace Yoda conditions with
      	typical order conditions.
      	* class.c (check_bitfield_decl): Likewise.
      	* pt.c (convert_template_argument): Likewise.
      	* decl.c (duplicate_decls): Likewise.
      	* typeck.c (commonparms): Likewise.
      fortran/
      	* scanner.c (preprocessor_line): Replace Yoda conditions with typical
      	order conditions.
      	* dependency.c (check_section_vs_section): Likewise.
      	* trans-array.c (gfc_conv_expr_descriptor): Likewise.
      jit/
      	* jit-playback.c (get_type, playback::compile_to_file::copy_file,
      	playback::context::acquire_mutex): Replace Yoda conditions with
      	typical order conditions.
      	* libgccjit.c (gcc_jit_context_new_struct_type,
      	gcc_jit_struct_set_fields, gcc_jit_context_new_union_type,
      	gcc_jit_context_new_function, gcc_jit_timer_pop): Likewise.
      	* jit-builtins.c (matches_builtin): Likewise.
      	* jit-recording.c (recording::compound_type::set_fields,
      	recording::fields::write_reproducer, recording::rvalue::set_scope,
      	recording::function::validate): Likewise.
      	* jit-logging.c (logger::decref): Likewise.
      
      From-SVN: r255831
      Jakub Jelinek committed
  6. 14 Dec, 2017 2 commits
    • invoke.texi: Document -Wcast-function-type. · c65e18d3
      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
      Bernd Edlinger committed
    • re PR middle-end/83415 (ICE during gimplification of assignment to read-only vector) · b7280579
      2017-12-14  Richard Biener  <rguenther@suse.de>
      
      	PR c/83415
      	c/
      	* c-fold.c (c_fully_fold_internal): Treat VIEW_CONVERT_EXPR
      	like REALPART_EXPR for the behavior of whether its operand
      	is an lvalue.
      
      	* gcc.dg/pr83415.c: New testcase.
      
      From-SVN: r255629
      Richard Biener committed
  7. 12 Dec, 2017 2 commits
    • re PR c/82679 (Uses of typedefs of arrays of _Atomic-qualified types are rejected) · 49e6a6c0
      	PR c/82679
      	* c-decl.c (grokdeclarator): Check declspecs insted of atomicp.
      
      	* gcc.dg/c11-atomic-5.c: New test.
      
      From-SVN: r255577
      Marek Polacek committed
    • [SFN] introduce statement frontier notes, still disabled · 96a95ac1
      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
      Alexandre Oliva committed
  8. 07 Dec, 2017 2 commits
    • Allow _Alignas in compound literals (C11 DR#444). · 4b2b493f
      C11 DR#444 dealt with how C11 intended to allow alignment specifiers
      on struct and union members, but failed to include that in the syntax.
      The final resolution of that DR also allows alignment specifiers in
      type names in compound literals (in order to apply an increased
      alignment to the unnamed object created by the compound literal), but
      not other cases of type names.
      
      This patch implements allowing alignment specifiers in compound
      literals and adds tests for the resolution of the DR (including that
      they are allowed on struct and union members, which GCC already
      implemented).  Because the parser has to parse the parenthesized type
      name of a compound literal before it can tell that it's a compound
      literal (rather than, depending on the context, a cast expression or
      sizeof (type-name) or _Alignof (type-name)), this means _Alignas
      specifiers are allowed syntactically in those contexts and then an
      error is given once it's known to be an invalid use (whereas _Alignas
      specifiers are disallowed syntactically in other contexts where type
      names can occur and a compound literal is not possible).
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.
      
      gcc/c:
      	* c-decl.c (build_compound_literal): Add parameter alignas_align
      	and set alignment of decl if nonzero.
      	* c-parser.c (c_keyword_starts_typename): Allow RID_ALIGNAS.
      	(c_parser_declspecs): Allow RID_ALIGNAS to follow a type, like a
      	qualifier.
      	(c_parser_struct_declaration): Update syntax comment.
      	(c_parser_type_name): Add alignas_ok argument and pass it to
      	c_parser_declspecs.
      	(c_parser_cast_expression): Pass true to c_parser_type_name and
      	give error if a cast used an _Alignas specifier.
      	(c_parser_sizeof_expression): Pass true to c_parser_type_name and
      	give error if sizeof (type-name) used an _Alignas specifier.
      	(c_parser_alignof_expression): Pass true to c_parser_type_name and
      	give error if _Alignof (type-name) used an _Alignas specifier.
      	(c_parser_postfix_expression_after_paren_type): Check specified
      	alignment for a compound literal and pass it to
      	build_compound_literal.
      	* c-parser.h (c_parser_type_name): Update prototype.
      	* c-tree.h (build_compound_literal): Update prototype.
      
      gcc/testsuite:
      	* gcc.dg/c11-align-7.c, gcc.dg/c11-align-8.c,
      	gcc.dg/c11-align-9.c, gcc.dg/gnu11-align-1.c: New tests.
      	* gcc.dg/c11-align-5.c (test): Update expected error for sizeof
      	case.
      
      From-SVN: r255482
      Joseph Myers committed
    • PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted · 5d9ae53d
      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
      Martin Sebor committed
  9. 06 Dec, 2017 2 commits
    • C/C++: don't suggest implementation names as spelling fixes (PR c/83236) · c79144f8
      gcc/c-family/ChangeLog:
      	PR c/83236
      	* c-common.c (selftest::c_family_tests): Call
      	selftest::c_spellcheck_cc_tests.
      	* c-common.h (selftest::c_spellcheck_cc_tests): New decl.
      	* c-spellcheck.cc: Include "selftest.h".
      	(name_reserved_for_implementation_p): New function.
      	(should_suggest_as_macro_p): New function.
      	(find_closest_macro_cpp_cb): Move the check for NT_MACRO to
      	should_suggest_as_macro_p and call it.
      	(selftest::test_name_reserved_for_implementation_p): New function.
      	(selftest::c_spellcheck_cc_tests): New function.
      	* c-spellcheck.h (name_reserved_for_implementation_p): New decl.
      
      gcc/c/ChangeLog:
      	PR c/83236
      	* c-decl.c (lookup_name_fuzzy): Don't suggest names that are
      	reserved for use by the implementation.
      
      gcc/cp/ChangeLog:
      	PR c/83236
      	* name-lookup.c (consider_binding_level): Don't suggest names that
      	are reserved for use by the implementation.
      
      gcc/testsuite/ChangeLog:
      	PR c/83236
      	* c-c++-common/spellcheck-reserved.c: New test case.
      
      From-SVN: r255453
      David Malcolm committed
    • Move macro-spellchecking code from "gcc" to new files in c-family · 613bc14f
      The code for spellchecking macros really belongs in c-family, rather
      than in gcc/spellcheck-tree.c, so this patch moves it there.
      
      gcc/ChangeLog:
      	* Makefile.in (C_COMMON_OBJS): Add c-family/c-spellcheck.o.
      	* spellcheck-tree.c (find_closest_macro_cpp_cb): Move to
      	c-family/c-spellcheck.cc.
      	(best_macro_match::best_macro_match): Likewise.
      	* spellcheck-tree.h
      	(struct edit_distance_traits<cpp_hashnode *>): Move to
      	c-family/c-spellcheck.h.
      	(class best_macro_match): Likewise.
      
      gcc/c-family/ChangeLog:
      	* c-spellcheck.cc: New file, taken from macro-handling code in
      	spellcheck-tree.c.
      	* c-spellcheck.h: New file, taken from macro-handling code in
      	spellcheck-tree.h.
      
      gcc/c/ChangeLog:
      	* c-decl.c: Include "c-family/c-spellcheck.h".
      
      gcc/cp/ChangeLog:
      	* name-lookup.c: Include "c-family/c-spellcheck.h".
      
      From-SVN: r255452
      David Malcolm committed
  10. 05 Dec, 2017 1 commit
    • invoke.texi: Document the options. · 05abad4c
      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
      Martin Liska committed
  11. 01 Dec, 2017 1 commit
    • re PR c/79153 (-Wimplicit-fallthrough missed warning) · 65791f42
      	PR c/79153
      	* tree.h (SWITCH_BREAK_LABEL_P): Define.
      	* gimplify.c (collect_fallthrough_labels): Handle GIMPLE_BIND
      	starting with a GIMPLE_SWITCH and ending with GIMPLE_LABEL with
      	SWITCH_BREAK_LABEL_P set on the label.
      	(gimplify_switch_expr): Set SWITCH_BREAK_LABEL_P on the label
      	added for default case if it was missing and not all cases covered.
      	Wrap GIMPLE_SWITCH and the switch_body_seq into a GIMPLE_BIND if
      	switch_body_seq ends with a GIMPLE_LABEL with SWITCH_BREAK_LABEL_P
      	set on the label.
      	* tree-chrec.c (evolution_function_is_univariate_p): Add return true;
      	to avoid -Wimplicit-fallthrough warning.
      	* config/i386/i386.c (ix86_expand_special_args_builtin): Add
      	FALLTHRU comment to avoid -Wimplicit-fallthrough warning.
      c/
      	* c-parser.c: Include tree-iterator.h.
      	(c_parser_switch_statement): Emit LABEL_EXPR for the break label
      	into SWITCH_BODY instead of after it and set SWITCH_BREAK_LABEL_P
      	on it.
      cp/
      	* cp-gimplify.c (genericize_switch_stmt): Emit LABEL_EXPR for the
      	break label into SWITCH_BODY instead of after it and set
      	SWITCH_BREAK_LABEL_P on it.
      	* parser.c (cp_parser_objc_expression): Add FALLTHRU comment to avoid
      	-Wimplicit-fallthrough warning.
      fortran/
      	* match.c (gfc_match): Add FALLTHRU comment to avoid
      	-Wimplicit-fallthrough warning.
      testsuite/
      	* c-c++-common/Wimplicit-fallthrough-7.c: Adjust expected warning
      	line.
      	* c-c++-common/Wimplicit-fallthrough-36.c: New test.
      
      From-SVN: r255298
      Jakub Jelinek committed
  12. 30 Nov, 2017 2 commits
    • re PR c/83222 (Inconsistent "initializer element is not constant" error) · cc6534d4
      	PR c/83222
      	* c-tree.h (decl_constant_value_1): Declare.
      	* c-typeck.c (decl_constant_value_1): New function.
      	(decl_constant_value): Use it.
      	* c-fold.c (c_fully_fold_internal): If in_init, use
      	decl_constant_value_1 instead of decl_constant_value.
      
      	* gcc.c-torture/compile/pr83222.c: New test.
      
      From-SVN: r255285
      Jakub Jelinek committed
    • spellcheck-tree.c (test_find_closest_identifier): Use ; instead of ;;. · 5de73c05
      	* spellcheck-tree.c (test_find_closest_identifier): Use ; instead
      	of ;;.
      	* gengtype-state.c (read_state_pair): Likewise.
      	* gimple-fold.c (gimple_fold_builtin_string_compare): Likewise.
      	* sel-sched-dump.c (dump_insn_rtx_1): Likewise.
      	* ipa-cp.c (intersect_aggregates_with_edge): Likewise.
      	* ifcvt.c (noce_try_store_flag_constants): Likewise.
      	* tree-ssa-ccp.c (ccp_finalize): Likewise.
      	* omp-grid.c (grid_process_kernel_body_copy): Likewise.
      	* builtins.c (fold_builtin_3): Likewise.
      	* graphite-scop-detection.c
      	(scop_detection::stmt_has_simple_data_refs_p): Likewise.
      	* hsa-gen.c (hsa_function_representation::hsa_function_representation):
      	Likewise.
      c/
      	* c-parser.c (c_parser_postfix_expression): Use ; instead of ;;.
      jit/
      	* jit-recording.c
      	(recording::memento_of_new_rvalue_from_const <long>::write_reproducer):
      	Use ; instead of ;;.
      lto/
      	* lto.c (create_subid_section_table): Use ; instead of ;;.
      objc/
      	* objc-next-runtime-abi-01.c (generate_dispatch_table): Use ; instead
      	of ;;.
      
      From-SVN: r255284
      Jakub Jelinek committed
  13. 28 Nov, 2017 3 commits
    • re PR sanitizer/81275 (-fsanitize=thread produce incorrect -Wreturn-type warning) · 058f0b9e
      	PR sanitizer/81275
      	* tree.c (block_may_fallthru): Return false if SWITCH_ALL_CASES_P
      	is set on SWITCH_EXPR and !block_may_fallthru (SWITCH_BODY ()).
      c/
      	* c-typeck.c (c_finish_case): Set SWITCH_ALL_CASES_P if
      	c_switch_covers_all_cases_p returns true.
      c-family/
      	* c-common.c (c_switch_covers_all_cases_p_1,
      	c_switch_covers_all_cases_p): New functions.
      	* c-common.h (c_switch_covers_all_cases_p): Declare.
      testsuite/
      	* c-c++-common/tsan/pr81275.c: New test.
      
      From-SVN: r255217
      Jakub Jelinek committed
    • Remove Cilk Plus support. · 5e9d6aa4
      	* 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
      Julia Koval committed
    • tree.def (SWITCH_EXPR): Change from 3 operand to 2 operand tree. · 9e851845
      	* tree.def (SWITCH_EXPR): Change from 3 operand to 2 operand tree.
      	Adjust comment.
      	* tree.h (SWITCH_LABELS): Remove.
      	* gimplify.c (gimplify_switch_expr): Don't test SWITCH_LABELS,
      	assert SWITCH_BODY is non-NULL.
      	* tree-pretty-print.c (dump_generic_node): Remove SWITCH_LABELS
      	handling.
      	* tree.c (block_may_fallthru): Always return true; for SWITCH_EXPR.
      c/
      	* c-typeck.c (c_start_case): Build SWITCH_EXPR using build2 instead
      	of build3.
      cp/
      	* cp-gimplify.c (genericize_switch_stmt): Build SWITCH_EXPR using
      	build2_loc instead of build3_loc.
      ada/
      	* gcc-interface/trans.c (Case_Statement_to_gnu): Build SWITCH_EXPR
      	using build2 instead of build3.
      jit/
      	* jit-playback.c (add_switch): Build SWITCH_EXPR using build2 instead
      	of build3.  Formatting fixes.  Adjust funciton comment.
      fortran/
      	* trans-decl.c (gfc_trans_entry_master_switch): Build SWITCH_EXPR
      	using fold_build2_loc instead of fold_build3_loc.
      	* trans-io.c (io_result): Likewise.
      	* trans-stmt.c (gfc_trans_integer_select, gfc_trans_character_select):
      	Likewise.
      go/
      	* go-gcc.cc (Gcc_backend::switch_statement): Build SWITCH_EXPR using
      	build2_loc instead of build3_loc.
      brig/
      	* brigfrontend/brig-branch-inst-handler.cc
      	(brig_branch_inst_handler::operator): Build SWITCH_EXPR using build2
      	instead of build3.
      
      From-SVN: r255192
      Jakub Jelinek committed
  14. 26 Nov, 2017 1 commit
    • Plugin support on Windows/MinGW · 8c7dbea9
      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
      Boris Kolpackov committed
  15. 23 Nov, 2017 2 commits
    • c-parser.c (c_parser_omp_declare_simd): Reject declare simd in pragma_stmt context. · 41521dee
      	* c-parser.c (c_parser_omp_declare_simd): Reject declare simd in
      	pragma_stmt context.
      
      	* gcc.dg/gomp/declare-simd-1.c (f9): Remove.
      	* gcc.dg/gomp/declare-simd-5.c: New test.
      
      From-SVN: r255116
      Jakub Jelinek committed
    • generic.texi (ANNOTATE_EXPR): Document 3rd operand. · ac9effed
      	* 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
      Eric Botcazou committed
  16. 22 Nov, 2017 2 commits
    • C/C++: fix quoting of "aka" typedef information (PR 62170) · ce95abc4
      PR 62170 describes a problem with how the quoting in pp_format
      interacts with the "aka" information for typedefs in %qT for
      the C family of frontends, and also now for %qH and %qI in the
      C++ frontend: we print:
      
        'Py_ssize_t* {aka int*}'
         ^^^^^^^^^^^^^^^^^^^^^^ colorized as "quote"
      
      i.e.
        '[START_COLOR]Py_ssize_t* {aka int*}[END_COLOR]'
      
      when we should print:
      
        'Py_ssize_t*' {aka 'int*'}
         ^^^^^^^^^^^        ^^^^ colorized as "quote"
      
      i.e.
        '[START_COLOR]Py_ssize_t*[END_COLOR]' {aka '[START_COLOR]int*[END_COLOR]'}
      
      where the opening and closing quote characters and colorization are
      added by the 'q' handling within pp_format.
      
      This patch fixes the quoting by updating the %T handling in C and C++
      and the %H/%I handling in C++ to insert the quoting appropriately.
      It converts the "quote" param of the pp_format_decoder callback from
      bool to bool *, allowing for the %T and %H/%I handlers to write
      false back to it, to avoid printing the closing quote for the cases
      like the above where the trailing closing quote isn't needed.
      
      It introduces pp_begin_quote/pp_end_quote to simplify this.  These
      take a "bool show_color", rather than using "pp_show_color (pp)"
      since cxx_pp's pp_show_color isn't currently initialized (since
      cxx_initialize_diagnostics happens before diagnostic_color_init).
      
      gcc/c/ChangeLog:
      	PR c++/62170
      	* c-objc-common.c (c_tree_printer): Convert penultimate param from
      	bool to bool *.  Within '%T' handling, if showing an "aka", use
      	"quoted" param to add appropriate quoting.
      
      gcc/cp/ChangeLog:
      	PR c++/62170
      	* error.c (type_to_string): Add leading comment.  Add params
      	"postprocessed", "quote", and "show_color", using them to fix
      	quoting of the "aka" for types involving typedefs.
      	(arg_to_string): Update for new params to type_to_string.
      	(cxx_format_postprocessor::handle): Likewise.
      	(cp_printer): Convert penultimate param from bool to bool *.
      	Update call to type_to_string and calls to
      	defer_phase_2_of_type_diff.
      
      gcc/fortran/ChangeLog:
      	PR c++/62170
      	* error.c (gfc_notify_std): Convert "quoted" param from bool to
      	bool *.
      
      gcc/ChangeLog:
      	PR c++/62170
      	* pretty-print.c (pp_format): Move quoting implementation to
      	pp_begin_quote and pp_end_quote.  Update pp_format_decoder call
      	to pass address of "quote" local.
      	(pp_begin_quote): New function.
      	(pp_end_quote): New function.
      	* pretty-print.h (printer_fn): Convert penultimate param from bool
      	to bool *.
      	(pp_begin_quote): New decl.
      	(pp_end_quote): New decl.
      	* tree-diagnostic.c (default_tree_printer): Convert penultimate
      	param from bool to bool *.
      	* tree-diagnostic.h (default_tree_printer): Likewise.
      
      gcc/testsuite/ChangeLog:
      	PR c++/62170
      	* g++.dg/diagnostic/aka1.C: Update expected error messages to
      	reflect fixes to quoting.
      	* g++.dg/diagnostic/aka2.C: New test case.
      	* g++.dg/parse/error55.C: Update expected error messages to
      	reflect fixes to quoting.
      	* gcc.dg/diag-aka-1.c: Likewise.
      	* gcc.dg/diag-aka-2.c: New test case.
      	* gcc.dg/pr13804-1.c: Update expected error messages to reflect
      	fixes to quoting.
      	* gcc.dg/pr56980.c: Likewise.
      	* gcc.dg/pr65050.c: Likewise.
      	* gcc.dg/redecl-14.c: Likewise.
      	* gcc.dg/utf16-4.c Likewise.
      	* gcc.target/i386/sse-vect-types.c (__m128d): Likewise.
      	* obj-c++.dg/invalid-type-1.mm: Likewise.
      	* objc.dg/proto-lossage-4.m: Likewise.
      
      From-SVN: r255076
      David Malcolm committed
    • re PR c++/60336 (empty struct value is passed differently in C and C++) · 974aedcc
      	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
      Marek Polacek committed
  17. 21 Nov, 2017 4 commits
    • C: don't suggest names that came from earlier failures (PR c/83056) · d4300cc6
      PR c/83056 reports an issue affecting trunk and gcc-7 in which
      the C frontend's implementation of lookup_name_fuzzy uses undeclared
      identifiers as suggestions when encountering subsequent undeclared
      identifiers.
      
      The fix is to filter out the names bound to error_mark_node
      in lookup_name_fuzzy.
      
      The C++ frontend is unaffected, as it already does this.
      
      gcc/c/ChangeLog:
      	PR c/83056
      	* c-decl.c (lookup_name_fuzzy): Don't suggest names that came from
      	earlier failed lookups.
      
      gcc/testsuite/ChangeLog:
      	PR c/83056
      	* gcc.dg/spellcheck-pr83056.c: New test case.
      
      From-SVN: r255038
      David Malcolm committed
    • New POINTER_DIFF_EXPR · 1af4ebf5
      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
      Marc Glisse committed
    • C/C++: more stdlib header hints (PR c/81404) · 26edace6
      This patch extends the C frontend's "knowledge" of the C stdlib within
      get_c_name_hint to cover some more macros and functions, covering
      a case reported in PR c/81404 ("INT_MAX"), so that rather than printing:
      
        t.c:5:12: error: 'INT_MAX' undeclared here (not in a function); did you mean '__INT_MAX__'?
         int test = INT_MAX;
                    ^~~~~~~
                    __INT_MAX__
      
      we instead print:
      
        t.c:5:12: error: 'INT_MAX' undeclared here (not in a function)
         int test = INT_MAX;
                    ^~~~~~~
        t.c:5:12: note: 'INT_MAX' is defined in header '<limits.h>'; did you forget to '#include <limits.h>'?
        t.c:1:1:
        +#include <limits.h>
      
        t.c:5:12:
          int test = INT_MAX;
                     ^~~~~~~
      
      It also adds generalizes some of the code for this (and for the "std::"
      namespace hints in the C++ frontend), moving it to a new
      c-family/known-headers.cc and .h, and introducing a class known_headers.
      This currently just works by scanning a hardcoded array of known
      name/header associations, but perhaps in the future could be turned
      into some kind of symbol database so that the compiler could record API
      uses and use that to offer suggestions e.g.
      
      foo.cc: error: 'myapi::foo' was not declared in this scope
      foo.cc: note: 'myapi::foo" was declared in header 'myapi/private.h'
      (included via 'myapi/public.h') when compiling 'bar.cc'; did you forget to
      '#include "myapi/public.h"'?
      
      or somesuch.
      
      In any case, moving this to a class gives an easier way to locate the
      hardcoded knowledge about the stdlib.
      
      The patch also adds similar code to the C++ frontend covering
      unqualified names in the standard library, so that rather than just
      e.g.:
      
        t.cc:19:13: error: 'NULL' was not declared in this scope
         void *ptr = NULL;
                     ^~~~
      
      we can emit:
      
        t.cc:19:13: error: 'NULL' was not declared in this scope
         void *ptr = NULL;
                     ^~~~
        t.cc:19:13: note: 'NULL' is defined in header '<cstddef>'; did you forget
        to '#include <cstddef>'?
        t.cc:1:1:
        +#include <cstddef>
      
        t.cc:19:13:
         void *ptr = NULL;
                     ^~~~
      
      (Also XFAIL for PR c++/80567 added for the C++ testcase; this is a
      separate pre-existing bug exposed by the testcase for PR 81404).
      
      gcc/ChangeLog:
      	PR c/81404
      	* Makefile.in (C_COMMON_OBJS): Add c-family/known-headers.o.
      
      gcc/c-family/ChangeLog:
      	PR c/81404
      	* known-headers.cc: New file, based on material from c/c-decl.c.
      	(suggest_missing_header): Copied as-is.
      	(get_stdlib_header_for_name): New, based on get_c_name_hint but
      	heavily edited to add C++ support.  Add some knowledge about
      	<limits.h>, <stdint.h>, and <wchar.h>.
      	* known-headers.h: Likewise.
      
      gcc/c/ChangeLog:
      	PR c/81404
      	* c-decl.c: Include "c-family/known-headers.h".
      	(get_c_name_hint): Rename to get_stdlib_header_for_name and move
      	to known-headers.cc.
      	(class suggest_missing_header): Move to known-header.h.
      	(lookup_name_fuzzy): Call get_c_stdlib_header_for_name rather
      	than get_c_name_hint.
      
      gcc/cp/ChangeLog:
      	PR c/81404
      	* name-lookup.c: Include "c-family/known-headers.h"
      	(lookup_name_fuzzy): Call get_cp_stdlib_header_for_name and
      	potentially return a new suggest_missing_header hint.
      
      gcc/testsuite/ChangeLog:
      	PR c/81404
      	* g++.dg/spellcheck-stdlib.C: New.
      	* gcc.dg/spellcheck-stdlib.c (test_INT_MAX): New.
      
      From-SVN: r254980
      David Malcolm committed
    • C: hints for missing stdlib includes for macros and types · b1212255
      The C frontend already "knows" about many common functions in
      the C standard library:
      
        test.c: In function 'test':
        test.c:3:3: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration]
           printf ("hello world\n");
           ^~~~~~
        test.c:3:3: warning: incompatible implicit declaration of built-in function 'printf'
        test.c:3:3: note: include '<stdio.h>' or provide a declaration of 'printf'
      
      and which header file they are in.
      
      However it doesn't know about various types and macros:
      
      test.c:1:13: error: 'NULL' undeclared here (not in a function)
       void *ptr = NULL;
                   ^~~~
      
      This patch uses the name_hint/deferred_diagnostic machinery to
      add hints for missing C standard library headers for some of the
      most common type and macro names.
      
      For example, the above becomes:
      test.c:1:13: error: 'NULL' undeclared here (not in a function)
       void *ptr = NULL;
                   ^~~~
      test.c:1:13: note: 'NULL' is defined in header '<stddef.h>'; did you forget to '#include <stddef.h>'?
      
      gcc/c/ChangeLog:
      	* c-decl.c (get_c_name_hint): New function.
      	(class suggest_missing_header): New class.
      	(lookup_name_fuzzy): Call get_c_name_hint and use it to
      	suggest missing headers to the user.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/spellcheck-stdlib.c: New test case.
      
      From-SVN: r254979
      David Malcolm committed
  18. 20 Nov, 2017 1 commit
    • c-family: add name_hint/deferred_diagnostic · 6c7a259b
      In various places we use lookup_name_fuzzy to provide a hint,
      and can report messages of the form:
        error: unknown foo named 'bar'
      or:
        error: unknown foo named 'bar'; did you mean 'SUGGESTION?
      
      This patch provides a way for lookup_name_fuzzy to provide
      both the suggestion above, and (optionally) additional hints
      that can be printed e.g.
      
        note: did you forget to include <SOME_HEADER.h>?
      
      This patch provides the mechanism and ports existing users
      of lookup_name_fuzzy to the new return type.
      There are no uses of such hints in this patch, but followup
      patches provide various front-end specific uses of this.
      
      gcc/c-family/ChangeLog:
      	* c-common.h (enum lookup_name_fuzzy_kind): Move to name-hint.h.
      	(lookup_name_fuzzy): Likewise.  Convert return type from
      	const char * to name_hint.  Add location_t param.
      	* name-hint.h: New header.
      
      gcc/c/ChangeLog:
      	* c-decl.c: Define INCLUDE_UNIQUE_PTR before including system.h.
      	Include "c-family/name-hint.h"
      	(implicit_decl_warning): Convert "hint" from
      	const char * to name_hint.  Pass location to
      	lookup_name_fuzzy.  Suppress any deferred diagnostic if the
      	warning was not printed.
      	(undeclared_variable): Likewise for "guessed_id".
      	(lookup_name_fuzzy): Convert return type from const char *
      	to name_hint.  Add location_t param.
      	* c-parser.c: Define INCLUDE_UNIQUE_PTR before including system.h.
      	Include "c-family/name-hint.h"
      	(c_parser_declaration_or_fndef): Convert "hint" from
      	const char * to name_hint.  Pass location to lookup_name_fuzzy.
      	(c_parser_parameter_declaration): Likewise.
      
      gcc/cp/ChangeLog:
      	* name-lookup.c: Define INCLUDE_UNIQUE_PTR before including system.h.
      	Include "c-family/name-hint.h"
      	(suggest_alternatives_for): Convert "fuzzy_name" from const char *
      	to name_hint, and rename to "hint".  Pass location to
      	lookup_name_fuzzy.
      	(lookup_name_fuzzy): Convert return type from const char *
      	to name_hint.  Add location_t param.
      	* parser.c: Define INCLUDE_UNIQUE_PTR before including system.h.
      	Include "c-family/name-hint.h"
      	(cp_parser_diagnose_invalid_type_name): Convert
      	"suggestion" from const char * to name_hint, and rename to "hint".
      	Pass location to lookup_name_fuzzy.
      
      From-SVN: r254963
      David Malcolm committed
  19. 19 Nov, 2017 1 commit
    • re PR c/66618 (Failure to diagnose non-constant initializer for static object with -O1) · f9c59f7e
      	PR c/66618
      	PR c/69960
      c-family/
      	* c-common.h (c_fully_fold): Add LVAL argument defaulted to false.
      c/
      	* c-parser.c (c_parser_omp_atomic): Pass true as LVAL to c_fully_fold
      	where needed.
      	* c-typeck.c (build_unary_op, build_modify_expr, build_asm_expr,
      	handle_omp_array_sections): Likewise.
      	(digest_init): Don't call decl_constant_value_for_optimization.
      	* c-tree.h (decl_constant_value_for_optimization): Removed.
      	* c-fold.c (c_fold_array_ref): New function.
      	(c_fully_fold_internal): Add LVAL argument, propagate it through
      	recursive calls.  For VAR_P call decl_constant_value and
      	unshare if not LVAL and either optimizing or IN_INIT.  Remove
      	decl_constant_value_for_optimization calls.  If IN_INIT and not LVAL,
      	fold ARRAY_REF with STRING_CST and INTEGER_CST operands.
      	(c_fully_fold): Add LVAL argument, pass it through to
      	c_fully_fold_internal.
      	(decl_constant_value_for_optimization): Removed.
      cp/
      	* cp-gimplify.c (c_fully_fold): Add LVAL argument, call
      	cp_fold_maybe_rvalue instead of cp_fold_rvalue and pass it !LVAL.
      testsuite/
      	* gcc.dg/pr69960.c: New test.
      	* gcc.dg/pr66618.c: New test.
      	* gcc.dg/pr66618-2.c: New test.
      
      From-SVN: r254930
      Jakub Jelinek committed
  20. 15 Nov, 2017 1 commit
    • Add __builtin_tgmath for better tgmath.h implementation (bug 81156). · 3ca0dc60
      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
      Joseph Myers committed
  21. 31 Oct, 2017 1 commit
    • diagnostics: get rid of *_at_rich_loc in favor of overloading · 64a5912c
      Adding a fix-it hint currently involves changing e.g.:
      
        error_at (token->location,
                  "unknown type name %qE; did you mean %qs?",
                  token->value, hint);
      to:
      
        gcc_rich_location richloc (token->location);
        richloc.add_fixit_replace (hint);
        error_at_rich_loc (&richloc,
                           "unknown type name %qE; did you mean %qs?",
                           token->value, hint);
      
      to make the change from taking a location_t to a rich_location *.
      
      This patch renames the "*_at_rich_loc" diagnostic entrypoints to use
      the same function names for rich_location * as for location_t,
      via overloading, to simplify the above change to just changing from:
      
        error_at (token->location,
                  "unknown type name %qE; did you mean %qs?",
                  token->value, hint);
      to:
      
        gcc_rich_location richloc (token->location);
        richloc.add_fixit_replace (hint);
        error_at (&richloc,
                  "unknown type name %qE; did you mean %qs?",
                  token->value, hint);
      
      thus saving space (and typing) and usually avoiding the need to reindent
      the "error_at" invocation.
      
      With this change, 0 is no longer acceptable as a location_t to these
      entrypoints, as e.g.:
      
      ../../src/gcc/auto-profile.c:855:37: error: call of overloaded
      'inform(int, const char [18])' is ambiguous
             inform (0, "Not expected TAG.");
                                           ^
      In file included from ../../src/gcc/auto-profile.c:35:0:
      ../../src/gcc/diagnostic-core.h:88:13: note: candidate:
      'void inform(location_t, const char*, ...)'
       extern void inform (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
                   ^~~~~~
      ../../src/gcc/diagnostic-core.h:89:13: note: candidate:
      'void inform(rich_location*, const char*, ...)'
       extern void inform (rich_location *, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
                   ^~~~~~
      
      Such locations now need to be spelled out as UNKNOWN_LOCATION,
      rather than 0.
      
      I considered making the API take a rich_location & rather than a
      rich_location *, but doing so would mean replacing
        diagnostic_set_info
      and
        diagnostic_set_info_translated
      with a constructor for diagnostic_info, which was a more invasive
      change.  Maybe in the future.
      
      gcc/ChangeLog:
      	* auto-profile.c (autofdo_source_profile::read): Use
      	UNKNOWN_LOCATION rather than 0.
      	* diagnostic-core.h (warning_at_rich_loc): Rename to...
      	(warning_at): ...this overload.
      	(warning_at_rich_loc_n): Rename to...
      	(warning_n): ...this overload.
      	(error_at_rich_loc): Rename to...
      	(error_at): ...this overload.
      	(pedwarn_at_rich_loc): Rename to...
      	(pedwarn): ...this overload.
      	(permerror_at_rich_loc): Rename to...
      	(permerror): ...this overload.
      	(inform_at_rich_loc): Rename to...
      	(inform): ...this overload.
      	* diagnostic.c: (diagnostic_n_impl): Delete location_t-based decl.
      	(diagnostic_n_impl_richloc): Rename to...
      	(diagnostic_n_impl): ...this rich_location *-based decl.
      	(inform_at_rich_loc): Rename to...
      	(inform): ...this, and add an assertion.
      	(inform_n): Update for removal of location_t-based diagnostic_n_impl.
      	(warning_at_rich_loc): Rename to...
      	(warning_at): ...this, and add an assertion.
      	(warning_at_rich_loc_n): Rename to...
      	(warning_n): ...this, and add an assertion.
      	(warning_n): Update location_t-based implementation for removal of
      	location_t-based diagnostic_n_impl.
      	(pedwarn_at_rich_loc): Rename to...
      	(pedwarn): ...this, and add an assertion.
      	(permerror_at_rich_loc): Rename to...
      	(permerror): ...this, and add an assertion.
      	(error_n): Update for removal of location_t-based diagnostic_n_impl.
      	(error_at_rich_loc): Rename to...
      	(error_at): ...this, and add an assertion.
      	* gcc.c (do_spec_1): Use UNKNOWN_LOCATION rather than 0.
      	(driver::do_spec_on_infiles): Likewise.
      	* substring-locations.c (format_warning_va): Update for renaming
      	of inform_at_rich_loc.
      
      gcc/c-family/ChangeLog:
      	* c-common.c (binary_op_error): Update for renaming of
      	error_at_rich_loc.
      	(c_parse_error): Likewise.
      	* c-warn.c (warn_logical_not_parentheses): Likewise for
      	renaming of inform_at_rich_loc.
      	(warn_for_restrict): Likewise for renaming of
      	warning_at_rich_loc_n.
      
      gcc/c/ChangeLog:
      	* c-decl.c (implicit_decl_warning): Update for renaming of
      	pedwarn_at_rich_loc and warning_at_rich_loc.
      	(implicitly_declare): Likewise for renaming of inform_at_rich_loc.
      	(undeclared_variable): Likewise for renaming of error_at_rich_loc.
      	* c-parser.c (c_parser_declaration_or_fndef): Likewise.
      	(c_parser_struct_or_union_specifier): Likewise for renaming of
      	pedwarn_at_rich_loc.
      	(c_parser_parameter_declaration): Likewise for renaming of
      	error_at_rich_loc.
      	* c-typeck.c (build_component_ref): Likewise.
      	(build_unary_op): Likewise for renaming of inform_at_rich_loc.
      	(pop_init_level): Likewise for renaming of warning_at_rich_loc.
      	(set_init_label): Likewise for renaming of error_at_rich_loc.
      
      gcc/cp/ChangeLog:
      	* class.c (explain_non_literal_class): Use UNKNOWN_LOCATION rather
      	than 0.
      	* name-lookup.c (suggest_alternatives_for): Update for renaming of
      	inform_at_rich_loc.
      	(maybe_suggest_missing_header): Likewise.
      	(suggest_alternative_in_explicit_scope): Likewise.
      	* parser.c (cp_parser_diagnose_invalid_type_name): Likewise for
      	renaming of error_at_rich_loc.
      	(cp_parser_string_literal): Likewise.
      	(cp_parser_nested_name_specifier_opt): Likewise.
      	(cp_parser_cast_expression): Likewise for renaming of
      	warning_at_rich_loc.
      	(cp_parser_decl_specifier_seq): Likewise for renaming of
      	error_at_rich_loc and warning_at_rich_loc.
      	(cp_parser_elaborated_type_specifier): Likewise for renaming of
      	pedwarn_at_rich_loc.
      	(cp_parser_cv_qualifier_seq_opt): Likewise for renaming of
      	error_at_rich_loc.
      	(cp_parser_virt_specifier_seq_opt): Likewise.
      	(cp_parser_class_specifier_1): Likewise.
      	(cp_parser_class_head): Likewise.
      	(cp_parser_member_declaration): Likewise for renaming of
      	pedwarn_at_rich_loc, warning_at_rich_loc, and error_at_rich_loc.
      	(cp_parser_enclosed_template_argument_list): Likewise for renaming
      	of error_at_rich_loc.
      	(set_and_check_decl_spec_loc): Likewise.
      	* pt.c (listify): Likewise.
      	* rtti.c (typeid_ok_p): Likewise.
      	* semantics.c (process_outer_var_ref): Use UNKNOWN_LOCATION rather
      	than 0.
      	* typeck.c (access_failure_info::maybe_suggest_accessor): Update
      	for renaming of inform_at_rich_loc.
      	(finish_class_member_access_expr): Likewise for renaming of
      	error_at_rich_loc.
      
      gcc/objc/ChangeLog:
      	* objc-gnu-runtime-abi-01.c (objc_gnu_runtime_abi_01_init): Use
      	UNKNOWN_LOCATION rather than 0.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/plugin/diagnostic_plugin_show_trees.c (show_tree): Update
      	for renaming of error_at_rich_loc and inform_at_rich_loc.
      	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c
      	(test_show_locus): Likewise for renaming of warning_at_rich_loc.
      
      libcpp/ChangeLog:
      	* directives.c (_cpp_handle_directive): Update for renaming of
      	cpp_error_at_richloc to cpp_error_at.
      	* errors.c (cpp_diagnostic_at_richloc): Rename to...
      	(cpp_diagnostic_at): ...this, dropping the location_t-based
      	implementation.
      	(cpp_diagnostic): Update for removal of location_t-based
      	cpp_diagnostic_at.
      	(cpp_error_at): Likewise.
      	(cpp_error_at_richloc): Rename to...
      	(cpp_error_at): ...this, and update for renaming of
      	cpp_diagnostic_at_richloc.
      	* include/cpplib.h (cpp_error_at_richloc): Rename to...
      	(cpp_error_at): ...this.
      
      From-SVN: r254280
      David Malcolm committed
  22. 30 Oct, 2017 1 commit
  23. 27 Oct, 2017 1 commit
    • builtins.c (CASE_MATHFN_FLOATN): New helper macro to add cases for math… · ee5fd23a
      builtins.c (CASE_MATHFN_FLOATN): New helper macro to add cases for math functions that have _Float<N> and...
      
      [gcc]
      2017-10-27  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	* builtins.c (CASE_MATHFN_FLOATN): New helper macro to add cases
      	for math functions that have _Float<N> and _Float<N>X variants.
      	(mathfn_built_in_2): Add support for math functions that have
      	_Float<N> and _Float<N>X variants.
      	(DEF_INTERNAL_FLT_FLOATN_FN): New helper macro.
      	(expand_builtin_mathfn_ternary): Add support for fma with
      	_Float<N> and _Float<N>X variants.
      	(expand_builtin): Likewise.
      	(fold_builtin_3): Likewise.
      	* builtins.def (DEF_EXT_LIB_FLOATN_NX_BUILTINS): New macro to
      	create math function _Float<N> and _Float<N>X variants as external
      	library builtins.
      	(BUILT_IN_COPYSIGN _Float<N> and _Float<N>X variants) Use
      	DEF_EXT_LIB_FLOATN_NX_BUILTINS to make built-in functions using
      	the __builtin_ prefix and if not strict ansi, without the prefix.
      	(BUILT_IN_FABS _Float<N> and _Float<N>X variants): Likewise.
      	(BUILT_IN_FMA _Float<N> and _Float<N>X variants): Likewise.
      	(BUILT_IN_FMAX _Float<N> and _Float<N>X variants): Likewise.
      	(BUILT_IN_FMIN _Float<N> and _Float<N>X variants): Likewise.
      	(BUILT_IN_NAN _Float<N> and _Float<N>X variants): Likewise.
      	(BUILT_IN_SQRT _Float<N> and _Float<N>X variants): Likewise.
      	* builtin-types.def (BT_FN_FLOAT16_FLOAT16_FLOAT16_FLOAT16): New
      	function signatures for fma _Float<N> and _Float<N>X variants.
      	(BT_FN_FLOAT32_FLOAT32_FLOAT32_FLOAT32): Likewise.
      	(BT_FN_FLOAT64_FLOAT64_FLOAT64_FLOAT64): Likewise.
      	(BT_FN_FLOAT128_FLOAT128_FLOAT128_FLOAT128): Likewise.
      	(BT_FN_FLOAT32X_FLOAT32X_FLOAT32X_FLOAT32X): Likewise.
      	(BT_FN_FLOAT64X_FLOAT64X_FLOAT64X_FLOAT64X): Likewise.
      	(BT_FN_FLOAT128X_FLOAT128X_FLOAT128X_FLOAT128X): Likewise.
      	* gencfn-macros.c (print_case_cfn): Add support for math functions
      	that have _Float<N> and _Float<N>X variants.
      	(print_define_operator_list): Likewise.
      	(fltfn_suffixes): Likewise.
      	(main): Likewise.
      	* internal-fn.def (DEF_INTERNAL_FLT_FLOATN_FN): New helper macro
      	for math functions that have _Float<N> and _Float<N>X variants.
      	(SQRT): Add support for sqrt, copysign, fmin and fmax _Float<N>
      	and _Float<N>X variants.
      	(COPYSIGN): Likewise.
      	(FMIN): Likewise.
      	(FMAX): Likewise.
      	* fold-const.c (tree_call_nonnegative_warnv_p): Add support for
      	copysign, fma, fmax, fmin, and sqrt _Float<N> and _Float<N>X
      	variants.
      	(integer_valued_read_call_p): Likewise.
      	* fold-const-call.c (fold_const_call_ss): Likewise.
      	(fold_const_call_sss): Add support for copysign, fmin, and fmax
      	_Float<N> and _Float<N>X variants.
      	(fold_const_call_ssss): Add support for fma _Float<N> and
      	_Float<N>X variants.
      	* gimple-ssa-backprop.c (backprop::process_builtin_call_use): Add
      	support for copysign and fma _Float<N> and _Float<N>X variants.
      	(backprop::process_builtin_call_use): Likewise.
      	* tree-call-cdce.c (can_test_argument_range); Add support for
      	sqrt _Float<N> and _Float<N>X variants.
      	(edom_only_function): Likewise.
      	(get_no_error_domain): Likewise.
      	* tree-ssa-math-opts.c (internal_fn_reciprocal): Likewise.
      	* tree-ssa-reassoc.c (attempt_builtin_copysign): Add support for
      	copysign _Float<N> and _Float<N>X variants.
      	* config/rs6000/rs6000-builtin.def (SQRTF128): Delete, this is now
      	handled by machine independent code.
      	(FMAF128): Likewise.
      	* doc/cpp.texi (Common Predefined Macros): Document defining
      	__FP_FAST_FMAF<N> and __FP_FAST_FMAF<N>X if the backend supports
      	fma _Float<N> and _Float<N>X variants.
      
      [gcc/c]
      2017-10-27  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	* c-decl.c (header_for_builtin_fn): Add support for copysign, fma,
      	fmax, fmin, and sqrt _Float<N> and _Float<N>X variants.
      
      [gcc/c-family]
      2017-10-27  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	* c-cppbuiltin.c (mode_has_fma): Add support for PowerPC KFmode.
      	(c_cpp_builtins): If a machine has a fast fma _Float<N> and
      	_Float<N>X variant, define __FP_FAST_FMA<N> and/or
      	__FP_FAST_FMA<N>X.
      
      [gcc/testsuite]
      2017-10-27  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	* gcc.target/powerpc/float128-hw.c: Add support for all 4 FMA
      	variants.  Check various conversions to/from float128.  Check
      	negation.  Use {\m...\M} in the tests.
      	* gcc.target/powerpc/float128-hw2.c: New test for implicit
      	_Float128 math functions.
      	* gcc.target/powerpc/float128-hw3.c: New test for strict ansi mode
      	not implicitly adding the _Float128 math functions.
      	* gcc.target/powerpc/float128-fma2.c: Delete, test is no longer
      	valid.
      	* gcc.target/powerpc/float128-sqrt2.c: Likewise.
      
      From-SVN: r254168
      Michael Meissner committed
  24. 25 Oct, 2017 2 commits
    • C: detect more missing semicolons (PR c/7356) · 1a59ccf2
      c_parser_declaration_or_fndef has logic for parsing what might be
      either a declaration or a function definition.
      
      This patch adds a test to detect cases where a semicolon would have
      terminated the decls as a declaration, where the token that follows
      would start a new declaration specifier, and updates the error message
      accordingly, with a fix-it hint.
      
      This addresses PR c/7356, fixing the case of a stray token before a
      #include that previously gave inscrutable output, and improving e.g.:
      
        int i
        int j;
      
      from:
      
        t.c:2:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'
         int j;
         ^~~
      
      to:
      
        t.c:1:6: error: expected ';' before 'int'
         int i
              ^
              ;
         int j;
         ~~~
      
      gcc.dg/noncompile/920923-1.c needs a slight update, as the output for
      the first line changes from:
      
        920923-1.c:2:14: error: expected '=', ',', ';', 'asm' or
        '__attribute__' before 'unsigned'
         typedef BYTE unsigned char; /* { dg-error "expected" } */
                      ^~~~~~~~
      
      to:
        920923-1.c:2:13: error: expected ';' before 'unsigned'
         typedef BYTE unsigned char; /* { dg-error "expected" } */
                     ^~~~~~~~~
                     ;
        920923-1.c:2:1: warning: useless type name in empty declaration
         typedef BYTE unsigned char; /* { dg-error "expected" } */
         ^~~~~~~
      
      The patch also adds a test for PR c/44515 as a baseline.
      
      gcc/c/ChangeLog:
      	PR c/7356
      	* c-parser.c (c_parser_declaration_or_fndef): Detect missing
      	semicolons.
      
      gcc/testsuite/ChangeLog:
      	PR c/7356
      	PR c/44515
      	* c-c++-common/pr44515.c: New test case.
      	* gcc.dg/pr7356-2.c: New test case.
      	* gcc.dg/pr7356.c: New test case.
      	* gcc.dg/spellcheck-typenames.c: Update the "singed" char "TODO"
      	case to reflect changes to output.
      	* gcc.dg/noncompile/920923-1.c: Add dg-warning to reflect changes
      	to output.
      
      From-SVN: r254093
      David Malcolm committed
    • re PR libstdc++/81706 (std::sin vectorization bug) · bc1a75dd
      	PR libstdc++/81706
      	* attribs.c (attribute_value_equal): Use omp_declare_simd_clauses_equal
      	for comparison of OMP_CLAUSEs regardless of flag_openmp{,_simd}.
      	(duplicate_one_attribute, copy_attributes_to_builtin): New functions.
      	* attribs.h (duplicate_one_attribute, copy_attributes_to_builtin): New
      	declarations.
      
      	* c-decl.c (merge_decls): Copy "omp declare simd" attributes from
      	newdecl to corresponding __builtin_ if any.
      
      	* decl.c (duplicate_decls): Copy "omp declare simd" attributes from
      	newdecl to corresponding __builtin_ if any.
      
      	* gcc.target/i386/pr81706.c: New test.
      	* g++.dg/ext/pr81706.C: New test.
      
      From-SVN: r254069
      Jakub Jelinek committed