1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 30 Oct, 2017 1 commit
  15. 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
  16. 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
  17. 24 Oct, 2017 1 commit
    • re PR c++/82466 (Missing warning for re-declaration of built-in function as variable) · ff1ff960
      2017-10-24  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/82466
      	* doc/invoke.texi ([Wbuiltin-declaration-mismatch]): Extend
      	description.
      
      /cp
      2017-10-24  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/82466
      	* decl.c (duplicate_decls): Warn for built-in functions declared as
      	non-function, use OPT_Wbuiltin_declaration_mismatch.
      
      	* decl.c (duplicate_decls): Avoid redundant '+' in warning_at.
      
      /c
      2017-10-24  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/82466
      	* c-decl.c (diagnose_mismatched_decls): Use
      	OPT_Wbuiltin_declaration_mismatch.
      
      /testsuite
      2017-10-24  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/82466
      	* c-c++-common/Wbuiltin-declaration-mismatch-1.c: New.
      	* c-c++-common/Wno-builtin-declaration-mismatch-1.c: Likewise.
      	* g++.dg/warn/Wbuiltin_declaration_mismatch-1.C: Likewise.
      	* g++.dg/parse/builtin2.C: Adjust.
      	* g++.old-deja/g++.mike/p811.C: Likewise.
      
      From-SVN: r254057
      Paolo Carlini committed
  18. 20 Oct, 2017 1 commit
    • Add generic part for Intel CET enabling. The spec is available at · 5c5f0b65
      https://software.intel.com/sites/default/files/managed/4d/2a/control-flow-enforcement-technology-preview.pdf
      
      A proposal is to introduce a target independent flag
      -fcf-protection=[none|branch|return|full] with a semantic to
      instrument a code to control validness or integrity of control-flow
      transfers using jump and call instructions. The main goal is to detect
      and block a possible malware execution through transfer the execution
      to unknown target address. Implementation could be either software or
      target based. Any target platforms can provide their implementation
      for instrumentation under this option.
      
      The compiler should instrument any control-flow transfer points in a
      program (ex. call/jmp/ret) as well as any landing pads, which are
      targets of control-flow transfers.
      
      A new 'nocf_check' attribute is introduced to provide hand tuning
      support. The attribute directs the compiler to skip a call to a
      function and a function's landing pad from instrumentation. The
      attribute can be used for function and pointer to function types,
      otherwise it will be ignored.
      
      Currently all platforms except i386 will report the error and do no
      instrumentation. i386 will provide the implementation based on a
      specification published by Intel for a new technology called
      Control-flow Enforcement Technology (CET).
      
      gcc/c-family/
      	* c-attribs.c (handle_nocf_check_attribute): New function.
      	(c_common_attribute_table): Add 'nocf_check' handling.
      
      gcc/c/
      	* gimple-parser.c: Add second argument NULL to
      	gimple_build_call_from_tree.
      
      gcc/
      	* attrib.c (comp_type_attributes): Check nocf_check attribute.
      	* cfgexpand.c (expand_call_stmt): Set REG_CALL_NOCF_CHECK for
      	call insn.
      	* combine.c (distribute_notes): Add REG_CALL_NOCF_CHECK handling.
      	* common.opt: Add fcf-protection flag.
      	* emit-rtl.c (try_split): Add REG_CALL_NOCF_CHECK handling.
      	* flag-types.h: Add enum cf_protection_level.
      	* gimple.c (gimple_build_call_from_tree): Add second parameter.
      	Add 'nocf_check' attribute propagation to gimple call.
      	* gimple.h (gf_mask): Add GF_CALL_NOCF_CHECK.
      	(gimple_build_call_from_tree): Update prototype.
      	(gimple_call_nocf_check_p): New function.
      	(gimple_call_set_nocf_check): Likewise.
      	* gimplify.c: Add second argument to gimple_build_call_from_tree.
      	* ipa-icf.c: Add nocf_check attribute in statement hash.
      	* recog.c (peep2_attempt): Add REG_CALL_NOCF_CHECK handling.
      	* reg-notes.def: Add REG_NOTE (CALL_NOCF_CHECK).
      	* toplev.c (process_options): Add flag_cf_protection handling.
      
      From-SVN: r253936
      Igor Tsimbalist committed
  19. 12 Oct, 2017 1 commit
    • C/C++: add fix-it hints for various missing symbols · 62e1c678
      The patch improves our C/C++ frontends' handling of missing
      symbols, by making c_parser_require and cp_parser_require use
      "better" locations for the diagnostic, and insert fix-it hints,
      under certain circumstances (see the comments in the patch for
      full details).
      
      For example, for this code with a missing semicolon:
      
        $ cat test.c
        int missing_semicolon (void)
        {
          return 42
        }
      
        trunk currently emits:
      
        test.c:4:1: error: expected ';' before '}' token
         }
         ^
      
      This patch adds a fix-it hint for the missing semicolon, and puts
      the error at the location of the missing semicolon, printing the
      followup token as a secondary location:
      
        test.c:3:12: error: expected ';' before '}' token
           return 42
                    ^
                    ;
         }
         ~
      
      More examples can be seen in the test cases.
      
      gcc/c-family/ChangeLog:
      	* c-common.c (enum missing_token_insertion_kind): New enum.
      	(get_missing_token_insertion_kind): New function.
      	(maybe_suggest_missing_token_insertion): New function.
      	* c-common.h (maybe_suggest_missing_token_insertion): New decl.
      
      gcc/c/ChangeLog:
      	* c-parser.c (c_parser_require): Add "type_is_unique" param and
      	use it to guard calls to maybe_suggest_missing_token_insertion.
      	(c_parser_parms_list_declarator): Override default value of new
      	"type_is_unique" param to c_parser_require.
      	(c_parser_asm_statement): Likewise.
      	* c-parser.h (c_parser_require): Add "type_is_unique" param,
      	defaulting to true.
      
      gcc/cp/ChangeLog:
      	* parser.c (get_required_cpp_ttype): New function.
      	(cp_parser_error_1): Call it, using the result to call
      	maybe_suggest_missing_token_insertion.
      
      gcc/testsuite/ChangeLog:
      	* c-c++-common/cilk-plus/AN/parser_errors.c: Update expected
      	output to reflect changes to reported locations of missing
      	symbols.
      	* c-c++-common/cilk-plus/AN/parser_errors2.c: Likewise.
      	* c-c++-common/cilk-plus/AN/parser_errors3.c: Likewise.
      	* c-c++-common/cilk-plus/AN/pr61191.c: Likewise.
      	* c-c++-common/gomp/pr63326.c: Likewise.
      	* c-c++-common/missing-close-symbol.c: Likewise, also update for
      	new fix-it hints.
      	* c-c++-common/missing-symbol.c: Likewise, also add test coverage
      	for missing colon in ternary operator.
      	* g++.dg/cpp1y/digit-sep-neg.C: Likewise.
      	* g++.dg/cpp1y/pr65202.C: Likewise.
      	* g++.dg/missing-symbol-2.C: New test case.
      	* g++.dg/other/do1.C: Update expected output to reflect
      	changes to reported locations of missing symbols.
      	* g++.dg/parse/error11.C: Likewise.
      	* g++.dg/template/error11.C: Likewise.
      	* gcc.dg/missing-symbol-2.c: New test case.
      	* gcc.dg/missing-symbol-3.c: New test case.
      	* gcc.dg/noncompile/940112-1.c: Update expected output to reflect
      	changes to reported locations of missing symbols.
      	* gcc.dg/noncompile/971104-1.c: Likewise.
      	* obj-c++.dg/exceptions-6.mm: Likewise.
      	* obj-c++.dg/pr48187.mm: Likewise.
      	* objc.dg/exceptions-6.m: Likewise.
      
      From-SVN: r253690
      David Malcolm committed
  20. 11 Oct, 2017 1 commit
    • [PATCH] DECL_ASSEMBLER_NAME and friends · a92f6726
      https://gcc.gnu.org/ml/gcc-patches/2017-10/msg00582.html
      	* tree.h (DECL_ASSEMBLER_NAME_SET_P): Don't check
      	HAS_DECL_ASSEMBLER_NAME_P.
      	* gimple-expr.c (gimple_decl_printable_name: Check
      	HAS_DECL_ASSEMBLER_NAME_P too.
      	* ipa-utils.h (type_in_anonymous_namespace_p): Check
      	DECL_ASSEMBLER_NAME_SET_P of TYPE_NAME.
      	(odr_type_p): No need to assert TYPE_NAME is a TYPE_DECL.
      	* passes.c (rest_of_decl_compilation): Check
      	HAS_DECL_ASSEMBLER_NAME_P too.
      	* recog.c (verify_changes): Likewise.
      	* tree-pretty-print.c (dump_decl_name): Likewise.
      	* tree-ssa-structalias.c (alias_get_name): Likewise.  Reimplement.
      
      	c/
      	* c-decl.c (grokdeclarator): Check HAS_DECL_ASSEMBLER_NAME_P too.
      
      From-SVN: r253649
      Nathan Sidwell committed
  21. 10 Oct, 2017 1 commit
    • Require wi::to_wide for trees · 8e6cdc90
      The wide_int routines allow things like:
      
         wi::add (t, 1)
      
      to add 1 to an INTEGER_CST T in its native precision.  But we also have:
      
         wi::to_offset (t)      // Treat T as an offset_int
         wi::to_widest (t)      // Treat T as a widest_int
      
      Recently we also gained:
      
         wi::to_wide (t, prec)  // Treat T as a wide_int in preccision PREC
      
      This patch therefore requires:
      
         wi::to_wide (t)
      
      when operating on INTEGER_CSTs in their native precision.  This is
      just as efficient, and makes it clearer that a deliberate choice is
      being made to treat the tree as a wide_int in its native precision.
      This also removes the inconsistency that
      
      a) INTEGER_CSTs in their native precision can be used without an accessor
         but must use wi:: functions instead of C++ operators
      
      b) the other forms need an explicit accessor but the result can be used
         with C++ operators.
      
      It also helps with SVE, where there's the additional possibility
      that the tree could be a runtime value.
      
      2017-10-10  Richard Sandiford  <richard.sandiford@linaro.org>
      
      gcc/
      	* wide-int.h (wide_int_ref_storage): Make host_dependent_precision
      	a template parameter.
      	(WIDE_INT_REF_FOR): Update accordingly.
      	* tree.h (wi::int_traits <const_tree>): Delete.
      	(wi::tree_to_widest_ref, wi::tree_to_offset_ref): New typedefs.
      	(wi::to_widest, wi::to_offset): Use them.  Expand commentary.
      	(wi::tree_to_wide_ref): New typedef.
      	(wi::to_wide): New function.
      	* calls.c (get_size_range): Use wi::to_wide when operating on
      	trees as wide_ints.
      	* cgraph.c (cgraph_node::create_thunk): Likewise.
      	* config/i386/i386.c (ix86_data_alignment): Likewise.
      	(ix86_local_alignment): Likewise.
      	* dbxout.c (stabstr_O): Likewise.
      	* dwarf2out.c (add_scalar_info, gen_enumeration_type_die): Likewise.
      	* expr.c (const_vector_from_tree): Likewise.
      	* fold-const-call.c (host_size_t_cst_p, fold_const_call_1): Likewise.
      	* fold-const.c (may_negate_without_overflow_p, negate_expr_p)
      	(fold_negate_expr_1, int_const_binop_1, const_binop)
      	(fold_convert_const_int_from_real, optimize_bit_field_compare)
      	(all_ones_mask_p, sign_bit_p, unextend, extract_muldiv_1)
      	(fold_div_compare, fold_single_bit_test, fold_plusminus_mult_expr)
      	(pointer_may_wrap_p, expr_not_equal_to, fold_binary_loc)
      	(fold_ternary_loc, multiple_of_p, fold_negate_const, fold_abs_const)
      	(fold_not_const, round_up_loc): Likewise.
      	* gimple-fold.c (gimple_fold_indirect_ref): Likewise.
      	* gimple-ssa-warn-alloca.c (alloca_call_type_by_arg): Likewise.
      	(alloca_call_type): Likewise.
      	* gimple.c (preprocess_case_label_vec_for_gimple): Likewise.
      	* godump.c (go_output_typedef): Likewise.
      	* graphite-sese-to-poly.c (tree_int_to_gmp): Likewise.
      	* internal-fn.c (get_min_precision): Likewise.
      	* ipa-cp.c (ipcp_store_vr_results): Likewise.
      	* ipa-polymorphic-call.c
      	(ipa_polymorphic_call_context::ipa_polymorphic_call_context): Likewise.
      	* ipa-prop.c (ipa_print_node_jump_functions_for_edge): Likewise.
      	(ipa_modify_call_arguments): Likewise.
      	* match.pd: Likewise.
      	* omp-low.c (scan_omp_1_op, lower_omp_ordered_clauses): Likewise.
      	* print-tree.c (print_node_brief, print_node): Likewise.
      	* stmt.c (expand_case): Likewise.
      	* stor-layout.c (layout_type): Likewise.
      	* tree-affine.c (tree_to_aff_combination): Likewise.
      	* tree-cfg.c (group_case_labels_stmt): Likewise.
      	* tree-data-ref.c (dr_analyze_indices): Likewise.
      	(prune_runtime_alias_test_list): Likewise.
      	* tree-dump.c (dequeue_and_dump): Likewise.
      	* tree-inline.c (remap_gimple_op_r, copy_tree_body_r): Likewise.
      	* tree-predcom.c (is_inv_store_elimination_chain): Likewise.
      	* tree-pretty-print.c (dump_generic_node): Likewise.
      	* tree-scalar-evolution.c (iv_can_overflow_p): Likewise.
      	(simple_iv_with_niters): Likewise.
      	* tree-ssa-address.c (addr_for_mem_ref): Likewise.
      	* tree-ssa-ccp.c (ccp_finalize, evaluate_stmt): Likewise.
      	* tree-ssa-loop-ivopts.c (constant_multiple_of): Likewise.
      	* tree-ssa-loop-niter.c (split_to_var_and_offset)
      	(refine_value_range_using_guard, number_of_iterations_ne_max)
      	(number_of_iterations_lt_to_ne, number_of_iterations_lt)
      	(get_cst_init_from_scev, record_nonwrapping_iv)
      	(scev_var_range_cant_overflow): Likewise.
      	* tree-ssa-phiopt.c (minmax_replacement): Likewise.
      	* tree-ssa-pre.c (compute_avail): Likewise.
      	* tree-ssa-sccvn.c (vn_reference_fold_indirect): Likewise.
      	(vn_reference_maybe_forwprop_address, valueized_wider_op): Likewise.
      	* tree-ssa-structalias.c (get_constraint_for_ptr_offset): Likewise.
      	* tree-ssa-uninit.c (is_pred_expr_subset_of): Likewise.
      	* tree-ssanames.c (set_nonzero_bits, get_nonzero_bits): Likewise.
      	* tree-switch-conversion.c (collect_switch_conv_info, array_value_type)
      	(dump_case_nodes, try_switch_expansion): Likewise.
      	* tree-vect-loop-manip.c (vect_gen_vector_loop_niters): Likewise.
      	(vect_do_peeling): Likewise.
      	* tree-vect-patterns.c (vect_recog_bool_pattern): Likewise.
      	* tree-vect-stmts.c (vectorizable_load): Likewise.
      	* tree-vrp.c (compare_values_warnv, vrp_int_const_binop): Likewise.
      	(zero_nonzero_bits_from_vr, ranges_from_anti_range): Likewise.
      	(extract_range_from_binary_expr_1, adjust_range_with_scev): Likewise.
      	(overflow_comparison_p_1, register_edge_assert_for_2): Likewise.
      	(is_masked_range_test, find_switch_asserts, maybe_set_nonzero_bits)
      	(vrp_evaluate_conditional_warnv_with_ops, intersect_ranges): Likewise.
      	(range_fits_type_p, two_valued_val_range_p, vrp_finalize): Likewise.
      	(evrp_dom_walker::before_dom_children): Likewise.
      	* tree.c (cache_integer_cst, real_value_from_int_cst, integer_zerop)
      	(integer_all_onesp, integer_pow2p, integer_nonzerop, tree_log2)
      	(tree_floor_log2, tree_ctz, mem_ref_offset, tree_int_cst_sign_bit)
      	(tree_int_cst_sgn, get_unwidened, int_fits_type_p): Likewise.
      	(get_type_static_bounds, num_ending_zeros, drop_tree_overflow)
      	(get_range_pos_neg): Likewise.
      	* ubsan.c (ubsan_expand_ptr_ifn): Likewise.
      	* config/darwin.c (darwin_mergeable_constant_section): Likewise.
      	* config/aarch64/aarch64.c (aapcs_vfp_sub_candidate): Likewise.
      	* config/arm/arm.c (aapcs_vfp_sub_candidate): Likewise.
      	* config/avr/avr.c (avr_fold_builtin): Likewise.
      	* config/bfin/bfin.c (bfin_local_alignment): Likewise.
      	* config/msp430/msp430.c (msp430_attr): Likewise.
      	* config/nds32/nds32.c (nds32_insert_attributes): Likewise.
      	* config/powerpcspe/powerpcspe-c.c
      	(altivec_resolve_overloaded_builtin): Likewise.
      	* config/powerpcspe/powerpcspe.c (rs6000_aggregate_candidate)
      	(rs6000_expand_ternop_builtin): Likewise.
      	* config/rs6000/rs6000-c.c
      	(altivec_resolve_overloaded_builtin): Likewise.
      	* config/rs6000/rs6000.c (rs6000_aggregate_candidate): Likewise.
      	(rs6000_expand_ternop_builtin): Likewise.
      	* config/s390/s390.c (s390_handle_hotpatch_attribute): Likewise.
      
      gcc/ada/
      	* gcc-interface/decl.c (annotate_value): Use wi::to_wide when
      	operating on trees as wide_ints.
      
      gcc/c/
      	* c-parser.c (c_parser_cilk_clause_vectorlength): Use wi::to_wide when
      	operating on trees as wide_ints.
      	* c-typeck.c (build_c_cast, c_finish_omp_clauses): Likewise.
      	(c_tree_equal): Likewise.
      
      gcc/c-family/
      	* c-ada-spec.c (dump_generic_ada_node): Use wi::to_wide when
      	operating on trees as wide_ints.
      	* c-common.c (pointer_int_sum): Likewise.
      	* c-pretty-print.c (pp_c_integer_constant): Likewise.
      	* c-warn.c (match_case_to_enum_1): Likewise.
      	(c_do_switch_warnings): Likewise.
      	(maybe_warn_shift_overflow): Likewise.
      
      gcc/cp/
      	* cvt.c (ignore_overflows): Use wi::to_wide when
      	operating on trees as wide_ints.
      	* decl.c (check_array_designated_initializer): Likewise.
      	* mangle.c (write_integer_cst): Likewise.
      	* semantics.c (cp_finish_omp_clause_depend_sink): Likewise.
      
      gcc/fortran/
      	* target-memory.c (gfc_interpret_logical): Use wi::to_wide when
      	operating on trees as wide_ints.
      	* trans-const.c (gfc_conv_tree_to_mpz): Likewise.
      	* trans-expr.c (gfc_conv_cst_int_power): Likewise.
      	* trans-intrinsic.c (trans_this_image): Likewise.
      	(gfc_conv_intrinsic_bound): Likewise.
      	(conv_intrinsic_cobound): Likewise.
      
      gcc/lto/
      	* lto.c (compare_tree_sccs_1): Use wi::to_wide when
      	operating on trees as wide_ints.
      
      gcc/objc/
      	* objc-act.c (objc_decl_method_attributes): Use wi::to_wide when
      	operating on trees as wide_ints.
      
      From-SVN: r253595
      Richard Sandiford committed
  22. 04 Oct, 2017 1 commit
    • C: underline parameters in mismatching function calls · 8139a48e
      In r253096
        ("C++: underline parameters in mismatching function calls"
        aka 5d78d423a5f7a1d135c7bb678e82007678d1313c
          https://gcc.gnu.org/ml/gcc-patches/2017-09/msg01546.html )
      I updated the C++ FE's handling of mismatched types in function calls
      so that it underlines the pertinent param of the callee, rather than
      just the function name.
      
      The following patch does the same for the C frontend.
      
      Given e.g. this type mismatch:
      
        extern int callee (int one, const char *two, float three);
      
        int caller (int first, int second, float third)
        {
          return callee (first, second, third);
        }
      
      the C FE currently emits (trunk):
      
        test.c: In function 'caller':
        test.c:5:25: warning: passing argument 2 of 'callee' makes pointer from
        integer without a cast [-Wint-conversion]
           return callee (first, second, third);
                                 ^~~~~~
        test.c:1:12: note: expected 'const char *' but argument is of type 'int'
         extern int callee (int one, const char *two, float three);
                    ^~~~~~
      
      whereas with this patch the note underlines the pertinent param of
      the callee:
      
        test.c: In function 'caller':
        test.c:5:25: warning: passing argument 2 of 'callee' makes pointer from
        integer without a cast [-Wint-conversion]
           return callee (first, second, third);
                                 ^~~~~~
        test.c:1:41: note: expected 'const char *' but argument is of type 'int'
         extern int callee (int one, const char *two, float three);
                                     ~~~~~~~~~~~~^~~
      
      making the problem more obvious to the user.
      
      As with the C++ patch, the patch:
      
      (a) updates the locations of the params to cover the range of all
      of their tokens, putting the caret on the first character of the
      param name (if present), otherwise at the start of the first token
      (doing so requires adding a last_token_location to the c_parser, so
      we can determine the location of the last consumed token).
      
      (b) updates the "note" to use the param location, rather than the
      fndecl location
      
      gcc/c/ChangeLog:
      	* c-decl.c (push_parm_decl): Store c_parm's location into the
      	PARAM_DECL.
      	(build_c_parm): Add "loc" param and store it within the c_parm.
      	* c-parser.c (struct c_parser): Add "last_token_location" field.
      	(c_parser_consume_token): Store location of the token into the
      	new field.
      	(c_parser_declaration_or_fndef): Store params into DECL_ARGUMENTS
      	when handling a FUNCTION_DECL, if it doesn't already have them.
      	(c_parser_parameter_declaration): Generate a location for the
      	parameter, and pass it to the call to build_c_parm.
      	* c-tree.h (struct c_parm): Add field "loc".
      	(build_c_parm): Add location_t param.
      	* c-typeck.c (get_fndecl_argument_location): New function.
      	(inform_for_arg): New function.
      	(convert_for_assignment): Use inform_for_arg when dealing with
      	ic_argpass.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/diagnostic-range-bad-called-object.c: Update expected
      	underlining for param.
      	* gcc.dg/param-type-mismatch.c: Update expected results to reflect
      	highlighting of parameters; add test coverage for trivial
      	parameter decls, and for callback parameters.
      	* gcc.dg/pr68533.c: Update location of two errors to reflect
      	location of params.
      
      From-SVN: r253411
      David Malcolm committed
  23. 29 Sep, 2017 2 commits
    • c-attribs.c (handle_packed_attribute): Test DECL_C_BIT_FIELD rather than DECL_INITIAL. · 7d386d45
      c-family/
      	* c-attribs.c (handle_packed_attribute): Test DECL_C_BIT_FIELD
      	rather than DECL_INITIAL.
      	(common_handle_aligned_attribute): Likewise.
      c/
      	* c-decl.c (grokfield): Use SET_DECL_C_BIT_FIELD here if
      	width is non-NULL.
      	(finish_struct): Test DECL_C_BIT_FIELD instead of DECL_INITIAL,
      	don't SET_DECL_C_BIT_FIELD here.
      cp/
      	* class.c (check_bitfield_decl): Retrieve and clear width from
      	DECL_BIT_FIELD_REPRESENTATIVE rather than DECL_INITIAL.
      	(check_field_decls): Test DECL_BIT_FIELD_REPRESENTATIVE rather than
      	DECL_INITIAL.
      	(remove_zero_width_bit_fields): Adjust comment.
      	* decl2.c (grokbitfield): Stash width into
      	DECL_BIT_FIELD_REPRESENTATIVE rather than DECL_INITIAL.
      	* pt.c (tsubst_decl): For DECL_C_BIT_FIELD, tsubst_expr
      	DECL_BIT_FIELD_REPRESENTATIVE rather than DECL_INITIAL for width.
      objc/
      	* objc-act.c (check_ivars, gen_declaration): For OBJCPLUS look at
      	DECL_BIT_FIELD_REPRESENTATIVE rather than DECL_INITIAL.
      
      From-SVN: r253301
      Jakub Jelinek committed
    • re PR c/82340 (volatile ignored in compound literal) · 2a389958
      	PR c/82340
      	* c-decl.c (build_compound_literal): Use c_apply_type_quals_to_decl
      	instead of trying to set just TREE_READONLY manually.
      
      	* gcc.dg/tree-ssa/pr82340.c: New test.
      
      From-SVN: r253280
      Jakub Jelinek committed
  24. 16 Sep, 2017 1 commit
  25. 15 Sep, 2017 2 commits
    • Implement C11 excess precision semantics for conversions (PR c/82071). · bb75facd
      C11 semantics for excess precision (from N1531) are that an implicit
      conversion (from the usual arithmetic conversions, not by assignment)
      from integer to floating point has a result in the corresponding
      evaluation format of that floating-point type, so possibly with excess
      precision (whereas a cast or conversion by assignment from integer to
      floating point must produce a value without excess range or precision,
      as always).  This patch makes GCC support those semantics if
      flag_isoc11 (which in turn means that conditional expressions need to
      support generating a result with excess precision even if neither
      operand had excess precision).
      
      C99 is less than entirely clear in this regard, but my reading as
      outlined at <https://gcc.gnu.org/ml/gcc-patches/2008-11/msg00105.html>
      is that the results of conversions from integer to floating-point
      types are always expected to be representable in the target type
      without excess precision, and this patch conservatively keeps these
      semantics for pre-C11 (i.e. if an older standard is explicitly
      selected).
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.
      
      	PR c/82071
      
      gcc/c:
      	* c-typeck.c (ep_convert_and_check): Just call convert_and_check
      	for C11.
      	(build_conditional_expr): For C11, generate result with excess
      	precision when one argument is an integer and the other is of a
      	type using excess precision.
      
      gcc/testsuite:
      	* gcc.target/i386/excess-precision-8.c: New test.
      
      From-SVN: r252847
      Joseph Myers committed
    • common.opt (Wcast-align=strict): New warning option. · 1d933576
      2017-09-15  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * common.opt (Wcast-align=strict): New warning option.
              * doc/invoke.texi: Document -Wcast-align=strict.
      
      c:
      2017-09-15  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * c-typeck.c (build_c_cast): Implement -Wcast-align=strict.
      
      cp:
      2017-09-15  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * typeck.c (build_reinterpret_cast_1,
              build_const_cast_1): Implement -Wcast-align=strict.
      
      testsuite:
      2017-09-15  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * c-c++-common/Wcast-align.c: New test.
      
      From-SVN: r252832
      Bernd Edlinger committed
  26. 13 Sep, 2017 1 commit
  27. 12 Sep, 2017 1 commit
    • c-common.c (field_decl_cmp, [...]): Move to c/c-decl.c. · 6836632e
      	c-family/
      	* c-common.c (field_decl_cmp, resort_data, resort_field_decl_cmp,
      	resort_sorted_fields): Move to c/c-decl.c.
      	* c-common.h (field_decl_cmp, resort_sorted_fields): Delete.
      	(struct sorted_fields_type): Move to c/c-lang.h.
      
      	c/
      	* c-decl.c (field_decl_cmp, resort_data, resort_field_decl_cmp,
      	resort_sorted_fields): Moved from c-family/c-common.c.
      	* c-lang.h (struct sorted_fields_type): Moved from c-family/c-common.h.
      
      From-SVN: r252023
      Nathan Sidwell committed
  28. 01 Sep, 2017 1 commit
    • Fix excess precision handling of compound assignments (PR c/82071). · e035be33
      PR c/82071 reports how compound assignment operators such as += handle
      excess precision inconsistently with the same operation done with a
      plain assignment and binary operator.
      
      There were (at least) two problems with how compound assignments
      handled excess precision.  The EXCESS_PRECISION_EXPR for an argument
      with excess precision was removed too early, resulting in
      build_binary_op being called with an rhs operand whose type reflected
      the evaluation format, so not having sufficient information to achieve
      the intended semantics in all cases, and then the code called
      c_fully_fold on the results of build_binary_op without allowing for
      the possibility of an EXCESS_PRECISION_EXPR as the result, so leading
      to double rounding of the result (first to its semantic type, then to
      the type of the LHS of the assignment) instead of the intended single
      rounding.
      
      This patch fixes those problems by keeping EXCESS_PRECISION_EXPRs
      further through build_modify_expr (and build_atomic_assign which it
      calls) and only removing them locally where appropriate.
      
      Note that while this patch should achieve *consistency*, that's
      consistency with the understanding of C99 semantics that I originally
      intended to implement.  For the particular case in the testcase, C11
      semantics (from N1531) differ from that understanding of C99
      semantics, in that an implicit conversion of an integer to floating
      point can have excess precision.  I intend to implement those C11
      semantics separately (conditional on flag_isoc11) (which will also
      mean that building conditional expressions can produce a result with
      excess precision even when the arguments lack excess precision, where
      previously it could not), and not to close the bug until that is also
      done.
      
      Tested for x86_64-pc-linux-gnu.
      
      	PR c/82071
      gcc/c:
      	* c-typeck.c (build_atomic_assign): Handle argument with excess
      	precision.  Ensure any EXCESS_PRECISION_EXPR is present in
      	argument passed to build_binary_op and convert_for_assignment but
      	not for call to c_fully_fold.
      	(build_modify_expr): Do not remove EXCESS_PRECISION_EXPR early.
      	Ensure build_binary_op is called with argument with original
      	semantic type.  Avoid calling c_fully_fold with an
      	EXCESS_PRECISION_EXPR from build_binary_op.
      
      gcc/testsuite:
      	* gcc.target/i386/excess-precision-7.c: New test.
      
      From-SVN: r251603
      Joseph Myers committed