1. 10 Jan, 2018 5 commits
    • parser.c (cp_parser_std_attribute_spec): When token_pair::require_open /… · d90a2542
      parser.c (cp_parser_std_attribute_spec): When token_pair::require_open / require_close return false simply return...
      
      2018-01-10  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* parser.c (cp_parser_std_attribute_spec): When
              token_pair::require_open / require_close return false simply
      	return error_mark_node, avoid duplicate cp_parser_error about
      	expected '(' / ')', respectively.
      
      From-SVN: r256451
      Paolo Carlini committed
    • Preserving locations for variable-uses and constants (PR c++/43486) · 9a004410
      This patch implements location wrapper nodes, preserving source locations
      of the uses of variables and constants in various places in the
      C++ frontend: at the arguments at callsites, and for typeid, alignof,
      sizeof, and offsetof.
      
      For example, it allows the C++ FE to underline the pertinent argument
      for mismatching calls, for such expressions, improving:
      
      extern int callee (int one, const char *two, float three);
      
      int caller (int first, int second, float third)
      {
        return callee (first, second, third);
      }
      
      from
      
      test.cc: In function 'int caller(int, int, float)':
      test.cc:5:38: error: invalid conversion from 'int' to 'const char*' [-fpermissive]
         return callee (first, second, third);
                                            ^
      test.cc:1:41: note:   initializing argument 2 of 'int callee(int, const char*, float)'
       extern int callee (int one, const char *two, float three);
                                   ~~~~~~~~~~~~^~~
      
      to:
      
      test.cc: In function 'int caller(int, int, float)':
      test.cc:5:25: error: invalid conversion from 'int' to 'const char*' [-fpermissive]
         return callee (first, second, third);
                               ^~~~~~
      test.cc:1:41: note:   initializing argument 2 of 'int callee(int, const char*, float)'
       extern int callee (int one, const char *two, float three);
                                   ~~~~~~~~~~~~^~~
      
      This is the combination of the following patches:
      
        "[PATCH 01/14] C++: preserve locations within build_address"
           https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00883.html
      
        "[PATCH v2.4 of 02/14] Support for adding and stripping location_t wrapper nodes"
          https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00591.html
      
        "[PATCH] Eliminate location wrappers in tree_nop_conversion/STRIP_NOPS"
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01330.html
      
        "[PATCH v4 of 03/14] C++: add location_t wrapper nodes during parsing (minimal impl)"
          https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00660.html
      
        "[PATCH 04/14] Update testsuite to show improvements"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00891.html
      
        "[v3 of 05/14] C++: handle locations wrappers when calling warn_for_memset"
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01378.html
      
        "[PATCH 07/14] reject_gcc_builtin: strip any location wrappers"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00886.html
      
        "[v3 of PATCH 08/14] cp/tree.c: strip location wrappers in lvalue_kind"
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01433.html
      
        "[PATCH 09/14] Strip location wrappers in null_ptr_cst_p"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00888.html
      
        "[PATCH 11/14] Handle location wrappers in string_conv_p"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00890.html
      
        "[PATCH 12/14] C++: introduce null_node_p"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00894.html
      
        "[v3 of PATCH 13/14] c-format.c: handle location wrappers"
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01494.html
      
        "[PATCH 14/14] pp_c_cast_expression: don't print casts for location wrappers"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00893.html
      
        "[v3 of PATCH 15/14] Use fold_for_warn in get_atomic_generic_size"
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01380.html
      
        "[PATCH] Add selftest for "fold_for_warn (error_mark_node)""
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01385.html
      
      gcc/c-family/ChangeLog:
      	PR c++/43486
      	* c-common.c: Include "selftest.h".
      	(get_atomic_generic_size): Perform the test for integral type
      	before the range test for any integer constant, fixing indentation
      	of braces.  Call fold_for_warn before testing for an INTEGER_CST.
      	(reject_gcc_builtin): Strip any location wrapper from EXPR.
      	(selftest::test_fold_for_warn): New function.
      	(selftest::c_common_c_tests): New function.
      	(selftest::c_family_tests): Call it, and
      	selftest::c_pretty_print_c_tests.
      	* c-common.h (selftest::c_pretty_print_c_tests): New decl.
      	* c-format.c (check_format_arg): Convert VAR_P check to a
      	fold_for_warn.
      	* c-pretty-print.c: Include "selftest.h".
      	(pp_c_cast_expression): Don't print casts for location wrappers.
      	(selftest::assert_c_pretty_printer_output): New function.
      	(ASSERT_C_PRETTY_PRINTER_OUTPUT): New macro.
      	(selftest::test_location_wrappers): New function.
      	(selftest::c_pretty_print_c_tests): New function.
      	* c-warn.c (warn_for_memset): Call fold_for_warn on the arguments.
      
      gcc/cp/ChangeLog:
      	PR c++/43486
      	* call.c (null_ptr_cst_p): Strip location wrappers when
      	converting from '0' to a pointer type in C++11 onwards.
      	(conversion_null_warnings): Replace comparison with null_node with
      	call to null_node_p.
      	(build_over_call): Likewise.
      	* cp-gimplify.c (cp_fold): Remove the early bailout when
      	processing_template_decl.
      	* cp-lang.c (selftest::run_cp_tests): Call
      	selftest::cp_pt_c_tests and selftest::cp_tree_c_tests.
      	* cp-tree.h (cp_expr::maybe_add_location_wrapper): New method.
      	(selftest::run_cp_tests): Move decl to bottom of file.
      	(null_node_p): New inline function.
      	(selftest::cp_pt_c_tests): New decl.
      	(selftest::cp_tree_c_tests): New decl.
      	* cvt.c (build_expr_type_conversion): Replace comparison with
      	null_node with call to null_node_p.
      	* error.c (args_to_string): Likewise.
      	* except.c (build_throw): Likewise.
      	* mangle.c (write_expression): Skip location wrapper nodes.
      	* parser.c (literal_integer_zerop): New function.
      	(cp_parser_postfix_expression): Call maybe_add_location_wrapper on
      	the result for RID_TYPEID. Pass true for new "wrap_locations_p"
      	param of cp_parser_parenthesized_expression_list.  When calling
      	warn_for_memset, replace integer_zerop calls with
      	literal_integer_zerop, eliminating the double logical negation
      	cast to bool.  Eliminate the special-casing for CONST_DECL in
      	favor of the fold_for_warn within warn_for_memset.
      	(cp_parser_parenthesized_expression_list): Add "wrap_locations_p"
      	param, defaulting to false.  Convert "expr" to a cp_expr, and call
      	maybe_add_location_wrapper on it when wrap_locations_p is true.
      	(cp_parser_unary_expression): Call maybe_add_location_wrapper on
      	the result for RID_ALIGNOF and RID_SIZEOF.
      	(cp_parser_builtin_offsetof): Likewise.
      	* pt.c: Include "selftest.h".
      	(tsubst_copy): Handle location wrappers.
      	(tsubst_copy_and_build): Likewise.
      	(build_non_dependent_expr): Likewise.
      	(selftest::test_build_non_dependent_expr): New function.
      	(selftest::cp_pt_c_tests): New function.
      	* tree.c: Include "selftest.h".
      	(lvalue_kind): Handle VIEW_CONVERT_EXPR location wrapper nodes.
      	(selftest::test_lvalue_kind): New function.
      	(selftest::cp_tree_c_tests): New function.
      	* typeck.c (string_conv_p): Strip any location wrapper from "exp".
      	(cp_build_binary_op): Replace comparison with null_node with call
      	to null_node_p.
      	(build_address): Use location of operand when building address
      	expression.
      
      gcc/testsuite/ChangeLog:
      	PR c++/43486
      	* g++.dg/diagnostic/param-type-mismatch.C: Update expected results
      	to reflect that the arguments are correctly underlined.
      	* g++.dg/plugin/diagnostic-test-expressions-1.C: Add test coverage
      	for globals, params, locals and literals.
      	(test_sizeof): Directly test the location of "sizeof", rather than
      	when used in compound expressions.
      	(test_alignof): Likewise for "alignof".
      	(test_string_literals): Likewise for string literals.
      	(test_numeric_literals): Likewise for numeric literals.
      	(test_builtin_offsetof): Likewise for "__builtin_offsetof".
      	(test_typeid): Likewise for typeid.
      	(test_unary_plus): New.
      	* g++.dg/warn/Wformat-1.C: Add tests of pointer arithmetic on
      	format strings.
      
      gcc/ChangeLog:
      	PR c++/43486
      	* tree-core.h: Document EXPR_LOCATION_WRAPPER_P's usage of
      	"public_flag".
      	* tree.c (tree_nop_conversion): Return true for location wrapper
      	nodes.
      	(maybe_wrap_with_location): New function.
      	(selftest::check_strip_nops): New function.
      	(selftest::test_location_wrappers): New function.
      	(selftest::tree_c_tests): Call it.
      	* tree.h (STRIP_ANY_LOCATION_WRAPPER): New macro.
      	(maybe_wrap_with_location): New decl.
      	(EXPR_LOCATION_WRAPPER_P): New macro.
      	(location_wrapper_p): New inline function.
      	(tree_strip_any_location_wrapper): New inline function.
      
      From-SVN: r256448
      David Malcolm committed
    • re PR c++/82541 (Wduplicated-branches triggers in template context) · 6bebae75
      	PR c++/82541
      	* call.c (build_conditional_expr_1): Check complain before warning.
      	* pt.c (tsubst_copy_and_build) <case COND_EXPR>: Suppress
      	-Wduplicated-branches.
      
      	* g++.dg/warn/Wduplicated-branches4.C: New test.
      
      From-SVN: r256441
      Marek Polacek committed
    • re PR c++/81327 (cast to void* does not suppress -Wclass-memaccess) · e99ef408
      	PR c++/81327
      	* call.c (maybe_warn_class_memaccess): Add forward declaration.
      	Change last argument from tree * to const vec<tree, va_gc> *, adjust
      	args uses and check number of operands too.  Don't strip away any
      	nops.  Use maybe_constant_value when looking for INTEGER_CST args.
      	Deal with src argument not having pointer type.  Check
      	tree_fits_uhwi_p before calling tree_to_uhwi.  Remove useless
      	test.
      	(build_over_call): Call maybe_warn_class_memaccess here on the
      	original arguments.
      	(build_cxx_call): Rather than here on converted arguments.
      
      	* g++.dg/Wclass-memaccess-2.C: Don't expect a warning when explicitly
      	cast to void *.
      
      From-SVN: r256440
      Jakub Jelinek committed
    • re PR c++/81055 (ICE with invalid initializer for array new) · 143aa5cc
      /cp
      2018-01-10  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/81055
      	* init.c (build_vec_init): Avoid building an INIT_EXPR with
      	error_mark_node as second argument.
      
      /testsuite
      2018-01-10  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/81055
      	* g++.dg/cpp0x/new2.C: New.
      
      From-SVN: r256438
      Paolo Carlini committed
  2. 09 Jan, 2018 1 commit
  3. 03 Jan, 2018 7 commits
    • poly_int: TYPE_VECTOR_SUBPARTS · 928686b1
      This patch changes TYPE_VECTOR_SUBPARTS to a poly_uint64.  The value is
      encoded in the 10-bit precision field and was previously always stored
      as a simple log2 value.  The challenge was to use this 10 bits to
      encode the number of elements in variable-length vectors, so that
      we didn't need to increase the size of the tree.
      
      In practice the number of vector elements should always have the form
      N + N * X (where X is the runtime value), and as for constant-length
      vectors, N must be a power of 2 (even though X itself might not be).
      The patch therefore uses the low 8 bits to encode log2(N) and bit
      8 to select between constant-length and variable-length vectors.
      Targets without variable-length vectors continue to use the old scheme.
      
      A new valid_vector_subparts_p function tests whether a given number
      of elements can be encoded.  This is false for the vector modes that
      represent an LD3 or ST3 vector triple (which we want to treat as arrays
      of vectors rather than single vectors).
      
      Most of the patch is mechanical; previous patches handled the changes
      that weren't entirely straightforward.
      
      2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree.h (TYPE_VECTOR_SUBPARTS): Turn into a function and handle
      	polynomial numbers of units.
      	(SET_TYPE_VECTOR_SUBPARTS): Likewise.
      	(valid_vector_subparts_p): New function.
      	(build_vector_type): Remove temporary shim and take the number
      	of units as a poly_uint64 rather than an int.
      	(build_opaque_vector_type): Take the number of units as a
      	poly_uint64 rather than an int.
      	* tree.c (build_vector_from_ctor): Handle polynomial
      	TYPE_VECTOR_SUBPARTS.
      	(type_hash_canon_hash, type_cache_hasher::equal): Likewise.
      	(uniform_vector_p, vector_type_mode, build_vector): Likewise.
      	(build_vector_from_val): If the number of units is variable,
      	use build_vec_duplicate_cst for constant operands and
      	VEC_DUPLICATE_EXPR otherwise.
      	(make_vector_type): Remove temporary is_constant ().
      	(build_vector_type, build_opaque_vector_type): Take the number of
      	units as a poly_uint64 rather than an int.
      	(check_vector_cst): Handle polynomial TYPE_VECTOR_SUBPARTS and
      	VECTOR_CST_NELTS.
      	* cfgexpand.c (expand_debug_expr): Likewise.
      	* expr.c (count_type_elements, categorize_ctor_elements_1): Likewise.
      	(store_constructor, expand_expr_real_1): Likewise.
      	(const_scalar_mask_from_tree): Likewise.
      	* fold-const-call.c (fold_const_reduction): Likewise.
      	* fold-const.c (const_binop, const_unop, fold_convert_const): Likewise.
      	(operand_equal_p, fold_vec_perm, fold_ternary_loc): Likewise.
      	(native_encode_vector, vec_cst_ctor_to_array): Likewise.
      	(fold_relational_const): Likewise.
      	(native_interpret_vector): Likewise.  Change the size from an
      	int to an unsigned int.
      	* gimple-fold.c (gimple_fold_stmt_to_constant_1): Handle polynomial
      	TYPE_VECTOR_SUBPARTS.
      	(gimple_fold_indirect_ref, gimple_build_vector): Likewise.
      	(gimple_build_vector_from_val): Use VEC_DUPLICATE_EXPR when
      	duplicating a non-constant operand into a variable-length vector.
      	* hsa-brig.c (hsa_op_immed::emit_to_buffer): Handle polynomial
      	TYPE_VECTOR_SUBPARTS and VECTOR_CST_NELTS.
      	* ipa-icf.c (sem_variable::equals): Likewise.
      	* match.pd: Likewise.
      	* omp-simd-clone.c (simd_clone_subparts): Likewise.
      	* print-tree.c (print_node): Likewise.
      	* stor-layout.c (layout_type): Likewise.
      	* targhooks.c (default_builtin_vectorization_cost): Likewise.
      	* tree-cfg.c (verify_gimple_comparison): Likewise.
      	(verify_gimple_assign_binary): Likewise.
      	(verify_gimple_assign_ternary): Likewise.
      	(verify_gimple_assign_single): Likewise.
      	* tree-pretty-print.c (dump_generic_node): Likewise.
      	* tree-ssa-forwprop.c (simplify_vector_constructor): Likewise.
      	(simplify_bitfield_ref, is_combined_permutation_identity): Likewise.
      	* tree-vect-data-refs.c (vect_permute_store_chain): Likewise.
      	(vect_grouped_load_supported, vect_permute_load_chain): Likewise.
      	(vect_shift_permute_load_chain): Likewise.
      	* tree-vect-generic.c (nunits_for_known_piecewise_op): Likewise.
      	(expand_vector_condition, optimize_vector_constructor): Likewise.
      	(lower_vec_perm, get_compute_type): Likewise.
      	* tree-vect-loop.c (vect_determine_vectorization_factor): Likewise.
      	(get_initial_defs_for_reduction, vect_transform_loop): Likewise.
      	* tree-vect-patterns.c (vect_recog_bool_pattern): Likewise.
      	(vect_recog_mask_conversion_pattern): Likewise.
      	* tree-vect-slp.c (vect_supported_load_permutation_p): Likewise.
      	(vect_get_constant_vectors, vect_transform_slp_perm_load): Likewise.
      	* tree-vect-stmts.c (perm_mask_for_reverse): Likewise.
      	(get_group_load_store_type, vectorizable_mask_load_store): Likewise.
      	(vectorizable_bswap, simd_clone_subparts, vectorizable_assignment)
      	(vectorizable_shift, vectorizable_operation, vectorizable_store)
      	(vectorizable_load, vect_is_simple_cond, vectorizable_comparison)
      	(supportable_widening_operation): Likewise.
      	(supportable_narrowing_operation): Likewise.
      	* tree-vector-builder.c (tree_vector_builder::binary_encoded_nelts):
      	Likewise.
      	* varasm.c (output_constant): Likewise.
      
      gcc/ada/
      	* gcc-interface/utils.c (gnat_types_compatible_p): Handle
      	polynomial TYPE_VECTOR_SUBPARTS.
      
      gcc/brig/
      	* brigfrontend/brig-to-generic.cc (get_unsigned_int_type): Handle
      	polynomial TYPE_VECTOR_SUBPARTS.
      	* brigfrontend/brig-util.h (gccbrig_type_vector_subparts): Likewise.
      
      gcc/c-family/
      	* c-common.c (vector_types_convertible_p, c_build_vec_perm_expr)
      	(convert_vector_to_array_for_subscript): Handle polynomial
      	TYPE_VECTOR_SUBPARTS.
      	(c_common_type_for_mode): Check valid_vector_subparts_p.
      	* c-pretty-print.c (pp_c_initializer_list): Handle polynomial
      	VECTOR_CST_NELTS.
      
      gcc/c/
      	* c-typeck.c (comptypes_internal, build_binary_op): Handle polynomial
      	TYPE_VECTOR_SUBPARTS.
      
      gcc/cp/
      	* constexpr.c (cxx_eval_array_reference): Handle polynomial
      	VECTOR_CST_NELTS.
      	(cxx_fold_indirect_ref): Handle polynomial TYPE_VECTOR_SUBPARTS.
      	* call.c (build_conditional_expr_1): Likewise.
      	* decl.c (cp_finish_decomp): Likewise.
      	* mangle.c (write_type): Likewise.
      	* typeck.c (structural_comptypes): Likewise.
      	(cp_build_binary_op): Likewise.
      	* typeck2.c (process_init_constructor_array): Likewise.
      
      gcc/fortran/
      	* trans-types.c (gfc_type_for_mode): Check valid_vector_subparts_p.
      
      gcc/lto/
      	* lto-lang.c (lto_type_for_mode): Check valid_vector_subparts_p.
      	* lto.c (hash_canonical_type): Handle polynomial TYPE_VECTOR_SUBPARTS.
      
      gcc/go/
      	* go-lang.c (go_langhook_type_for_mode): Check valid_vector_subparts_p.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r256197
      Richard Sandiford committed
    • re PR c++/83555 (Unnecessary null check when static_cast is used with references.) · 830421fc
      	PR c++/83555
      	* typeck.c (build_static_cast_1): For static casts to reference types,
      	call build_base_path with flag_delete_null_pointer_checks as nonnull
      	instead of always false.  When -fsanitize=null, call
      	ubsan_maybe_instrument_reference on the NULL reference INTEGER_CST.
      	* cp-gimplify.c (cp_genericize_r): Don't walk subtrees of UBSAN_NULL
      	call if the first argument is INTEGER_CST with REFERENCE_TYPE.
      
      	* g++.dg/opt/pr83555.C: New test.
      	* g++.dg/ubsan/pr83555.C: New test.
      
      From-SVN: r256186
      Jakub Jelinek committed
    • [PR c++/83667] Fix tree_dump ICE · ce473498
      https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00148.html
      	PR c++/83667
      	* method.c (make_alias_for): Copy DECL_CONTEXT.
      
      	PR c++/83667
      	* g++.dg/ipa/pr83667.C: New.
      
      From-SVN: r256179
      Nathan Sidwell committed
    • re PR c++/83592 (Annoying -Wparentheses warnings) · e164534f
      	PR c++/83592
      	* decl.c (grokdeclarator): Don't warn about MVP in typename context.
      
      	* g++.dg/warn/mvp2.C: New test.
      
      From-SVN: r256176
      Marek Polacek committed
    • re PR preprocessor/83602 (ICE in cpp_macro_definition_location(cpp_hashnode*) on invalid code) · e30947eb
      	PR preprocessor/83602
      	* name-lookup.c (lookup_name_fuzzy): Don't use macro_use_before_def
      	for builtin macros.
      
      	* g++.dg/cpp/pr83602.C: New test.
      
      From-SVN: r256175
      Jakub Jelinek committed
    • re PR c++/83634 (ICE in useless_type_conversion_p, at gimple-expr.c:86) · 19c37faa
      	PR c++/83634
      	* cp-gimplify.c (cp_fold) <case NOP_EXPR>: If the operand folds to
      	error_mark_node, return error_mark_node.
      
      	* g++.dg/parse/pr83634.C: New test.
      
      From-SVN: r256174
      Jakub Jelinek committed
    • Update copyright years. · 85ec4feb
      From-SVN: r256169
      Jakub Jelinek committed
  4. 02 Jan, 2018 2 commits
  5. 22 Dec, 2017 2 commits
    • re PR debug/83550 (Bad location of DW_TAG_structure_type with forward declaration since r224161) · 14ec014e
      	PR debug/83550
      	* c-decl.c (finish_struct): Set DECL_SOURCE_LOCATION on
      	TYPE_STUB_DECL and call rest_of_type_compilation before processing
      	incomplete vars rather than after it.
      
      	* c-c++-common/dwarf2/pr83550.c: New test.
      
      From-SVN: r255981
      Jakub Jelinek committed
    • extend.texi (Loop-Specific Pragmas): Document pragma GCC unroll. · 170a8bd6
      	* doc/extend.texi (Loop-Specific Pragmas): Document pragma GCC unroll.
      c-family/
      	* c-pragma.c (init_pragma): Register pragma GCC unroll.
      	* c-pragma.h (enum pragma_kind): Add PRAGMA_UNROLL.
      c/
      	* c-parser.c (c_parser_while_statement): Add unroll parameter and
      	build ANNOTATE_EXPR if present.  Add 3rd operand to ANNOTATE_EXPR.
      	(c_parser_do_statement): Likewise.
      	(c_parser_for_statement): Likewise.
      	(c_parser_statement_after_labels): Adjust calls to above.
      	(c_parse_pragma_ivdep): New static function.
      	(c_parser_pragma_unroll): Likewise.
      	(c_parser_pragma) <PRAGMA_IVDEP>: Add support for pragma Unroll.
      	<PRAGMA_UNROLL>: New case.
      cp/
      	* constexpr.c (cxx_eval_constant_expression) <ANNOTATE_EXPR>: Remove
      	assertion on 2nd operand.
      	(potential_constant_expression_1): Likewise.
      	* cp-tree.def (RANGE_FOR_STMT): Take a 5th operand.
      	* cp-tree.h (RANGE_FOR_UNROLL): New macro.
      	(cp_convert_range_for): Adjust prototype.
      	(finish_while_stmt_cond): Likewise.
      	(finish_do_stmt): Likewise.
      	(finish_for_cond): Likewise.
      	* init.c (build_vec_init): Adjut call to finish_for_cond.
      	* parser.c (cp_parser_statement): Adjust call to
      	cp_parser_iteration_statement.
      	(cp_parser_for): Add unroll parameter and pass it in calls to
      	cp_parser_range_for and cp_parser_c_for.
      	(cp_parser_c_for): Add unroll parameter and pass it in call to
      	finish_for_cond.
      	(cp_parser_range_for): Add unroll parameter, set in on RANGE_FOR_STMT
      	and pass it in call to cp_convert_range_for.
      	(cp_convert_range_for): Add unroll parameter and pass it in call to
      	finish_for_cond.
      	(cp_parser_iteration_statement): Add unroll parameter and pass it in
      	calls to finish_while_stmt_cond, finish_do_stmt and cp_parser_for.
      	(cp_parser_pragma_ivdep): New static function.
      	(cp_parser_pragma_unroll): Likewise.
      	(cp_parser_pragma) <PRAGMA_IVDEP>: Add support for pragma Unroll.
      	<PRAGMA_UNROLL>: New case.
      	* pt.c (tsubst_expr) <FOR_STMT>: Adjust call to finish_for_cond.
      	<RANGE_FOR_STMT>: Pass unrolling factor to cp_convert_range_for.
      	<WHILE_STMT>: Adjust call to finish_while_stmt_cond.
      	<DO_STMT>: Adjust call to finish_do_stmt.
      	* semantics.c (finish_while_stmt_cond): Add unroll parameter and
      	build ANNOTATE_EXPR if present.
      	(finish_do_stmt): Likewise.
      	(finish_for_cond): Likewise.
      	(begin_range_for_stmt): Build RANGE_FOR_STMT with 5th operand.
      fortran/
      	* array.c (gfc_copy_iterator): Copy unroll field.
      	* decl.c (directive_unroll): New global variable.
      	(gfc_match_gcc_unroll): New function.
      	* gfortran.h (gfc_iterator]): Add unroll field.
      	(directive_unroll): Declare:
      	* match.c (gfc_match_do): Use memset to initialize the iterator.
      	* match.h (gfc_match_gcc_unroll): New prototype.
      	* parse.c (decode_gcc_attribute): Match "unroll".
      	(parse_do_block): Set iterator's unroll.
      	(parse_executable): Diagnose misplaced unroll directive.
      	* trans-stmt.c (gfc_trans_simple_do) Annotate loop condition with
      	annot_expr_unroll_kind.
      	(gfc_trans_do): Likewise.
      	* gfortran.texi (GNU Fortran Compiler Directives): Split section into
      	subections 'ATTRIBUTES directive' and 'UNROLL directive'.
      
      From-SVN: r255973
      Eric Botcazou committed
  6. 21 Dec, 2017 2 commits
    • [PR c++/83406] deducing lambda type · c0a499af
      https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01432.html
      	PR c++/83406
      	* parser.c (cp_parser_lambda_body): Remove obsolete
      	single-return-statement handling.
      
      	PR c++/83406
      	* g++.dg/cpp0x/lambda/lambda-ice15.C: Adjust error.
      	* g++.dg/cpp1y/pr83406.C: New.
      
      From-SVN: r255950
      Nathan Sidwell committed
    • poly_int: get_inner_reference & co. · f37fac2b
      This patch makes get_inner_reference and ptr_difference_const return the
      bit size and bit position as poly_int64s rather than HOST_WIDE_INTS.
      The non-mechanical changes were handled by previous patches.
      
      2017-12-21  Richard Sandiford  <richard.sandiford@linaro.org>
      	    Alan Hayward  <alan.hayward@arm.com>
      	    David Sherwood  <david.sherwood@arm.com>
      
      gcc/
      	* tree.h (get_inner_reference): Return the bitsize and bitpos
      	as poly_int64_pods rather than HOST_WIDE_INT.
      	* fold-const.h (ptr_difference_const): Return the pointer difference
      	as a poly_int64_pod rather than a HOST_WIDE_INT.
      	* expr.c (get_inner_reference): Return the bitsize and bitpos
      	as poly_int64_pods rather than HOST_WIDE_INT.
      	(expand_expr_addr_expr_1, expand_expr_real_1): Track polynomial
      	offsets and sizes.
      	* fold-const.c (make_bit_field_ref): Take the bitpos as a poly_int64
      	rather than a HOST_WIDE_INT.  Update call to get_inner_reference.
      	(optimize_bit_field_compare): Update call to get_inner_reference.
      	(decode_field_reference): Likewise.
      	(fold_unary_loc): Track polynomial offsets and sizes.
      	(split_address_to_core_and_offset): Return the bitpos as a
      	poly_int64_pod rather than a HOST_WIDE_INT.
      	(ptr_difference_const): Likewise for the pointer difference.
      	* asan.c (instrument_derefs): Track polynomial offsets and sizes.
      	* config/mips/mips.c (r10k_safe_mem_expr_p): Likewise.
      	* dbxout.c (dbxout_expand_expr): Likewise.
      	* dwarf2out.c (loc_list_for_address_of_addr_expr_of_indirect_ref)
      	(loc_list_from_tree_1, fortran_common): Likewise.
      	* gimple-laddress.c (pass_laddress::execute): Likewise.
      	* gimple-ssa-store-merging.c (find_bswap_or_nop_load): Likewise.
      	* gimplify.c (gimplify_scan_omp_clauses): Likewise.
      	* simplify-rtx.c (delegitimize_mem_from_attrs): Likewise.
      	* tree-affine.c (tree_to_aff_combination): Likewise.
      	(get_inner_reference_aff): Likewise.
      	* tree-data-ref.c (split_constant_offset_1): Likewise.
      	(dr_analyze_innermost): Likewise.
      	* tree-scalar-evolution.c (interpret_rhs_expr): Likewise.
      	* tree-sra.c (ipa_sra_check_caller): Likewise.
      	* tree-vect-data-refs.c (vect_check_gather_scatter): Likewise.
      	* ubsan.c (maybe_instrument_pointer_overflow): Likewise.
      	(instrument_bool_enum_load, instrument_object_size): Likewise.
      	* gimple-ssa-strength-reduction.c (slsr_process_ref): Update call
      	to get_inner_reference.
      	* hsa-gen.c (gen_hsa_addr): Likewise.
      	* sanopt.c (maybe_optimize_ubsan_ptr_ifn): Likewise.
      	* tsan.c (instrument_expr): Likewise.
      	* match.pd: Update call to ptr_difference_const.
      
      gcc/ada/
      	* gcc-interface/trans.c (Attribute_to_gnu): Track polynomial
      	offsets and sizes.
      	* gcc-interface/utils2.c (build_unary_op): Likewise.
      
      gcc/cp/
      	* constexpr.c (check_automatic_or_tls): Track polynomial
      	offsets and sizes.
      
      Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
      Co-Authored-By: David Sherwood <david.sherwood@arm.com>
      
      From-SVN: r255914
      Richard Sandiford committed
  7. 19 Dec, 2017 4 commits
    • re PR c++/82593 (Internal compiler error: in process_init_constructor_array, at cp/typeck2.c:1294) · 1c97d579
      /cp
      2017-12-19  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/82593
      	* decl.c (check_array_designated_initializer): Not static.
      	* cp-tree.h (check_array_designated_initializer): Declare.
      	* typeck2.c (process_init_constructor_array): Call the latter.
      	* parser.c (cp_parser_initializer_list): Check the return value
      	of require_potential_rvalue_constant_expression.
      
      /testsuite
      2017-12-19  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	PR c++/82593
      	* g++.dg/cpp0x/desig2.C: New.
      	* g++.dg/cpp0x/desig3.C: Likewise.
      	* g++.dg/cpp0x/desig4.C: Likewise.
      
      From-SVN: r255845
      Paolo Carlini committed
    • PR c++/83394 - always_inline vs. noinline no longer diagnosed · 5837edca
      PR c++/83394 - always_inline vs. noinline no longer diagnosed
      PR c++/83322 - ICE: tree check: expected class ‘type’, have ‘exceptional’
      
      gcc/cp/ChangeLog:
      
      	PR c++/83394
      	PR c++/83322
      	* decl2.c (cplus_decl_attributes): Look up member functions
      	in the scope of their class.
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/83394
      	* g++.dg/Wattributes-3.C: New test.
      	* g++.dg/Wattributes-4.C: New test.
      	* g++.dg/Wattributes-5.C: New test.
      
      From-SVN: r255844
      Martin Sebor committed
    • read-rtl.c (parse_reg_note_name): Replace Yoda conditions with typical order conditions. · 01512446
      	* read-rtl.c (parse_reg_note_name): Replace Yoda conditions with
      	typical order conditions.
      	* sel-sched.c (extract_new_fences_from): Likewise.
      	* config/visium/constraints.md (J, K, L): Likewise.
      	* config/visium/predicates.md (const_shift_operand): Likewise.
      	* config/visium/visium.c (visium_legitimize_address,
      	visium_legitimize_reload_address): Likewise.
      	* config/m68k/m68k.c (output_reg_adjust, emit_reg_adjust): Likewise.
      	* config/arm/arm.c (arm_block_move_unaligned_straight): Likewise.
      	* config/avr/constraints.md (Y01, Ym1, Y02, Ym2): Likewise.
      	* config/avr/avr-log.c (avr_vdump, avr_log_set_avr_log,
      	SET_DUMP_DETAIL): Likewise.
      	* config/avr/predicates.md (const_8_16_24_operand): Likewise.
      	* config/avr/avr.c (STR_PREFIX_P, avr_popcount_each_byte,
      	avr_is_casesi_sequence, avr_casei_sequence_check_operands,
      	avr_set_core_architecture, avr_set_current_function,
      	avr_legitimize_reload_address, avr_asm_len, avr_print_operand,
      	output_movqi, output_movsisf, avr_out_plus, avr_out_bitop,
      	avr_out_fract, avr_adjust_insn_length, avr_encode_section_info,
      	avr_2word_insn_p, output_reload_in_const, avr_has_nibble_0xf,
      	avr_map_decompose, avr_fold_builtin): Likewise.
      	* config/avr/driver-avr.c (avr_devicespecs_file): Likewise.
      	* config/avr/gen-avr-mmcu-specs.c (str_prefix_p, print_mcu): Likewise.
      	* config/i386/i386.c (ix86_parse_stringop_strategy_string): Likewise.
      	* config/m32c/m32c-pragma.c (m32c_pragma_memregs): Likewise.
      	* config/m32c/m32c.c (m32c_conditional_register_usage,
      	m32c_address_cost): Likewise.
      	* config/m32c/predicates.md (shiftcount_operand,
      	longshiftcount_operand): Likewise.
      	* config/iq2000/iq2000.c (iq2000_expand_prologue): Likewise.
      	* config/nios2/nios2.c (nios2_handle_custom_fpu_insn_option,
      	can_use_cdx_ldstw): Likewise.
      	* config/nios2/nios2.h (CDX_REG_P): Likewise.
      	* config/cr16/cr16.h (RETURN_ADDR_RTX, REGNO_MODE_OK_FOR_BASE_P):
      	Likewise.
      	* config/cr16/cr16.md (*mov<mode>_double): Likewise.
      	* config/cr16/cr16.c (cr16_create_dwarf_for_multi_push): Likewise.
      	* config/h8300/h8300.c (h8300_rtx_costs, get_shift_alg): Likewise.
      	* config/vax/constraints.md (U06, U08, U16, CN6, S08, S16): Likewise.
      	* config/vax/vax.c (adjacent_operands_p): Likewise.
      	* config/ft32/constraints.md (L, b, KA): Likewise.
      	* config/ft32/ft32.c (ft32_load_immediate, ft32_expand_prologue):
      	Likewise.
      	* cfgexpand.c (expand_stack_alignment): Likewise.
      	* gcse.c (insert_expr_in_table): Likewise.
      	* print-rtl.c (rtx_writer::print_rtx_operand_codes_E_and_V): Likewise.
      	* cgraphunit.c (cgraph_node::expand): Likewise.
      	* ira-build.c (setup_min_max_allocno_live_range_point): Likewise.
      	* emit-rtl.c (add_insn): Likewise.
      	* input.c (dump_location_info): Likewise.
      	* passes.c (NEXT_PASS): Likewise.
      	* read-rtl-function.c (parse_note_insn_name,
      	function_reader::read_rtx_operand_r, function_reader::parse_mem_expr):
      	Likewise.
      	* sched-rgn.c (sched_rgn_init): Likewise.
      	* diagnostic-show-locus.c (layout::show_ruler): Likewise.
      	* combine.c (find_split_point, simplify_if_then_else, force_to_mode,
      	if_then_else_cond, simplify_shift_const_1, simplify_comparison): Likewise.
      	* explow.c (eliminate_constant_term): Likewise.
      	* final.c (leaf_renumber_regs_insn): Likewise.
      	* cfgrtl.c (print_rtl_with_bb): Likewise.
      	* genhooks.c (emit_init_macros): Likewise.
      	* poly-int.h (maybe_ne, maybe_le, maybe_lt): Likewise.
      	* tree-data-ref.c (conflict_fn): Likewise.
      	* selftest.c (assert_streq): Likewise.
      	* expr.c (store_constructor_field, expand_expr_real_1): Likewise.
      	* fold-const.c (fold_range_test, extract_muldiv_1, fold_truth_andor,
      	fold_binary_loc, multiple_of_p): Likewise.
      	* reload.c (push_reload, find_equiv_reg): Likewise.
      	* et-forest.c (et_nca, et_below): Likewise.
      	* dbxout.c (dbxout_symbol_location): Likewise.
      	* reorg.c (relax_delay_slots): Likewise.
      	* dojump.c (do_compare_rtx_and_jump): Likewise.
      	* gengtype-parse.c (type): Likewise.
      	* simplify-rtx.c (simplify_gen_ternary, simplify_gen_relational,
      	simplify_const_relational_operation): Likewise.
      	* reload1.c (do_output_reload): Likewise.
      	* dumpfile.c (get_dump_file_info_by_switch): Likewise.
      	* gengtype.c (type_for_name): Likewise.
      	* gimple-ssa-sprintf.c (format_directive): Likewise.
      ada/
      	* gcc-interface/trans.c (Loop_Statement_to_gnu): Replace Yoda
      	conditions with typical order conditions.
      	* gcc-interface/misc.c (gnat_get_array_descr_info,
      	default_pass_by_ref): Likewise.
      	* gcc-interface/decl.c (gnat_to_gnu_entity): Likewise.
      	* adaint.c (__gnat_tmp_name): Likewise.
      c-family/
      	* known-headers.cc (get_stdlib_header_for_name): Replace Yoda
      	conditions with typical order conditions.
      c/
      	* c-typeck.c (comptypes_internal, function_types_compatible_p,
      	perform_integral_promotions, digest_init): Replace Yoda conditions
      	with typical order conditions.
      	* c-decl.c (check_bitfield_type_and_width): Likewise.
      cp/
      	* name-lookup.c (get_std_name_hint): Replace Yoda conditions with
      	typical order conditions.
      	* class.c (check_bitfield_decl): Likewise.
      	* pt.c (convert_template_argument): Likewise.
      	* decl.c (duplicate_decls): Likewise.
      	* typeck.c (commonparms): Likewise.
      fortran/
      	* scanner.c (preprocessor_line): Replace Yoda conditions with typical
      	order conditions.
      	* dependency.c (check_section_vs_section): Likewise.
      	* trans-array.c (gfc_conv_expr_descriptor): Likewise.
      jit/
      	* jit-playback.c (get_type, playback::compile_to_file::copy_file,
      	playback::context::acquire_mutex): Replace Yoda conditions with
      	typical order conditions.
      	* libgccjit.c (gcc_jit_context_new_struct_type,
      	gcc_jit_struct_set_fields, gcc_jit_context_new_union_type,
      	gcc_jit_context_new_function, gcc_jit_timer_pop): Likewise.
      	* jit-builtins.c (matches_builtin): Likewise.
      	* jit-recording.c (recording::compound_type::set_fields,
      	recording::fields::write_reproducer, recording::rvalue::set_scope,
      	recording::function::validate): Likewise.
      	* jit-logging.c (logger::decref): Likewise.
      
      From-SVN: r255831
      Jakub Jelinek committed
    • cp-tree.h: Fix typo in comment. · d17fddaa
      2017-12-19  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* cp-tree.h: Fix typo in comment.
      
      From-SVN: r255815
      Paolo Carlini committed
  8. 18 Dec, 2017 3 commits
  9. 15 Dec, 2017 6 commits
    • re PR c++/83205 (ICE on structured binding with ill-formed negative std::tuple_size<T>::value) · 38f4bea8
      	PR c++/83205
      	* decl.c (cp_finish_decomp): Handle the case when tsize is not
      	error_mark_node, but doesn't fit into uhwi.  Split up count != eltscnt
      	and !tree_fits_uhwi_p (tsize) error_at calls into error_n and inform_n
      	to handle plural forms properly.
      
      	* g++.dg/cpp1z/decomp3.C: Adjust for structured binding count
      	mismatch diagnostics split into error and warning with plural
      	forms.
      	* g++.dg/cpp1z/decomp10.C: Likewise.
      	* g++.dg/cpp1z/decomp32.C: New test.
      
      From-SVN: r255706
      Jakub Jelinek committed
    • re PR c++/81197 (ICE with structured binding and lifetime-extended temporaries) · 70356f77
      	PR c++/81197
      	* cp-tree.h (cp_maybe_mangle_decomp): Declare.
      	* decl.c (cp_maybe_mangle_decomp): New function.
      	(cp_finish_decomp): Don't SET_DECL_ASSEMBLER_NAME here.
      	* parser.c (cp_convert_range_for,
      	cp_parser_decomposition_declaration): Call cp_maybe_mangle_decomp.
      	* pt.c (tsubst_expr): Likewise.
      	* mangle.c (find_decomp_unqualified_name): New function.
      	(write_unqualified_name): Handle DECL_DECOMPOSITION_P
      	where DECL_ASSEMBLER_NAME is already set.
      
      	* g++.dg/cpp1z/decomp34.C: New test.
      
      From-SVN: r255705
      Jakub Jelinek committed
    • re PR c++/80135 (ICE in output_constructor_regular_field, at varasm.c:4968) · a8c55cac
      	PR c++/80135
      	PR c++/81922
      	* typeck2.c (digest_init_r): Change nested argument type from bool to
      	int.  Use code instead of TREE_CODE (type) where possible.  If
      	nested == 2, diagnose initialization of flexible array member with
      	STRING_CST.  Pass nested to process_init_constructor.  Formatting fix.
      	(digest_init, digest_init_flags): Adjust digest_init_r caller.
      	(massage_init_elt): Add nested argument.  Pass 2 instead of 1 to
      	digest_init_r's nested argument if nested is non-zero.
      	(process_init_constructor_array): Add nested argument.  If nested == 2,
      	diagnose initialization of flexible array member with non-empty
      	braced enclosed list.  Pass nested to massage_init_elt.
      	(process_init_constructor_record, process_init_constructor_union): Add
      	nested argument, pass it to massage_init_elt.
      	(process_init_constructor): Add nested argument, pass it to
      	process_init_constructor_{array,record,union}.
      	* init.c (find_field_init): Renamed to ...
      	(find_flexarray_init): ... this.  Return NULL_TREE if init is
      	error_mark_node.  Don't look through nested CONSTRUCTORs.
      	(warn_placement_new_too_small): Adjust caller.
      
      	* g++.dg/warn/Wplacement-new-size-1.C (fBx1): Initialize nested
      	flexible array member only with {}.  Add dg-warning.
      	(fBx2, fBx3): Remove.
      	* g++.dg/warn/Wplacement-new-size-2.C (fBx1): Initialize nested
      	flexible array member only with {}.  Add dg-warning.
      	(fBx2, fBx3): Remove.
      	* g++.dg/warn/Wplacement-new-size-6.C: New test.
      	* g++.dg/ext/flexary13.C (main): Remove test for initialization
      	of nested flexible array member with non-empty initializer.
      	* g++.dg/ext/flexary25.C: New test.
      	* g++.dg/ext/flexary26.C: New test.
      	* g++.dg/ext/flexary27.C: New test.
      	* g++.dg/parse/pr43765.C: Expect diagnostics about initialization
      	of nested flexible array member with non-empty initializer.  Expect
      	C++2A diagnostics about mixing of designated and non-designated
      	initializers.
      
      From-SVN: r255703
      Jakub Jelinek committed
    • re PR c++/83217 (Compiler segfault: structured binding by reference to a… · e3a661b4
      re PR c++/83217 (Compiler segfault: structured binding by reference to a templated type via a pointer)
      
      	PR c++/83217
      	* decl.c (cp_finish_decomp): If decl's type is REFERENCE_TYPE,
      	call complete_type (TREE_TYPE (type)).
      
      	* g++.dg/cpp1z/decomp33.C: New test.
      
      From-SVN: r255702
      Jakub Jelinek committed
    • tree-core.h (struct attribute_spec): Swap affects_type_identity and handler fields. · 4849deb1
      	* tree-core.h (struct attribute_spec): Swap affects_type_identity and
      	handler fields.
      	* config/alpha/alpha.c (vms_attribute_table): Swap
      	affects_type_identity and handler fields, adjust comments.
      	* config/mips/mips.c (mips_attribute_table): Likewise.
      	* config/visium/visium.c (visium_attribute_table): Likewise.
      	* config/epiphany/epiphany.c (epiphany_attribute_table): Likewise.
      	* config/microblaze/microblaze.c (microblaze_attribute_table):
      	Likewise.
      	* config/spu/spu.c (spu_attribute_table): Likewise.
      	* config/mcore/mcore.c (mcore_attribute_table): Likewise.
      	* config/arc/arc.c (arc_attribute_table): Likewise.
      	* config/m68k/m68k.c (m68k_attribute_table): Likewise.
      	* config/v850/v850.c (v850_handle_interrupt_attribute,
      	v850_handle_data_area_attribute): Formatting fixes.
      	(v850_attribute_table): Swap affects_type_identity and handler
      	fields, adjust comments.
      	* config/m32r/m32r.c (m32r_attribute_table): Likewise.
      	* config/arm/arm.c (arm_attribute_table): Likewise.
      	* config/avr/avr.c (avr_attribute_table): Likewise.
      	* config/s390/s390.c (s390_attribute_table): Likewise.
      	* config/sh/sh.c (sh_attribute_table): Likewise.
      	* config/i386/i386.c (ix86_handle_cconv_attribute,
      	ix86_handle_callee_pop_aggregate_return): Formatting fixes.
      	(ix86_attribute_table): Swap affects_type_identity and handler
      	fields, adjust comments.
      	* config/i386/cygming.h (SUBTARGET_ATTRIBUTE_TABLE): Likewise.
      	* config/sparc/sparc.c (sparc_attribute_table): Likewise.
      	* config/m32c/m32c.c (m32c_attribute_table): Likewise.
      	* config/sol2.h (SOLARIS_ATTRIBUTE_TABLE): Likewise.
      	* config/ia64/ia64.c (ia64_attribute_table): Likewise.
      	* config/msp430/msp430.c (msp430_attribute_table): Likewise.
      	* config/rx/rx.c (rx_attribute_table): Likewise.
      	* config/cr16/cr16.c (cr16_attribute_table): Likewise.
      	* config/h8300/h8300.c (h8300_attribute_table): Likewise.
      	* config/nvptx/nvptx.c (nvptx_attribute_table): Likewise.
      	* config/powerpcspe/powerpcspe.c (rs6000_attribute_table): Likewise.
      	* config/darwin.h (SUBTARGET_ATTRIBUTE_TABLE): Likewise.
      	* config/stormy16/stormy16.c (xstormy16_attribute_table): Likewise.
      	* config/bfin/bfin.c (bfin_attribute_table): Likewise.
      	* config/rs6000/rs6000.c (rs6000_attribute_table): Likewise.
      	* config/rl78/rl78.c (rl78_attribute_table): Likewise.
      	* config/nds32/nds32.c (nds32_attribute_table): Likewise.
      	* doc/plugins.texi (user_attr): Likewise.  Add NULL for
      	exclude.
      	* attribs.c (empty_attribute_table): Swap affects_type_identity and
      	handler fields.
      	(register_scoped_attributes, decl_attributes): Formatting fixes.
      ada/
      	* gcc-interface/utils.c (gnat_internal_attribute_table): Swap
      	affects_type_identity and handler fields, adjust comments.
      brig/
      	* brig-lang.c (brig_attribute_table): Swap affects_type_identity
      	and handler fields, adjust comments.
      c-family/
      	* c-attribs.c (c_common_attribute_table,
      	c_common_format_attribute_table): Swap affects_type_identity
      	and handler fields, adjust comments.
      cp/
      	* tree.c (cxx_attribute_table, std_attribute_table): Swap
      	affects_type_identity and handler fields, adjust comments.
      fortran/
      	* f95-lang.c (gfc_attribute_table): Swap affects_type_identity
      	and handler fields, adjust comments.
      lto/
      	* lto-lang.c (lto_attribute_table, lto_format_attribute_table): Swap
      	affects_type_identity and handler fields, adjust comments.
      testsuite/
      	* g++.dg/plugin/attribute_plugin.c (user_attr): Swap
      	affects_type_identity and handler fields, add NULL for exclude.
      
      From-SVN: r255699
      Jakub Jelinek committed
    • [PR C++/59930] template friend classes & default args · 0cf4820d
      https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01055.html
      	PR c++/59930
      	* decl.c (xref_tag_1): Correct comments about template friends and
      	default args.
      	* friend.c (make_friend_class): Move comments concerning
      	self-friendliness to code dealing with such.
      	* pt.c (check_default_tmpl_args): Deal with template friend
      	classes too.
      	(push_template_decl_real): Check default args for non-function
      	template friends.
      
      	PR c++/59930
      	* g++.dg/cpp0x/temp_default4.C: Adjust diagnostic.
      	* g++.old-deja/g++.pt/friend23.C: Likewise.
      	* g++.old-deja/g++.pt/friend24.C: Delete.
      
      From-SVN: r255698
      Nathan Sidwell committed
  10. 14 Dec, 2017 2 commits
    • invoke.texi: Document -Wcast-function-type. · c65e18d3
      gcc:
      2017-12-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * doc/invoke.texi: Document -Wcast-function-type.
              * recog.h (stored_funcptr): Change signature.
              * tree-dump.c (dump_node): Avoid warning.
              * typed-splay-tree.h (typed_splay_tree): Avoid warning.
      
      libcpp:
      2017-12-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * internal.h (maybe_print_line): Change signature.
      
      c-family:
      2017-12-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * c.opt (Wcast-function-type): New warning option.
              * c-lex.c (get_fileinfo): Avoid warning.
              * c-ppoutput.c (scan_translation_unit_directives_only): Remove cast.
      
      c:
      2017-12-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * c-typeck.c (c_safe_arg_type_equiv_p,
              c_safe_function_type_cast_p): New function.
              (build_c_cast): Implement -Wcast-function-type.
      
      cp:
      2017-12-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * decl2.c (start_static_storage_duration_function): Avoid warning.
              * typeck.c (cxx_safe_arg_type_equiv_p,
              cxx_safe_function_type_cast_p): New function.
              (build_reinterpret_cast_1): Implement -Wcast-function-type.
      
      testsuite:
      2017-12-14  Bernd Edlinger  <bernd.edlinger@hotmail.de>
      
              * c-c++-common/Wcast-function-type.c: New test.
              * g++.dg/Wcast-function-type.C: New test.
      
      From-SVN: r255661
      Bernd Edlinger committed
    • re PR c++/79650 (ICE on invalid c++ code with label arithmetic in… · 9096c2c5
      re PR c++/79650 (ICE on invalid c++ code with label arithmetic in convert_nontype_argument (pt.c:6515))
      
      	PR c++/79650
      	* pt.c (convert_nontype_argument): Diagnose
      	reduced_constant_expression_p expressions that aren't INTEGER_CST.
      
      	* g++.dg/template/pr79650.C: New test.
      
      From-SVN: r255623
      Jakub Jelinek committed
  11. 13 Dec, 2017 2 commits
  12. 12 Dec, 2017 3 commits
    • Remove type_dependent_init_p. · 48f43f95
      	* decl.c (value_dependent_init_p): Check the type of a CONSTRUCTOR.
      	(type_dependent_init_p): Remove.
      
      From-SVN: r255591
      Jason Merrill committed
    • PR c++/82115 - ICE with variable initialized with its own address. · 5eb63cfd
      	* cp-tree.h (struct lang_decl_base): Add dependent_init_p.
      	(DECL_DEPENDENT_INIT_P, SET_DECL_DEPENDENT_INIT_P): New.
      	* decl.c (cp_finish_decl): Set it.
      	(duplicate_decls): Copy it.
      	* pt.c (tsubst_decl): Clear it.
      	(value_dependent_expression_p): Revert earlier change.  Check it.
      
      From-SVN: r255590
      Jason Merrill committed
    • [SFN] introduce statement frontier notes, still disabled · 96a95ac1
      This patch completes the infrastructure for the introduction of
      statement frontiers in C-family languages.
      
      It brings in all the code remaining code needed to introduce and
      transform begin stmt trees, gimple stmts, insns and notes, and
      ultimately use them to generate the is_stmt column in DWARF2+ line
      number tables/programs, however none of it is activated: the option
      that would do so will be introduced in a subsequent patch.
      
      This patch depends on an earlier patch with not-quite-boilerplate
      changes towards SFN.
      
      for  gcc/c-family/ChangeLog
      
      	* c-semantics.c (pop_stmt_list): Move begin stmt marker into
      	subsequent statement list.
      
      for  gcc/c/ChangeLog
      
      	* c-objc-common.h (LANG_HOOKS_EMITS_BEGIN_STMT): Redefine as true.
      	* c-parser.c (add_debug_begin_stmt): New.
      	(c_parser_declaration_or_fndef): Call it.
      	(c_parser_compound_statement_nostart): Likewise.
      	(c_parser_statement_after_labels): Likewise.
      	* c-typeck (c_finish_stmt_expr): Skip begin stmts markers.
      
      for  gcc/cp/ChangeLog
      
      	* constexpr.c (check_constexpr_ctor_body_1): Skip begin stmt
      	markers.
      	(constexpr_fn_retval): Likewise.
      	(potential_constant_expression_1): Likewise.
      	(cxx_eval_statement_list): Check that a begin stmt marker is
      	not used as the value of a statement list.
      	(cxx_eval_constant_expression): Return begin stmt markers
      	unchanged.
      	* cp-array-notation.c (stmt_location): New.
      	(cp_expand_cond_array_notations): Use it.
      	* cp-objcp-common.h (LANG_HOOKS_EMITS_BEGIN_STMT): Redefine as true.
      	* parser.c (add_debug_begin_stmt): New.
      	(cp_parser_statement): Call it.
      	* pt.c (tsubst_copy): Handle begin stmt markers.
      
      for  gcc/ChangeLog
      
      	* cfgexpand.c (expand_gimple_basic_block): Handle begin stmt
      	markers.  Integrate source bind into debug stmt expand loop.
      	(pass_expand::execute): Check debug marker limit.  Avoid deep
      	TER and expand debug locations for debug bind insns only.
      	* cse.c (insn_live_p): Keep nonbind markers and debug bindings
      	followed by them.
      	* df-scan.c (df_insn_delete): Accept out-of-block debug insn.
      	* final.c (reemit_insn_block_notes): Take current block from
      	nonbind markers.  Declare note where it's first set.
      	(final_scan_insn): Handle begin stmt notes.  Emit is_stmt according to
      	begin stmt markers if enabled.
      	(notice_source_line): Handle nonbind markers.  Fail if their
      	location is unknown or that of builtins.
      	(rest_of_handle_final): Convert begin stmt markers to notes if
      	var-tracking didn't run.
      	(rest_of_clean_state): Skip begin stmt markers.
      	* gimple-pretty-print.c (dump_gimple_debug): Handle begin stmt
      	markers.
      	* function.c (allocate_struct_function): Set begin_stmt_markers.
      	* function.h (struct function): Add debug_marker_count counter
      	and debug_nonbind_markers flag.
      	* gimple-iterator.c (gsi_remove): Adjust debug_marker_count.
      	* gimple-low.c (lower_function_body): Adjust
      	debug_nonbind_markers.
      	(lower_stmt): Drop or skip gimple debug stmts.
      	(lower_try_catch): Skip debug stmts.
      	* gimple.c (gimple_build_debug_begin_stmt): New.
      	(gimple_copy): Increment debug_marker_count if copying one.
      	* gimple.h (gimple_build_debug_begin_stmt): Declare.
      	* gimplify.c (rexpr_location): New.
      	(rexpr_has_location): New.
      	(warn_switch_unreachable_r): Handle gimple debug stmts.
      	(shortcut_cond_r): Call expr_location.
      	(find_goto): New.
      	(find_goto_label): New.
      	(shortcut_cond_expr): Call expr_has_location, expr_location, and
      	find_goto_label.
      	(gimplify_cond_expr): Call find_goto_label, expr_has_location, and
      	expr_location.
      	(gimplify_expr): Handle begin stmt markers.  Reject debug expr decls.
      	* langhooks-def.h (LANG_HOOKS_EMITS_BEGIN_STMT): New.  Add to...
      	(LANG_HOOKS_INITIALIZER): ... this.
      	* langhooks.h (struct lang_hooks): Add emits_begin_stmt.
      	* lra-contraints.c (inherit_reload_reg): Tolerate between-blocks
      	debug insns.
      	(update_ebb_live_info): Skip debug insn markers.
      	* lra.c (debug_insn_static_data): Rename to...
      	(debug_bind_static_data): ... this.
      	(debug_marker_static_data): New.
      	(lra_set_insn_recog_data): Select one of the above depending
      	on debug insn kind.
      	(lra_update_isn_regno_info): Don't assume debug insns have
      	freqs.
      	(push_insns): Skip debug insns.
      	* lto-streamer-in.c (input_function): Drop debug stmts
      	depending on active options.  Adjust debug_nonbind_markers.
      	* params.def (PARAM_MAX_DEBUG_MARKER_COUNT): New.
      	* print-rtl.c (rtx_writer::print_rtx_operand_code_0): Handle
      	begin stmt marker notes.
      	(print_insn): Likewise.
      	* recog.c (extract_insn): Recognize rtl for debug markers.
      	* rtl.def (DEBUG_MARKER): New.
      	* tree-inline.c: Include params.h.
      	(remap_gimple_stmt): Handle nonbind markers.
      	(maybe_move_debug_stmts_to_successors): Likewise.
      	(copy_debug_stmt): Likewise.
      	* tree-iterator.c (append_to_statement_list_1): Append begin stmt
      	markers regardless of no side effects.
      	(tsi_link_before): Don't update container's side effects when adding
      	a begin stmt marker.
      	(tsi_link_after): Likewise.
      	(expr_first): Skip begin stmt markers.
      	(expr_last): Likewise.
      	* tree-pretty-print (dump_generic_node): Handle begin stmt markers.
      	* tree-ssa-threadedge.c (propagate_threaded_block_debug_info):
      	Disregard nonbind markers.
      	* tree.c (make_node_stat): Don't set side effects for begin stmt
      	markers.
      	(build1_stat): Likewise.
      	* tree.def (DEBUG_BEGIN_STMT): New.
      	* tree.h (GOTO_DESTINATION): Require a GOTO_EXPR.
      	* var-tracking.c (delete_debug_insns): Renamed to...
      	(delete_vta_debug_insns): ... this.
      	(reemit_marker_as_note): New.
      	(vt_initialize): Reemit markers.
      	(delete_vta_debug_insns): Likewise.
      	(vt_debug_insns_local): Reemit or delete markers.
      	(variable_tracking_main_1): Likewise.
      	* doc/generic.texi (DEBUG_BEGIN_STMT): Document.
      	* doc/gimple.texi (gimple_debug_begin_stmt_p): New.
      	(gimple_debug_nonbind_marker_p): New.
      	(gimple_build_debug_bind): Adjust.
      	(gimple_build_debug_begin_stmt): New.
      	* doc/invoke.texi (max-debug-marker-count): New param.
      	* doc/rtl.texi (debug_implicit_ptr, entry_value): New.
      	(debug_parameter_ref, debug_marker): New.
      	(NOTE_INSN_BEGIN_STMT): New.
      	(DEBUG_INSN): Describe begin stmt markers.
      
      From-SVN: r255568
      Alexandre Oliva committed
  13. 07 Dec, 2017 1 commit
    • PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted · 5d9ae53d
      PR c/81544 - attribute noreturn and warn_unused_result on the same function accepted
      PR c/81566 - invalid attribute aligned accepted on functions
      
      gcc/ada/ChangeLog:
      
      	PR c/81544
      	* gcc-interface/utils.c (gnat_internal_attribute_table): Initialize
      	new member of struct attribute_spec.
      
      gcc/c/ChangeLog:
      
      	PR c/81544
      	* c-decl.c (c_decl_attributes): Look up existing declaration and
      	pass it to decl_attributes.
      
      gcc/c-family/ChangeLog:
      
      	PR c/81544
      	PR c/81566
      	* c-attribs.c (attr_aligned_exclusions): New array.
      	(attr_alloc_exclusions, attr_cold_hot_exclusions): Same.
      	(attr_common_exclusions, attr_const_pure_exclusions): Same.
      	(attr_gnu_inline_exclusions, attr_inline_exclusions): Same.
      	(attr_noreturn_exclusions, attr_returns_twice_exclusions): Same.
      	(attr_warn_unused_result_exclusions): Same.
      	(handle_hot_attribute, handle_cold_attribute): Simplify.
      	(handle_const_attribute): Warn on function returning void.
      	(handle_pure_attribute): Same.
      	(handle_aligned_attribute): Diagnose conflicting attribute
      	specifications.
      	* c-warn.c (diagnose_mismatched_attributes): Simplify.
      
      gcc/cp/ChangeLog:
      
      	PR c/81544
      	* cp-tree.h (decls_match): Add default argument.
      	* decl.c (decls_match): Avoid calling into the target back end
      	and triggering an error.
      	* decl2.c (cplus_decl_attributes): Look up existing declaration and
      	pass it to decl_attributes.
      	* tree.c (cxx_attribute_table): Initialize new member of struct
      	attribute_spec.
      
      gcc/fortran/ChangeLog:
      
      	PR c/81544
      	* f95-lang.c (gfc_attribute_table): Initialize new member of struct
      	attribute_spec.
      
      gcc/lto/ChangeLog:
      
      	PR c/81544
      	* lto-lang.c (lto_attribute_table): Initialize new member of struct
      	attribute_spec.
      
      gcc/ChangeLog:
      
      	PR c/81544
      	* attribs.c (empty_attribute_table): Initialize new member of
      	struct attribute_spec.
      	(decl_attributes): Add argument.  Handle mutually exclusive
      	combinations of attributes.
      	(selftests::test_attribute_exclusions): New function.
      	(selftests::attribute_c_tests): Ditto.
      	* attribs.h (decl_attributes): Add default argument.
      	* selftest.h (attribute_c_tests): Declare.
      	* selftest-run-tests.c (selftest::run_tests): Call attribute_c_tests.
      	* tree-core.h (attribute_spec::exclusions, exclude): New type and
      	member.
      	* doc/extend.texi (Common Function Attributes): Update const and pure.
      
      gcc/testsuite/ChangeLog:
      
      	PR c/81544
      	* c-c++-common/Wattributes-2.c: New test.
      	* c-c++-common/Wattributes.c: New test.
      	* c-c++-common/attributes-3.c: Adjust.
      	* gcc.dg/Wattributes-6.c: New test.
      	* gcc.dg/Wattributes-7.c: New test.
      	* gcc.dg/attr-noinline.c
      	* gcc.dg/pr44964.c: Same.
      	* gcc.dg/torture/pr42363.c: Same.
      	* gcc.dg/tree-ssa/ssa-ccp-2.c: Same.
      
      From-SVN: r255469
      Martin Sebor committed