Skip to content
Snippets Groups Projects
  1. Nov 13, 2020
    • Eduard-Mihai Burtescu's avatar
      libiberty: Support the new ("v0") mangling scheme in rust-demangle · 84096498
      Eduard-Mihai Burtescu authored
      This is the libiberty (mainly for binutils/gdb) counterpart of
      https://github.com/alexcrichton/rustc-demangle/pull/23.
      
      Relevant links for the new Rust mangling scheme (aka "v0"):
      * Rust RFC: https://github.com/rust-lang/rfcs/pull/2603
      * tracking issue: https://github.com/rust-lang/rust/issues/60705
      * implementation: https://github.com/rust-lang/rust/pull/57967
      
      This implementation includes full support for UTF-8 identifiers
      via punycode, so I've included a testcase for that as well.
      
      libiberty/ChangeLog:
      	* rust-demangle.c (struct rust_demangler): Add
      	skipping_printing and bound_lifetime_depth fields.
      	(eat): Add (v0-only).
      	(parse_integer_62): Add (v0-only).
      	(parse_opt_integer_62): Add (v0-only).
      	(parse_disambiguator): Add (v0-only).
      	(struct rust_mangled_ident): Add punycode{,_len} fields.
      	(parse_ident): Support v0 identifiers.
      	(print_str): Respect skipping_printing.
      	(print_uint64): Add (v0-only).
      	(print_uint64_hex): Add (v0-only).
      	(print_ident): Respect skipping_printing,
      	Support v0 identifiers.
      	(print_lifetime_from_index): Add (v0-only).
      	(demangle_binder): Add (v0-only).
      	(demangle_path): Add (v0-only).
      	(demangle_generic_arg): Add (v0-only).
      	(demangle_type): Add (v0-only).
      	(demangle_path_maybe_open_generics): Add (v0-only).
      	(demangle_dyn_trait): Add (v0-only).
      	(demangle_const): Add (v0-only).
      	(demangle_const_uint): Add (v0-only).
      	(basic_type): Add (v0-only).
      	(rust_demangle_callback): Support v0 symbols.
      	* testsuite/rust-demangle-expected: Add v0 testcases.
      84096498
    • Seija Kijin's avatar
      Make strstr.c in libiberty ANSI compliant · 16b00dc6
      Seija Kijin authored
      libiberty/
      
      	* strstr.c (strstr): Make implementation ANSI/POSIX compliant.
      16b00dc6
    • Jason Merrill's avatar
      c++: Implement C++20 'using enum'. [PR91367] · d5031040
      Jason Merrill authored
      
      This feature allows the programmer to import enumerator names into the
      current scope so later mentions don't need to use the fully-qualified name.
      These usings are not subject to the usual restrictions on using-decls: in
      particular, they can move between class and non-class scopes, and between
      classes that are not related by inheritance.  This last caused difficulty
      for our normal approach to using-decls within a class hierarchy, as we
      assume that the class where we looked up a used declaration is derived from
      the class where it was first declared.  So to simplify things, in that case
      we make a clone of the CONST_DECL in the using class.
      
      Thanks to Nathan for the start of this work: in particular, the
      lookup_using_decl rewrite.
      
      The changes to dwarf2out revealed an existing issue with the D front-end: we
      were doing the wrong thing for importing a D CONST_DECL, because
      dwarf2out_imported_module_or_decl_1 was looking through it to its type,
      expecting it to be an enumerator, but in one case in thread.d, the constant
      had type int.  Adding the ability to import a C++ enumerator also fixed
      that, but that led to a crash in force_decl_die, which didn't know what to
      do with a CONST_DECL.  So now it does.
      
      Co-authored-by: default avatarNathan Sidwell <nathan@acm.org>
      
      gcc/cp/ChangeLog:
      
      	* cp-tree.h (USING_DECL_UNRELATED_P): New.
      	(CONST_DECL_USING_P): New.
      	* class.c (handle_using_decl): If USING_DECL_UNRELATED_P,
      	clone the CONST_DECL.
      	* name-lookup.c (supplement_binding_1): A clone hides its
      	using-declaration.
      	(lookup_using_decl): Rewrite to separate lookup and validation.
      	(do_class_using_decl): Adjust.
      	(finish_nonmember_using_decl): Adjust.
      	* parser.c (make_location): Add cp_token overload.
      	(finish_using_decl): Split out from...
      	(cp_parser_using_declaration): ...here.  Don't look through enums.
      	(cp_parser_using_enum): New.
      	(cp_parser_block_declaration): Call it.
      	(cp_parser_member_declaration): Call it.
      	* semantics.c (finish_id_expression_1): Handle enumerator
      	used from class scope.
      
      gcc/ChangeLog:
      
      	* dwarf2out.c (gen_enumeration_type_die): Call
      	equate_decl_number_to_die for enumerators.
      	(gen_member_die): Don't move enumerators to their
      	enclosing class.
      	(dwarf2out_imported_module_or_decl_1): Allow importing
      	individual enumerators.
      	(force_decl_die): Handle CONST_DECL.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/inh-ctor28.C: Adjust expected diagnostic.
      	* g++.dg/cpp0x/inh-ctor33.C: Likewise.
      	* g++.dg/cpp0x/using-enum-1.C: Add comment.
      	* g++.dg/cpp0x/using-enum-2.C: Allowed in C++20.
      	* g++.dg/cpp0x/using-enum-3.C: Likewise.
      	* g++.dg/cpp1z/class-deduction69.C: Adjust diagnostic.
      	* g++.dg/inherit/using5.C: Likewise.
      	* g++.dg/cpp2a/using-enum-1.C: New test.
      	* g++.dg/cpp2a/using-enum-2.C: New test.
      	* g++.dg/cpp2a/using-enum-3.C: New test.
      	* g++.dg/cpp2a/using-enum-4.C: New test.
      	* g++.dg/cpp2a/using-enum-5.C: New test.
      	* g++.dg/cpp2a/using-enum-6.C: New test.
      	* g++.dg/debug/dwarf2/using-enum.C: New test.
      d5031040
    • Vladimir N. Makarov's avatar
      [PATCH] Implementation of asm goto outputs · e3b3b596
      Vladimir N. Makarov authored
      gcc/
      	* cfgexpand.c (expand_asm_stmt): Output asm goto with outputs too.
      	Place insns after asm goto on edges.
      	* doc/extend.texi: Reflect the changes in asm goto documentation.
      	* gimple.c (gimple_build_asm_1): Remove an assert checking output
      	absence for asm goto.
      	* gimple.h (gimple_asm_label_op, gimple_asm_set_label_op): Take
      	possible asm goto outputs into account.
      	* ira.c (ira): Remove critical edges for potential asm goto output
      	reloads.
      	(ira_nullify_asm_goto): New function.
      	* ira.h (ira_nullify_asm_goto): New prototype.
      	* lra-assigns.c (lra_split_hard_reg_for): Use ira_nullify_asm_goto.
      	Check that splitting is done inside a basic block.
      	* lra-constraints.c (curr_insn_transform): Permit output reloads
      	for any jump insn.
      	* lra-spills.c (lra_final_code_change): Remove USEs added in ira
      	for asm gotos.
      	* lra.c (lra_process_new_insns): Place output reload insns after
      	jumps in the beginning of destination BBs.
      	* reload.c (find_reloads): Report error for asm gotos with
      	outputs.  Modify them to keep CFG consistency to avoid crashes.
      	* tree-into-ssa.c (rewrite_stmt): Don't put debug stmt after asm
      	goto.
      
      gcc/c/
      	* c-parser.c (c_parser_asm_statement): Parse outputs for asm
      	goto too.
      	* c-typeck.c (build_asm_expr): Remove an assert checking output
      	absence for asm goto.
      
      gcc/cp
      	* parser.c (cp_parser_asm_definition): Parse outputs for asm
      	goto too.
      
      gcc/testsuite/
      	* c-c++-common/asmgoto-2.c: Permit output in asm goto.
      	* gcc.c-torture/compile/asmgoto-2.c: New.
      	* gcc.c-torture/compile/asmgoto-3.c: New.
      	* gcc.c-torture/compile/asmgoto-4.c: New.
      	* gcc.c-torture/compile/asmgoto-5.c: New.
      e3b3b596
    • Jakub Jelinek's avatar
      openmp: Support allocate for C/C++ array section reductions · 67100cb5
      Jakub Jelinek authored
      This adds allocate clause support for array section reductions.
      Furthermore, it fixes one bug that would cause inscan reductions with
      allocate to be rejected by C, and for now just ignores allocate for
      inscan/task reductions, that will need slightly more work.
      
      2020-11-13  Jakub Jelinek  <jakub@redhat.com>
      
      gcc/
      	* omp-low.c (scan_sharing_clauses): For now remove for reduction
      	clauses with inscan or task modifiers decl from allocate_map.
      	(lower_private_allocate): Handle TYPE_P (new_var).
      	(lower_rec_input_clauses): Handle allocate clause for C/C++ array
      	reductions.
      gcc/c/
      	* c-typeck.c (c_finish_omp_clauses): Don't clear
      	OMP_CLAUSE_REDUCTION_INSCAN unless reduction_seen == -2.
      libgomp/
      	* testsuite/libgomp.c-c++-common/allocate-1.c (foo): Add tests
      	for array reductions.
      	(main): Adjust foo callers.
      67100cb5
    • Martin Jambor's avatar
      ipa-cp: One more safe_add (PR 97816) · 2e97d644
      Martin Jambor authored
      The new behavior of safe_add triggered an ICE because of one use where
      it had not been used instead of a simple addition.  I'll fix it with the
      following obvious patch so that periodic benchmarkers can continue
      working because a proper fix (see below) will need a review.
      
      The testcase showed me, however, that we can propagate time and cost
      from one lattice to another more than once even when that was not the
      intent.  I'll address that as a follow-up after I verify it does not
      affect the IPA-CP heuristics too much or change the corresponding
      params accordingly.
      
      Bootstrapped and tested on x86_64-linux.
      
      gcc/ChangeLog:
      
      2020-11-13  Martin Jambor  <mjambor@suse.cz>
      
      	PR ipa/97816
      	* ipa-cp.c (value_topo_info<valtype>::propagate_effects): Use
      	safe_add instead of a simple addition.
      2e97d644
    • Piotr H. Dabrowski's avatar
      Do not warn about unused macros while processing #pragma GCC optimize · 6f1ae1ec
      Piotr H. Dabrowski authored
      libcpp
      
      	PR c++/91318
      	* include/cpplib.h: Added cpp_define_unused(), cpp_define_formatted_unused()
      	* directives.c: Likewise.
      
      gcc/c-family
      
      	PR c++/91318
      	* c-cppbuiltin.c: c_cpp_builtins_optimize_pragma(): use cpp_define_unused()
      6f1ae1ec
    • Jonathan Wakely's avatar
      libstdc++: Avoid 32-bit time_t overflows in futex calls · e7e0eeeb
      Jonathan Wakely authored
      The existing code doesn't check whether the chrono::seconds value is out
      of range of time_t. When using a timeout before the epoch (with a
      negative value) subtracting the current time (as time_t) and then
      assigning it to a time_t can overflow to a large positive value. This
      means that we end up waiting several years even though the specific
      timeout was in the distant past.
      
      We do have a check for negative timeouts, but that happens after the
      conversion to time_t so happens after the overflow.
      
      The conversion to a relative timeout is done in two places, so this
      factors it into a new function and adds the overflow checks there.
      
      libstdc++-v3/ChangeLog:
      
      	* src/c++11/futex.cc (relative_timespec): New function to
      	create relative time from two absolute times.
      	(__atomic_futex_unsigned_base::_M_futex_wait_until)
      	(__atomic_futex_unsigned_base::_M_futex_wait_until_steady):
      	Use relative_timespec.
      e7e0eeeb
    • Andrew MacLeod's avatar
      Add 3 new EVRP testcases. · 0d1189b4
      Andrew MacLeod authored
      test new evrp functionality.
      
      	gcc/testsuite/
      	* gcc.dg/tree-ssa/evrp20.c
      	* gcc.dg/tree-ssa/evrp21.c
      	* gcc.dg/tree-ssa/evrp22.c
      0d1189b4
    • Martin Liska's avatar
      testsuite: move expected error location · 2935ff7e
      Martin Liska authored
      gcc/testsuite/ChangeLog:
      
      	PR testsuite/97788
      	* g++.dg/ubsan/pr61272.C: Move expected error location.
      2935ff7e
    • Martin Liska's avatar
      libsanitizer: update LOCAL_PATCHES. · a98ebdc5
      Martin Liska authored
      libsanitizer/ChangeLog:
      
      	* LOCAL_PATCHES: Update to the latest commit.
      a98ebdc5
    • Martin Liska's avatar
      libsanitizer: Apply local patches. · d72227e2
      Martin Liska authored
      d72227e2
    • Martin Liska's avatar
      libsanitizer: merge from master. · 98f792ff
      Martin Liska authored
      98f792ff
    • Jozef Lawrynowicz's avatar
      MSP430: Skip index-1.c test · a514934a
      Jozef Lawrynowicz authored
      To access the "n - 100000"th element of "a" in this test, GCC will
      generate the following code for msp430-elf with -mcpu=msp430x:
      
        RLAM.W  #1, R12
        MOV.W a-3392(R12), R12
      
      Since there aren't actually 100,000 elements in a, this means that
      "a-3392" offset calculated by the linker can overflow, as the address of
      "a" can validly be less than 3392.
      
      The relocations used for -mcpu=msp430 and -mlarge are not as strict and
      the calculated value is allowed to wrap around the address space,
      avoiding relocation overflows.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.c-torture/execute/index-1.c: Skip for the default MSP430 430X ISA.
      a514934a
    • Jozef Lawrynowicz's avatar
      MSP430: Implement TARGET_INSN_COST · 54896b10
      Jozef Lawrynowicz authored
      The length of an insn can be used to calculate its cost, when optimizing
      for size. When optimizing for speed, this is a good estimate, since the
      cycle cost of an MSP430 instruction increases with its length.
      
      gcc/ChangeLog:
      
      	* config/msp430/msp430.c (TARGET_INSN_COST): Define.
      	(msp430_insn_cost): New function.
      	* config/msp430/msp430.h (BRANCH_COST): Define.
      	(LOGICAL_OP_NON_SHORT_CIRCUIT): Define.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/msp430/rtx-cost-O3-default.c: New test.
      	* gcc.target/msp430/rtx-cost-O3-f5series.c: New test.
      	* gcc.target/msp430/rtx-cost-Os-default.c: New test.
      	* gcc.target/msp430/rtx-cost-Os-f5series.c: New test.
      54896b10
    • Jozef Lawrynowicz's avatar
      MSP430: Add defaulting to the insn length attribute · 546c8f95
      Jozef Lawrynowicz authored
      The length of MSP430 instructions is mostly just a function of the type
      and number of operands. Setting the "type" attribute on all insns
      describes the number of operands, and the position of the source and
      destination operands.
      
      In most cases, defaulting in the "length" and "extension" attribute
      definitions can then be used to calculate the total length of the
      instruction by using the value of the "type" attribute to examine the
      operands.
      
      gcc/ChangeLog:
      
      	* config/msp430/msp430-protos.h (msp430x_extendhisi): Return int
      	instead of char *.
      	(msp430_output_asm_shift_insns): Likewise.
      	Add new return_length argument.
      	(msp430x_insn_required): Add prototype.
      	* config/msp430/msp430.c (msp430_output_asm_shift_insns): Return the
      	total length, in bytes, of the emitted instructions.
      	(msp430x_insn_required): New function.
      	(msp430x_extendhisi): Return the total length, in bytes, of the
      	emitted instructions.
      	* config/msp430/msp430.h (ADJUST_INSN_LENGTH): Define.
      	* config/msp430/msp430.md: New define_attr "type".
      	New define_attr "extension".
      	New define_attr "length_multiplier".
      	New define_attr "extra_length".
      	Rewrite define_attr "length".
      	Set type, extension, length, length_multiplier or extra_length insn
      	attributes on all insns, as appropriate.
      	(andneghi3): Rewrite using constraints instead of C code to decide
      	output insns.
      	* config/msp430/predicates.md (msp430_cheap_operand): New predicate.
      	(msp430_high_memory_operand): New predicate.
      546c8f95
    • Jozef Lawrynowicz's avatar
      MSP430: Implement TARGET_RTX_COSTS · f62dd398
      Jozef Lawrynowicz authored
      Costs of MSP430 instructions are mostly just a function of the type and
      number of operands; knowledge of the specific instruction often
      isn't required to calculate the cost.
      In these cases, TARGET_RTX_COSTS just needs to examine the operands to
      calculate the cost of the expression.
      
      For more complicated operations where library helper functions are
      required, if the cost cannot be accurately calculated, it is estimated
      and disparaged relative to the cost of a single instruction.
      
      gcc/ChangeLog:
      
      	* config/msp430/msp430.c (use_helper_for_const_shift): Add forward
      	declaration.
      	Remove unused argument.
      	(struct msp430_multlib_costs): New struct.
      	(msp430_is_mem_indirect): New function.
      	(msp430_costs): Likewise.
      	(msp430_shift_costs): Likewise.
      	(msp430_muldiv_costs): Likewise.
      	(msp430_get_inner_dest_code): Likewise.
      	(msp430_single_op_cost): Likewise.
      	(msp430_rtx_costs): Rewrite from scratch.
      	(msp430_expand_shift): Adjust use_helper_for_const_shift call.
      f62dd398
    • Jozef Lawrynowicz's avatar
      MSP430: Implement TARGET_MEMORY_MOVE_COST · 953587a2
      Jozef Lawrynowicz authored
      The cycle and size cost of a MOV instruction in different addressing
      modes can be used to calculate the TARGET_MEMORY_MOVE_COST relative to
      TARGET_REGISTER_MOVE_COST.
      
      gcc/ChangeLog:
      
      	* config/msp430/msp430.c (struct single_op_cost): New struct.
      	(struct double_op_cost): Likewise.
      	(TARGET_REGISTER_MOVE_COST): Don't define but add comment.
      	(TARGET_MEMORY_MOVE_COST): Define to...
      	(msp430_memory_move_cost): New function.
      	(BRANCH_COST): Don't define but add comment.
      953587a2
    • Jan Hubicka's avatar
      Improve handling of memory operands in ipa-icf 2/4 · 602c6cfc
      Jan Hubicka authored
      this patch iplements new class ao_compare that is derived from operand_compare
      and adds a method to compare and hash ao_refs.  This is used by ICF to enable
      more merging.
      
      Comparsion is done as follows
      
      1) Verify that the memory access will happen at the same address
         and will have same size.
      
         For constant addresses this is done by comparing ao_ref_base
         and offset/size
      
         For varable accesses it uses operand_equal_p but with OEP_ADDRESS
         (that does not match TBAA metadata) and then operand_equal_p on
         type size.
      
      2) Compare alignments.  I use get_object_alignment_1 like ipa-icf
         did before revamp to operand_equal_p in gcc 9.
         I noticed that return value is bitodd so added a comment
      
      3) Match MR_DEPENDENCE_CLIQUE
      
      At this point the memory refrences are same except for TBAA information.
      We continue by checking
      
      4) ref and base alias sets.  Now if lto streaming is going to happen
         instead of comparing alias sets themselves we compare alias_ptr_types
      
         (the patch depends on the ao_ref_alias_ptr_tyep and
          ao_ref_base_alias_ptr_type acessors I sent yesterday)
      
      5) See if accesses are view converted.
         If they are we are done since access path is not present
      
      6) Compare the part of access path relevant for TBAA.
         I recall FRE relies on the fact that if base and ref types are same the
         access path is, but I do not thing this is 100% reliable especially with LTO
         alias sets.
      
         The access path comparsion logic is also useful for modref (for next stage1).
         Tracking the access paths improves quite noticeably disambiguation in C++
         code by being able to distinquish different fields of same type within a
         struct.  I had the comparsion logic in my tree for some time and it seems to
         work quite well.
      
         During cc1plus build we have some cases where we find mismatch after matching
         the base/ref alias sets.  These are due to failed type merging: access path
         oracle in LTO uses TYPE_MAIN_VARIANTs.
      
      I implemented relatively basic hashing using base and offset.
      
      gcc/ChangeLog:
      	* ipa-icf-gimple.c: Include tree-ssa-alias-compare.h.
      	(find_checker::func_checker): Initialize m_tbaa.
      	(func_checker::hash_operand): Use hash_ao_ref for memory accesses.
      	(func_checker::compare_operand): Use compare_ao_refs for memory
      	accesses.
      	(func_checker::cmopare_gimple_assign): Do not check LHS types
      	of memory stores.
      	* ipa-icf-gimple.h (func_checker): Derive from ao_compare;
      	add m_tbaa.
      	* ipa-icf.c: Include tree-ssa-alias-compare.h.
      	(sem_function::equals_private): Update call of
      	func_checker::func_checker.
      	* ipa-utils.h (lto_streaming_expected_p): New inline
      	predicate.
      	* tree-ssa-alias-compare.h: New file.
      	* tree-ssa-alias.c: Include tree-ssa-alias-compare.h
      	and bultins.h
      	(view_converted_memref_p): New function.
      	(types_equal_for_same_type_for_tbaa_p): New function.
      	(ao_ref_alias_ptr_type, ao_ref_base_alias_ptr_type): New functions.
      	(ao_compare::compare_ao_refs): New member function.
      	(ao_compare::hash_ao_ref): New function
      	* tree-ssa-alias.h (ao_ref_base_alias_ptr_type,
      	ao_ref_alias_ptr_type): Declare.
      
      gcc/testsuite/ChangeLog:
      	* c-c++-common/Wstringop-overflow-2.c: Disable ICF.
      	* g++.dg/warn/Warray-bounds-8.C: Disable ICF.
      602c6cfc
    • Jan Hubicka's avatar
      Determine access types in ipa-icf-gimple.c · a1fdc16d
      Jan Hubicka authored
      This patch adds logic to determine access type (normal or memory) for every
      operand.  This makes it possible to compare memory accesses more carefully
      which will be implemented in a followup patch.
      
      	* ipa-icf-gimple.c: Include gimple-walk.h.
      	(func_checker::compare_ssa_name): Update call of compare_operand.
      	(func_checker::hash_operand): Fix comment and add variant taking
      	operand_access_type parameter.
      	(func_checker::compare_operand): Add operand_access_type parameter.
      	(func_checker::compare_asm_inputs_outputs): Add
      	operand_access_type_map parameter; update use of
      	func_checker::compare_operand.
      	(func_checker::compare_gimple_call): Update use of
      	func_checker::compare_operand.
      	(func_checker::compare_gimple_assign): Likewise.
      	(func_checker::compare_gimple_cond): Likewise.
      	(func_checker::compare_gimple_switch): Likewise.
      	(func_checker::compare_gimple_return): Likewise.
      	(func_checker::compare_gimple_goto): Likewise.
      	(func_checker::compare_gimple_asm): Likewise.
      	(visit_load_store): New static functio.
      	(func_checker::classify_operands): New member function.
      	(func_checker::get_operand_access_type): New member function.
      	* ipa-icf-gimple.h (func_checker::operand_access_type): New enum
      	(func_checker::operand_access_type_map): New typedef.
      	(func_checker::compare_operand): Update prototype.
      	(func_checker::compare_asm_inputs_outputs): Likewise.
      	(func_checker::cleassify_operands): Declare.
      	(func_checker::get_operand_access_type): Declare.
      	(func_checker::hash_operand): New variant with operand_access_type.
      	* ipa-icf.c (sem_function::hash_stmt): Update uses of hash_operand.
      	(sem_function::compare_phi_node): Update use of compare_operand.
      a1fdc16d
    • Andrea Corallo's avatar
      arm: Make use of RTL predicates · 156edf21
      Andrea Corallo authored
      2020-11-13  Andrea Corallo  <andrea.corallo@arm.com>
      
      	* config/arm/aarch-common.c (aarch_accumulator_forwarding): Use
      	RTL predicates where possible.
      	* config/arm/arm.c (legitimate_pic_operand_p)
      	(legitimize_pic_address, arm_is_segment_info_known)
      	(can_avoid_literal_pool_for_label_p)
      	(thumb1_legitimate_address_p, arm_legitimize_address)
      	(arm_tls_referenced_p, thumb_legitimate_constant_p)
      	(REG_OR_SUBREG_REG, thumb1_rtx_costs, thumb1_size_rtx_costs)
      	(arm_adjust_cost, arm_coproc_mem_operand_wb)
      	(neon_vector_mem_operand, neon_struct_mem_operand)
      	(symbol_mentioned_p, label_mentioned_p, )
      	(load_multiple_sequence, store_multiple_sequence)
      	(arm_select_cc_mode, arm_reload_in_hi, arm_reload_out_hi)
      	(mem_ok_for_ldrd_strd, arm_emit_call_insn, output_move_neon)
      	(arm_attr_length_move_neon, arm_assemble_integer)
      	(arm_emit_coreregs_64bit_shift, arm_valid_symbolic_address_p)
      	(extract_base_offset_in_addr, fusion_load_store): Likewise.
      156edf21
    • Andrew MacLeod's avatar
      Cleanup range of address calculations. · 47923622
      Andrew MacLeod authored
      Align EVRP and ranger for how ranges of ADDR_EXPR are calculated.
      
      	gcc/
      	* gimple-range.cc: (gimple_ranger::range_of_range_op): Check for
      	ADDR_EXPR and call range_of_address.
      	(gimple_ranger::range_of_address): Rename from
      	range_of_non_trivial_assignment and match vrp_stmt_computes_nonzero.
      	* gimple-range.h: (range_of_address): Renamed.
      	* range-op.cc: (pointer_table): Add INTEGER_CST handler.
      	gcc/testsuite/
      	* gcc.dg/tree-ssa/pr78655.c: New.
      47923622
    • Martin Jambor's avatar
      loops: Invoke lim after successful loop interchange · ac91af71
      Martin Jambor authored
      This patch makes the entry point to loop invariant motion public, so
      that it can be called after loop interchange when that pass has
      swapped loops.  This avoids the non-LTO -Ofast run-time regressions of
      410.bwaves and 503.bwaves_r (which are 19% and 15% faster than current
      master on an AMD zen2 machine) while not introducing a full LIM pass
      into the pass pipeline.
      
      The patch also adds a parameter which allows not to perform any store
      motion so that it is not done after an interchange.
      
      gcc/ChangeLog:
      
      2020-11-12  Martin Jambor  <mjambor@suse.cz>
      
      	PR tree-optimization/94406
      	* tree-ssa-loop-im.c (tree_ssa_lim): Renamed to
      	loop_invariant_motion_in_fun, added a parameter to control store
      	motion.
      	(pass_lim::execute): Adjust call to tree_ssa_lim, now
      	loop_invariant_motion_in_fun.
      	* tree-ssa-loop-manip.h (loop_invariant_motion_in_fun): Declare.
      	* gimple-loop-interchange.cc (pass_linterchange::execute): Call
      	loop_invariant_motion_in_fun if any interchange has been done.
      ac91af71
    • Richard Biener's avatar
      improve VN PHI hashing · 4d6b8d42
      Richard Biener authored
      This reduces the number of collisions for PHIs in the VN hashtable
      by always hashing the number of predecessors and separately hashing
      the block number when we never merge PHIs from different blocks.
      
      This improves collisions seen for the PR69609 testcase dramatically.
      
      2020-11-13  Richard Biener  <rguenther@suse.de>
      
      	* tree-ssa-sccvn.c (vn_phi_compute_hash): Always hash the
      	number of predecessors.  Hash the block number also for
      	loop header PHIs.
      	(expressions_equal_p): Short-cut SSA name compares, remove
      	test for NULL operands.
      	(vn_phi_eq): Cache number of predecessors, change inlined
      	test from expressions_equal_p.
      4d6b8d42
    • Iain Buclaw's avatar
      libphobos: Update libtool version to 2:0:0 · be616904
      Iain Buclaw authored
      This is so that the library is not to conflict with gcc-10.
      
      libphobos/ChangeLog:
      
      	* configure: Regenerate.
      	* configure.ac (libtool_VERSION): Update to 2:0.0.
      be616904
    • Iain Buclaw's avatar
      d: Explicitly determine which built-in copysign function to call. · d975d6dc
      Iain Buclaw authored
      For some targets, mathfn_built_in returns NULL as copysign is not
      implicitly available, causing an ICE.  Now copysign is explicitly
      requested when expanding the intrinsic.
      
      gcc/d/ChangeLog:
      
      	* intrinsics.cc (expand_intrinsic_copysign): Explicitly determine
      	which built-in copysign function to call.
      d975d6dc
    • Iain Buclaw's avatar
      d: Fix ICE in finish_thunk (PR97644) · 5d4b824f
      Iain Buclaw authored
      Because this what the upstream reference compiler did, thunks for the D
      front-end were associated with the class definition, so were forced
      code-gen even if the target function was extern.  This has now been
      changed so there are now only generated if there is a function
      definition, fixing the ICE that occurred in PR 97644, which was caused
      by calling expand_thunk() early.
      
      gcc/d/ChangeLog:
      
      	PR d/97644
      	* dmd/MERGE: Merge upstream dmd 95044d8e4.
      	* d-target.cc (TargetCPP::thunkMangle): New function.
      	* decl.cc (finish_thunk): Don't force expand thunks for external
      	functions.
      	(make_thunk): Emit thunks only if the function has a definition.
      	Generate correct mangling for thunks to C++ classes.
      
      gcc/testsuite/ChangeLog:
      
      	* gdc.dg/pr92216.d: Update scan-assember.
      5d4b824f
    • Martin Liska's avatar
      clang: fix -Wmisleading-indentation warning. · 5fa821bb
      Martin Liska authored
      gcc/c-family/c-attribs.c:4698:5: warning: misleading indentation; statement is not part of the previous 'if' [-Wmisleading-indentation]
      
      gcc/c-family/ChangeLog:
      
      	* c-attribs.c (build_attr_access_from_parms): Format properly.
      5fa821bb
    • Iain Sandoe's avatar
      doc : Fix build error from r11-4972. · 4cfa8539
      Iain Sandoe authored
      Some tex tools don't allow the @r{} command to be split across
      lines.  Fixed by making the change occupy a long line.
      
      gcc/ChangeLog:
      
      	* doc/extend.texi: Don't try to line-wrap an @r command.
      4cfa8539
    • Richard Biener's avatar
      tree-optimization/97812 - fix range query in VRP assert discovery · dcfd302a
      Richard Biener authored
      This makes sure to properly extend the input range before seeing
      whether it fits the target.
      
      2020-11-13  Richard Biener  <rguenther@suse.de>
      
      	PR tree-optimization/97812
      	* tree-vrp.c (register_edge_assert_for_2): Extend the range
      	according to its sign before seeing whether it fits.
      
      	* gcc.dg/torture/pr97812.c: New testcase.
      dcfd302a
    • Andrea Corallo's avatar
      aarch64: Make use of RTL predicates · 3793ecc1
      Andrea Corallo authored
      2020-11-10  Andrea Corallo  <andrea.corallo@arm.com>
      
      	* config/aarch64/aarch64.c (tls_symbolic_operand_type)
      	(aarch64_load_symref_appropriately, aarch64_mov128_immediate)
      	(aarch64_expand_mov_immediate)
      	(aarch64_maybe_expand_sve_subreg_move)
      	(aarch64_tls_referenced_p, aarch64_cannot_force_const_mem)
      	(aarch64_base_register_rtx_p, aarch64_classify_index)
      	(aarch64_classify_address, aarch64_symbolic_address_p)
      	(aarch64_reinterpret_float_as_int, aarch64_float_const_rtx_p)
      	(aarch64_can_const_movi_rtx_p, aarch64_select_cc_mode)
      	(aarch64_print_operand, aarch64_label_mentioned_p)
      	(aarch64_secondary_reload, aarch64_preferred_reload_class)
      	(aarch64_address_cost, aarch64_tls_symbol_p)
      	(aarch64_classify_symbol, aarch64_legitimate_pic_operand_p)
      	(aarch64_legitimate_constant_p)
      	(aarch64_sve_float_arith_immediate_p)
      	(aarch64_sve_float_mul_immediate_p, aarch64_mov_operand_p)
      	(fusion_load_store): Use RTL operands where possible.
      3793ecc1
    • Jonathan Wakely's avatar
      libstdc++: Add -pthread options to std::future polling test · 8c4e33d2
      Jonathan Wakely authored
      For linux targets this test doesn't need -lpthread because it only uses
      atomics, but for all other targets std::call_once still needs pthreads.
      Add the necessary test directives to make that work.
      
      The timings in this test might be too fragile or too target-specific, so
      it might need to be adjusted in future, or restricted to only run on
      specific targets. For now I've increased the allowed ratio between
      wait_for calls before and after the future is made ready, because it was
      failing with -O3 -march=native sometimes.
      
      libstdc++-v3/ChangeLog:
      
      	* testsuite/30_threads/future/members/poll.cc: Require gthreads
      	and add -pthread for targets that require it. Relax required
      	ratio of wait_for calls before/after the future is ready.
      8c4e33d2
    • Sudakshina Das's avatar
      aarch64: Add backend support for expanding __builtin_memset · 54bbde55
      Sudakshina Das authored
      This patch implements aarch64 backend expansion for __builtin_memset. Most of
      the implementation is based on the expansion of __builtin_memcpy. We change the
      values of SET_RATIO and MOVE_RATIO for cases where we do not have to strictly
      align and where we can benefit from NEON instructions in the backend.
      
      gcc/ChangeLog:
      
      	* config/aarch64/aarch64-protos.h (aarch64_expand_setmem): New
      	declaration.
      	* config/aarch64/aarch64.c (aarch64_gen_store_pair): Add case for
      	E_V16QImode.
      	(aarch64_set_one_block_and_progress_pointer): New helper for
      	aarch64_expand_setmem.
      	(aarch64_expand_setmem): Define the expansion for memset.
      	* config/aarch64/aarch64.h (CLEAR_RATIO): Tweak to favor
      	aarch64_expand_setmem when allowed and profitable.
      	(SET_RATIO): Likewise.
      	* config/aarch64/aarch64.md: Define pattern for setmemdi.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/tree-ssa/pr90883.C: Remove xfail for aarch64.
      	* gcc.dg/tree-prof/stringop-2.c: Add xfail for aarch64.
      	* gcc.target/aarch64/memset-corner-cases.c: New test.
      	* gcc.target/aarch64/memset-q-reg.c: New test.
      54bbde55
    • Iain Sandoe's avatar
      C-Family, Objective-C : Implement Objective-C nullability Part 1[PR90707]. · 5e28fca0
      Iain Sandoe authored
      This part of the implementation covers property nullability attributes
      and includes the changes to common code. Follow-on changes will be needed
      to cover Objective-C method definitions, but those are expected to be
      local to the Objective-C front end.
      
      The basis of the implementation is to translate the Objective-C-specific
      keywords into an attribute (objc_nullability) which has the required
      states to carry the attribute markup.
      
      We introduce the keywords, and these are parsed and validated in the same
      manner as other property attributes.  The resulting value is attached to
      the property as an objc_nullability attribute.
      
      gcc/c-family/ChangeLog:
      
      	PR objc/90707
      	* c-common.c (c_common_reswords): null_unspecified, nullable,
      	nonnull, null_resettable: New keywords.
      	* c-common.h (enum rid): RID_NULL_UNSPECIFIED, RID_NULLABLE,
      	RID_NONNULL, RID_NULL_RESETTABLE: New.
      	(OBJC_IS_PATTR_KEYWORD): Include nullability keywords in the
      	ranges accepted for property attributes.
      	* c-attribs.c (handle_objc_nullability_attribute): New.
      	* c-objc.h (enum objc_property_attribute_group): Add
      	OBJC_PROPATTR_GROUP_NULLABLE.
      	(enum objc_property_attribute_kind):Add
      	OBJC_PROPERTY_ATTR_NULL_UNSPECIFIED, OBJC_PROPERTY_ATTR_NULLABLE,
      	OBJC_PROPERTY_ATTR_NONNULL, OBJC_PROPERTY_ATTR_NULL_RESETTABLE.
      
      gcc/objc/ChangeLog:
      
      	PR objc/90707
      	* objc-act.c (objc_prop_attr_kind_for_rid): Handle nullability.
      	(objc_add_property_declaration): Handle nullability attributes.
      	Check that these are applicable to the property type.
      	* objc-act.h (enum objc_property_nullability): New.
      
      gcc/testsuite/ChangeLog:
      
      	PR objc/90707
      	* obj-c++.dg/property/at-property-4.mm: Add basic nullability
      	tests.
      	* objc.dg/property/at-property-4.m: Likewise.
      	* obj-c++.dg/attributes/nullability-00.mm: New test.
      	* obj-c++.dg/property/nullability-00.mm: New test.
      	* objc.dg/attributes/nullability-00.m: New test.
      	* objc.dg/property/nullability-00.m: New test.
      
      gcc/ChangeLog:
      
      	PR objc/90707
      	* doc/extend.texi: Document the objc_nullability attribute.
      5e28fca0
    • Iain Sandoe's avatar
      Objective-C [3/3] : Implement Wobjc-root-class [PR77404]. · 64f191b1
      Iain Sandoe authored
      Add Wno-objc-root-class where needed to the objective-c++
      tests.
      
      gcc/testsuite/ChangeLog:
      
      	PR objc/77404
      	* obj-c++.dg/attributes/class-attribute-1.mm:
      	Add Wno-objc-root-class.
      	* obj-c++.dg/attributes/class-attribute-2.mm: Likewise.
      	* obj-c++.dg/attributes/class-attribute-3.mm: Likewise.
      	* obj-c++.dg/attributes/method-deprecated-1.mm: Likewise.
      	* obj-c++.dg/attributes/method-deprecated-2.mm: Likewise.
      	* obj-c++.dg/attributes/method-deprecated-3.mm: Likewise.
      	* obj-c++.dg/attributes/method-format-1.mm: Likewise.
      	* obj-c++.dg/attributes/method-nonnull-1.mm: Likewise.
      	* obj-c++.dg/attributes/method-noreturn-1.mm: Likewise.
      	* obj-c++.dg/attributes/method-sentinel-1.mm: Likewise.
      	* obj-c++.dg/attributes/nsobject-01.mm: Likewise.
      	* obj-c++.dg/attributes/parameter-attribute-1.mm: Likewise.
      	* obj-c++.dg/attributes/parameter-attribute-2.mm: Likewise.
      	* obj-c++.dg/attributes/proto-attribute-1.mm: Likewise.
      	* obj-c++.dg/attributes/proto-attribute-3.mm: Likewise.
      	* obj-c++.dg/attributes/proto-attribute-4.mm: Likewise.
      	* obj-c++.dg/attributes/unused-parameter-1.mm: Likewise.
      	* obj-c++.dg/bad-receiver-type.mm: Likewise.
      	* obj-c++.dg/bitfield-3.mm: Likewise.
      	* obj-c++.dg/bitfield-5.mm: Likewise.
      	* obj-c++.dg/class-extension-1.mm: Likewise.
      	* obj-c++.dg/class-extension-2.mm: Likewise.
      	* obj-c++.dg/class-extension-3.mm: Likewise.
      	* obj-c++.dg/class-extension-4.mm: Likewise.
      	* obj-c++.dg/class-protocol-1.mm: Likewise.
      	* obj-c++.dg/comp-types-1.mm: Likewise.
      	* obj-c++.dg/comp-types-10.mm: Likewise.
      	* obj-c++.dg/comp-types-2.mm: Likewise.
      	* obj-c++.dg/comp-types-3.mm: Likewise.
      	* obj-c++.dg/comp-types-5.mm: Likewise.
      	* obj-c++.dg/comp-types-6.mm: Likewise.
      	* obj-c++.dg/comp-types-7.mm: Likewise.
      	* obj-c++.dg/comp-types-8.mm: Likewise.
      	* obj-c++.dg/demangle-2.mm: Likewise.
      	* obj-c++.dg/demangle-3.mm: Likewise.
      	* obj-c++.dg/duplicate-class-1.mm: Likewise.
      	* obj-c++.dg/encode-1-next.mm: Likewise.
      	* obj-c++.dg/encode-1.mm: Likewise.
      	* obj-c++.dg/enhanced-proto-2.mm: Likewise.
      	* obj-c++.dg/exceptions-1.mm: Likewise.
      	* obj-c++.dg/exceptions-3.mm: Likewise.
      	* obj-c++.dg/exceptions-4.mm: Likewise.
      	* obj-c++.dg/exceptions-5.mm: Likewise.
      	* obj-c++.dg/extern-c-1.mm: Likewise.
      	* obj-c++.dg/fobjc-std-1.mm: Likewise.
      	* obj-c++.dg/gnu-api-2-class-meta.mm: Likewise.
      	* obj-c++.dg/gnu-api-2-class.mm: Likewise.
      	* obj-c++.dg/gnu-api-2-ivar.mm: Likewise.
      	* obj-c++.dg/gnu-api-2-method.mm: Likewise.
      	* obj-c++.dg/gnu-api-2-objc.mm: Likewise.
      	* obj-c++.dg/gnu-api-2-objc_msg_lookup.mm: Likewise.
      	* obj-c++.dg/gnu-api-2-object.mm: Likewise.
      	* obj-c++.dg/gnu-api-2-property.mm: Likewise.
      	* obj-c++.dg/gnu-api-2-protocol.mm: Likewise.
      	* obj-c++.dg/gnu-api-2-resolve-method.mm: Likewise.
      	* obj-c++.dg/gnu-api-2-sel.mm: Likewise.
      	* obj-c++.dg/invalid-method-2.mm: Likewise.
      	* obj-c++.dg/ivar-invalid-type-1.mm: Likewise.
      	* obj-c++.dg/ivar-problem-1.mm: Likewise.
      	* obj-c++.dg/lto/lto.exp: Likewise.
      	* obj-c++.dg/lto/trivial-1_0.mm: Likewise.
      	* obj-c++.dg/method-1.mm: Likewise.
      	* obj-c++.dg/method-12.mm: Likewise.
      	* obj-c++.dg/method-18.mm: Likewise.
      	* obj-c++.dg/method-19.mm: Likewise.
      	* obj-c++.dg/method-20.mm: Likewise.
      	* obj-c++.dg/method-3.mm: Likewise.
      	* obj-c++.dg/method-4.mm: Likewise.
      	* obj-c++.dg/method-5.mm: Likewise.
      	* obj-c++.dg/method-8.mm: Likewise.
      	* obj-c++.dg/method-9.mm: Likewise.
      	* obj-c++.dg/method-namespace-1.mm: Likewise.
      	* obj-c++.dg/plugin/diagnostic-test-expressions-1.mm:
      	Likewise.
      	* obj-c++.dg/pr23709.mm: Likewise.
      	* obj-c++.dg/pragma-2.mm: Likewise.
      	* obj-c++.dg/private-1.mm: Likewise.
      	* obj-c++.dg/private-2.mm: Likewise.
      	* obj-c++.dg/property/property.exp: Likewise.
      	* obj-c++.dg/proto-lossage-1.mm: Likewise.
      	* obj-c++.dg/proto-lossage-5.mm: Likewise.
      	* obj-c++.dg/proto-qual-1.mm: Likewise.
      	* obj-c++.dg/protocol-inheritance-1.mm: Likewise.
      	* obj-c++.dg/protocol-inheritance-2.mm: Likewise.
      	* obj-c++.dg/protocol-optional-1.mm: Likewise.
      	* obj-c++.dg/selector-1.mm: Likewise.
      	* obj-c++.dg/selector-2.mm: Likewise.
      	* obj-c++.dg/selector-3.mm: Likewise.
      	* obj-c++.dg/selector-4.mm: Likewise.
      	* obj-c++.dg/strings/strings.exp: Likewise.
      	* obj-c++.dg/stubify-1.mm: Likewise.
      	* obj-c++.dg/stubify-2.mm: Likewise.
      	* obj-c++.dg/super-dealloc-1.mm: Likewise.
      	* obj-c++.dg/super-dealloc-2.mm: Likewise.
      	* obj-c++.dg/sync-3.mm: Likewise.
      	* obj-c++.dg/syntax-error-2.mm: Likewise.
      	* obj-c++.dg/syntax-error-4.mm: Likewise.
      	* obj-c++.dg/syntax-error-7.mm: Likewise.
      	* obj-c++.dg/syntax-error-9.mm: Likewise.
      	* obj-c++.dg/template-4.mm: Likewise.
      	* obj-c++.dg/template-7.mm: Likewise.
      	* obj-c++.dg/template-8.mm: Likewise.
      	* obj-c++.dg/threedotthree-abi-1.mm: Likewise.
      	* obj-c++.dg/torture/dg-torture.exp: Likewise.
      	* obj-c++.dg/torture/strings/strings.exp: Likewise.
      	* obj-c++.dg/try-catch-12.mm: Likewise.
      	* obj-c++.dg/try-catch-13.mm: Likewise.
      64f191b1
    • Iain Sandoe's avatar
      Objective-C [2/3] : Implement Wobjc-root-class [PR77404]. · d35fbf7f
      Iain Sandoe authored
      Add "Wno-objc-root-class" to tests in the Objective-C suite where
      needed.
      
      gcc/testsuite/ChangeLog:
      
      	PR objc/77404
      	* objc.dg/anon-1.m: Add Wno-objc-root-class.
      	* objc.dg/attributes/class-attribute-1.m: Likewise.
      	* objc.dg/attributes/class-attribute-2.m: Likewise.
      	* objc.dg/attributes/class-attribute-3.m: Likewise.
      	* objc.dg/attributes/method-deprecated-1.m: Likewise.
      	* objc.dg/attributes/method-deprecated-2.m: Likewise.
      	* objc.dg/attributes/method-deprecated-3.m: Likewise.
      	* objc.dg/attributes/method-format-1.m: Likewise.
      	* objc.dg/attributes/method-nonnull-1.m: Likewise.
      	* objc.dg/attributes/method-noreturn-1.m: Likewise.
      	* objc.dg/attributes/method-sentinel-1.m: Likewise.
      	* objc.dg/attributes/nsobject-01.m: Likewise.
      	* objc.dg/attributes/objc-exception-1.m: Likewise.
      	* objc.dg/attributes/parameter-attribute-1.m: Likewise.
      	* objc.dg/attributes/parameter-attribute-2.m: Likewise.
      	* objc.dg/attributes/proto-attribute-1.m: Likewise.
      	* objc.dg/attributes/proto-attribute-2.m: Likewise.
      	* objc.dg/attributes/proto-attribute-3.m: Likewise.
      	* objc.dg/attributes/proto-attribute-4.m: Likewise.
      	* objc.dg/bitfield-2.m: Likewise.
      	* objc.dg/break-in-ifstmt.m: Likewise.
      	* objc.dg/class-1.m: Likewise.
      	* objc.dg/class-extension-1.m: Likewise.
      	* objc.dg/class-extension-2.m: Likewise.
      	* objc.dg/class-extension-3.m: Likewise.
      	* objc.dg/class-extension-4.m: Likewise.
      	* objc.dg/class-protocol-1.m: Likewise.
      	* objc.dg/comp-types-7.m: Likewise.
      	* objc.dg/demangle-1.m: Likewise.
      	* objc.dg/duplicate-class-1.m: Likewise.
      	* objc.dg/encode-6-next.m: Likewise.
      	* objc.dg/encode-6.m: Likewise.
      	* objc.dg/enhanced-proto-2.m: Likewise.
      	* objc.dg/exceptions-1.m: Likewise.
      	* objc.dg/exceptions-3.m: Likewise.
      	* objc.dg/exceptions-4.m: Likewise.
      	* objc.dg/exceptions-5.m: Likewise.
      	* objc.dg/fobjc-std-1.m: Likewise.
      	* objc.dg/foreach-2.m: Likewise.
      	* objc.dg/foreach-4.m: Likewise.
      	* objc.dg/foreach-5.m: Likewise.
      	* objc.dg/fsyntax-only.m: Likewise.
      	* objc.dg/gnu-api-2-class-meta.m: Likewise.
      	* objc.dg/gnu-api-2-class.m: Likewise.
      	* objc.dg/gnu-api-2-ivar.m: Likewise.
      	* objc.dg/gnu-api-2-method.m: Likewise.
      	* objc.dg/gnu-api-2-objc.m: Likewise.
      	* objc.dg/gnu-api-2-objc_msg_lookup.m: Likewise.
      	* objc.dg/gnu-api-2-object.m: Likewise.
      	* objc.dg/gnu-api-2-property.m: Likewise.
      	* objc.dg/gnu-api-2-protocol.m: Likewise.
      	* objc.dg/gnu-api-2-resolve-method.m: Likewise.
      	* objc.dg/gnu-api-2-sel.m: Likewise.
      	* objc.dg/incomplete-type-1.m: Likewise.
      	* objc.dg/instancetype-0.m: Likewise.
      	* objc.dg/invalid-method-2.m: Likewise.
      	* objc.dg/ivar-invalid-type-1.m: Likewise.
      	* objc.dg/ivar-problem-1.m: Likewise.
      	* objc.dg/ivar-scope-1.m: Likewise.
      	* objc.dg/ivar-scope-2.m: Likewise.
      	* objc.dg/ivar-scope-4.m: Likewise.
      	* objc.dg/ivar-visibility-1.m: Likewise.
      	* objc.dg/ivar-visibility-2.m: Likewise.
      	* objc.dg/ivar-visibility-3.m: Likewise.
      	* objc.dg/ivar-visibility-4.m: Likewise.
      	* objc.dg/local-decl-1.m: Likewise.
      	* objc.dg/lto/lto.exp: Likewise.
      	* objc.dg/lto/trivial-1_0.m: Likewise.
      	* objc.dg/method-1.m: Likewise.
      	* objc.dg/method-12.m: Likewise.
      	* objc.dg/method-13.m: Likewise.
      	* objc.dg/method-14.m: Likewise.
      	* objc.dg/missing-proto-3.m: Likewise.
      	* objc.dg/next-runtime-1.m: Likewise.
      	* objc.dg/objc-foreach-1.m: Likewise.
      	* objc.dg/objc-foreach-2.m: Likewise.
      	* objc.dg/objc-foreach-3.m: Likewise.
      	* objc.dg/objc-nofilename-1.m: Likewise.
      	* objc.dg/param-1.m: Likewise.
      	* objc.dg/pch/pch.exp: Likewise.
      	* objc.dg/plugin/diagnostic-test-expressions-1.m: Likewise.
      	* objc.dg/pr23709.m: Likewise.
      	* objc.dg/private-1.m: Likewise.
      	* objc.dg/private-2.m: Likewise.
      	* objc.dg/property/property.exp: Likewise.
      	* objc.dg/proto-hier-1.m: Likewise.
      	* objc.dg/proto-hier-2.m: Likewise.
      	* objc.dg/proto-lossage-1.m: Likewise.
      	* objc.dg/proto-lossage-5.m: Likewise.
      	* objc.dg/proto-qual-1.m: Likewise.
      	* objc.dg/protocol-inheritance-1.m: Likewise.
      	* objc.dg/protocol-inheritance-2.m: Likewise.
      	* objc.dg/protocol-optional-1.m: Likewise.
      	* objc.dg/selector-1.m: Likewise.
      	* objc.dg/selector-2.m: Likewise.
      	* objc.dg/selector-3.m: Likewise.
      	* objc.dg/selector-4.m: Likewise.
      	* objc.dg/shadow-1.m: Likewise.
      	* objc.dg/shadow-2.m: Likewise.
      	* objc.dg/special/load-category-1.m: Likewise.
      	* objc.dg/special/load-category-2.m: Likewise.
      	* objc.dg/special/load-category-3.m: Likewise.
      	* objc.dg/special/special.exp: Likewise.
      	* objc.dg/special/unclaimed-category-1.h: Likewise.
      	* objc.dg/special/unclaimed-category-1.m: Likewise.
      	* objc.dg/stabs-1.m: Likewise.
      	* objc.dg/strings/strings.exp: Likewise.
      	* objc.dg/stubify-1.m: Likewise.
      	* objc.dg/stubify-2.m: Likewise.
      	* objc.dg/super-class-2.m: Likewise.
      	* objc.dg/super-dealloc-1.m: Likewise.
      	* objc.dg/super-dealloc-2.m: Likewise.
      	* objc.dg/sync-3.m: Likewise.
      	* objc.dg/threedotthree-abi-1.m: Likewise.
      	* objc.dg/torture/dg-torture.exp: Likewise.
      	* objc.dg/torture/strings/strings.exp: Likewise.
      	* objc.dg/try-catch-11.m: Likewise.
      	* objc.dg/try-catch-12.m: Likewise.
      	* objc.dg/type-size-2.m: Likewise.
      	* objc.dg/type-size-3.m: Likewise.
      	* objc.dg/type-size-4.m: Likewise.
      	* objc.dg/type-size-5.m: Likewise.
      	* objc.dg/undeclared-selector.m: Likewise.
      	* objc.dg/volatile-1.m: Likewise.
      d35fbf7f
    • Iain Sandoe's avatar
      C-family, Objective-C [1/3] : Implement Wobjc-root-class [PR77404]. · 3fe07cde
      Iain Sandoe authored
      This warning catches the case that the user has left the
      superclass specification from a class interface.  Root
      classes are, of course, permitted and an attribute is added
      to mark these so that the diagnostic is suppressed.
      
      The warning and attribute spellings have been kept in sync
      with the language reference implementation (clang).
      
      The diagnostic location information present in the objective-c
      interface and class definitions is relatively poor.  This patch
      adds a location for the class name to the interface and makes use
      of it in existing warnings.
      
      Part 1 is the changes to code and added tests.
      
      Many entries in the testsuite make use of root classes so
      there are a large number of mechanical changes there adding
      "-Wno-objc-root-class" to the options.
      
      The test changes are parts 2 (objective-c) and 3 (objective-c++)
      in the patch series.
      
      gcc/c-family/ChangeLog:
      
      	PR objc/77404
      	* c-attribs.c (handle_objc_root_class_attribute): New
      	* c-objc.h (objc_start_class_interface): Add a location
      	value for the position of the class name.
      	* c.opt: Add Wobjc-root-class.
      	* stub-objc.c (objc_start_class_interface): Add a location
      	value for the position of the class name.
      
      gcc/c/ChangeLog:
      
      	PR objc/77404
      	* c-parser.c (c_parser_objc_class_definition): Pass the
      	location of the class name to the interface declaration.
      
      gcc/cp/ChangeLog:
      
      	PR objc/77404
      	* parser.c (cp_parser_objc_class_interface): Pass the
      	location of the class name to the interface declaration.
      
      gcc/objc/ChangeLog:
      
      	PR objc/77404
      	* objc-act.c (objc_start_class_interface): Accept the location
      	of the class name, use it in existing diagnostic.
      	(start_class): Accept obj_root_class type attributes.  Warn when
      	the interface for an implementation does not contain a super
      	class (unless the diagnostic is suppressed by the the command
      	line flag or the objc_root_class type attribute).
      
      gcc/testsuite/ChangeLog:
      
      	PR objc/77404
      	* objc.dg/attributes/root-class-01.m: New test.
      	* objc.dg/root-class-00.m: New test.
      	* obj-c++.dg/attributes/root-class-01.mm: New test.
      	* obj-c++.dg/root-class-00.mm: New test.
      
      gcc/ChangeLog:
      
      	PR objc/77404
      	* doc/extend.texi: Document the objc_root_class attribute.
      	* doc/invoke.texi: Document -Wobjc-root-class.
      3fe07cde
    • Richard Biener's avatar
      remove almost all users of gimple_expr_code · 4852c326
      Richard Biener authored
      This replaces the old-school gimple_expr_code with more selective
      functions throughout the compiler, in all cases making the code
      shorter or more clear.
      
      2020-11-13  Richard Biener  <rguenther@suse.de>
      
      	* cfgexpand.c (gimple_assign_rhs_to_tree): Use
      	gimple_assign_rhs_class.
      	(expand_gimple_stmt_1): Likewise.
      	* gimplify-me.c (gimple_regimplify_operands): Use
      	gimple_assign_single_p.
      	* ipa-icf-gimple.c (func_checker::compare_gimple_assign):
      	Remove redundant compare.
      	(func_checker::compare_gimple_cond): Use gimple_cond_code.
      	* tree-ssa-tail-merge.c (gimple_equal_p): Likewise.
      	* predict.c (predict_loops): Use gimple_assign_rhs_code.
      4852c326
    • Aldy Hernandez's avatar
      Inline delegators in vrp_folder. · 82990836
      Aldy Hernandez authored
      gcc/ChangeLog:
      
      	* tree-vrp.c (class vrp_folder): Make visit_stmt, visit_phi,
      	and m_vr_values private.
      	(vrp_folder::vrp_evaluate_conditional): Remove.
      	(vrp_folder::vrp_simplify_stmt_using_ranges): Remove.
      	(vrp_folder::fold_predicate_in): Inline
      	vrp_evaluate_conditional and vrp_simplify_stmt_using_ranges.
      	(vrp_folder::fold_stmt): Same.
      82990836
    • Aldy Hernandez's avatar
      Move vr_values out of vrp_prop into execute_vrp so it can be shared. · 40c4eb67
      Aldy Hernandez authored
      vr_values is being shared among the propagator and the folder and
      passed around.  I've pulled it out from the propagator so it can be
      passed around to each, instead of being publicly accessible from the
      propagator.
      
      gcc/ChangeLog:
      
      	* tree-vrp.c (class vrp_prop): Rename vr_values to m_vr_values.
      	(vrp_prop::vrp_prop): New.
      	(vrp_prop::initialize): Rename vr_values to m_vr_values.
      	(vrp_prop::visit_stmt): Same.
      	(vrp_prop::visit_phi): Same.
      	(vrp_prop::finalize): Same.
      	(execute_vrp): Instantiate vrp_vr_values and pass it to folder
      	and propagator.
      40c4eb67
Loading