Commit Graph

181170 Commits

Author SHA1 Message Date
Jakub Jelinek
5cd4f8901a testsuite: guality/redeclaration1.C test workaround
Apparently older GDB versions didn't handle this test right and so while
it has been properly printing 42 on line 14 (e.g. on x86_64), it issued
a weird error on line 17 (and because it didn't print any value, guality
testsuite wasn't marking it as FAIL).
That has been apparently fixed in GDB 10, where it now (on x86_64) prints
properly.
Unfortunately that revealed that the test can suffer from instruction
scheduling, where e.g. on i686 (but various other arches) the very first
insn of the function (or whatever b 14 is on) happens to be load of the
S::i variable from memory and that insn has the inner lexical scope, so
GDB 10 prints there 24 instead of 42.  The following insn is then
the first store to l and there the automatic i is in scope and prints as 42
and then the second store to l where the inner lexical scope is current
and prints 24 again.
The test wasn't meant about insn scheduling but about whether we emit the
DIEs properly, so this hack attempts to prevent the undesirable scheduling.

2020-11-13  Jakub Jelinek  <jakub@redhat.com>

	* g++.dg/guality/redeclaration1.C (p): New variable.
	(S::f): Increment what p points to before storing S::i into l.  Adjust
	gdb-test line numbers.
	(main): Initialize p to address of an automatic variable.
2020-11-13 23:27:23 +01:00
Jakub Jelinek
1d9a8675d3 c++: Predefine __STDCPP_THREADS__ in the compiler if thread model is not single [PR63287]
The following patch predefines __STDCPP_THREADS__ macro to 1 if c++11 or
later and thread model (e.g. printed by gcc -v) is not single.
There are two targets not handled by this patch, those that define
THREAD_MODEL_SPEC.  In one case - QNX - it looks just like a mistake
to me, instead of setting thread_model=posix in config.gcc it uses
THREAD_MODEL_SPEC macro to set it unconditionally to posix.
The other is hpux10, which uses -threads option to decide if threads
are enabled or not, but that option isn't really passed to the compiler.
I think that is something that really should be solved in config/pa/
instead, e.g. in the config/xxx/xxx-c.c targets usually set their own
predefined macros and it could handle this, and either pass the option
also to the compiler, or say predefine __STDCPP_THREADS__ if _DCE_THREADS
macro is defined already (or -D_DCE_THREADS found on the command line),
or whatever else.

2020-11-13  Jakub Jelinek  <jakub@redhat.com>

	PR c++/63287
	* c-cppbuiltin.c: Include configargs.h.
	(c_cpp_builtins): For C++11 and later if THREAD_MODEL_SPEC is not
	defined, predefine __STDCPP_THREADS__ to 1 unless thread_model is
	"single".
2020-11-13 23:23:33 +01:00
Kwok Cheung Yeung
ccd56db898 In 'gcc/omp-oacc-kernels-decompose.cc', use langhook instead of accessing language-specific decl information
gcc/
	* omp-oacc-kernels-decompose.cc (maybe_build_inner_data_region):
	Use langhook instead of accessing language-specific decl
	information.
2020-11-13 22:58:57 +01:00
Gergö Barany
e898ce7997 Decompose OpenACC 'kernels' constructs into parts, a sequence of compute constructs
Not yet enabled by default: for now, the current mode of OpenACC 'kernels'
constructs handling still remains '-fopenacc-kernels=parloops', but that is to
change later.

	gcc/
	* omp-oacc-kernels-decompose.cc: New.
	* Makefile.in (OBJS): Add it.
	* passes.def: Instantiate it.
	* tree-pass.h (make_pass_omp_oacc_kernels_decompose): Declare.
	* flag-types.h (enum openacc_kernels): Add.
	* doc/invoke.texi (-fopenacc-kernels): Document.
	* gimple.h (enum gf_mask): Add
	'GF_OMP_TARGET_KIND_OACC_PARALLEL_KERNELS_PARALLELIZED',
	'GF_OMP_TARGET_KIND_OACC_PARALLEL_KERNELS_GANG_SINGLE',
	'GF_OMP_TARGET_KIND_OACC_DATA_KERNELS'.
	(is_gimple_omp_oacc, is_gimple_omp_offloaded): Handle these.
	* gimple-pretty-print.c (dump_gimple_omp_target): Likewise.
	* omp-expand.c (expand_omp_target, build_omp_regions_1)
	(omp_make_gimple_edges): Likewise.
	* omp-low.c (scan_sharing_clauses, scan_omp_for)
	(check_omp_nesting_restrictions, lower_oacc_reductions)
	(lower_oacc_head_mark, lower_omp_target): Likewise.
	* omp-offload.c (execute_oacc_device_lower): Likewise.
	gcc/c-family/
	* c.opt (fopenacc-kernels): Add.
	gcc/fortran/
	* lang.opt (fopenacc-kernels): Add.
	gcc/testsuite/
	* c-c++-common/goacc/kernels-decompose-1.c: New.
	* c-c++-common/goacc/kernels-decompose-2.c: New.
	* c-c++-common/goacc/kernels-decompose-ice-1.c: New.
	* c-c++-common/goacc/kernels-decompose-ice-2.c: New.
	* gfortran.dg/goacc/kernels-decompose-1.f95: New.
	* gfortran.dg/goacc/kernels-decompose-2.f95: New.
	* c-c++-common/goacc/if-clause-2.c: Adjust.
	* gfortran.dg/goacc/kernels-tree.f95: Likewise.
	libgomp/
	* testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose-ice-1.c:
	New.
	* testsuite/libgomp.oacc-c-c++-common/declare-vla-kernels-decompose.c:
	Likewise.
	* testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c:
	Likewise.
	* testsuite/libgomp.oacc-c-c++-common/declare-vla.c: Adjust.
	* testsuite/libgomp.oacc-fortran/pr94358-1.f90: Likewise.

Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>
2020-11-13 22:58:57 +01:00
Thomas Schwinge
bd78857554 More explicit checking of which OMP constructs we're expecting
In particular, more precisely highlight what applies generally vs. the special
handling for the current 'parloops'-based OpenACC 'kernels' implementation.

	gcc/
	* omp-low.c (scan_sharing_clauses, scan_omp_for)
	(lower_oacc_reductions, lower_omp_target): More explicit checking
	of which OMP constructs we're expecting.
2020-11-13 22:58:57 +01:00
Thomas Schwinge
703e4f8649 Attach an attribute to all outlined OpenACC compute regions
This allows for making some things more explicit, later on.

	gcc/
	* omp-expand.c (expand_omp_target): Attach an attribute to all
	outlined OpenACC compute regions.
	* omp-offload.c (execute_oacc_device_lower): Adjust.
	gcc/testsuite/
	* c-c++-common/goacc/classify-parallel.c: Adjust.
	* gfortran.dg/goacc/classify-parallel.f95: Likewise.
	* c-c++-common/goacc/classify-serial.c: New.
	* gfortran.dg/goacc/classify-serial.f95: Likewise.
2020-11-13 22:58:57 +01:00
Gergö Barany
d1ba078d9b Add 'libgomp.oacc-fortran/pr94358-1.f90' [PR94358]
Document status quo re PR94358 "[OMP] Privatize internal array variables
introduced by the Fortran FE".

	libgomp/
	PR fortran/94358
	* testsuite/libgomp.oacc-fortran/pr94358-1.f90: New.

Co-authored-by: Thomas Schwinge <thomas@codesourcery.com>
2020-11-13 22:58:56 +01:00
Jason Merrill
d4a3152d3f c++: Add feature test macro for C++20 using enum.
Missing piece from the 'using enum' implementation patch.

gcc/c-family/ChangeLog:

	* c-cppbuiltin.c (c_cpp_builtins): Define __cpp_using_enum.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/feat-cxx2a.C: Check it.
2020-11-13 16:34:06 -05:00
Jan Hubicka
1a90e99fa2 Fix modref insertion hook.
* ipa-modref.c (modref_summaries::insert,
	modref_summaries_lto::insert): Remove summary if ipa-modref is disabled.
2020-11-13 21:15:40 +01:00
Jan Hubicka
8fca8142bc Copied arguments are readonly
* attr-fnspec.h (attr_fnspec::arg_readonly_p): Accept '1'...'9'.
2020-11-13 21:14:37 +01:00
Jonathan Wakely
91004436da libstdc++: Avoid more 32-bit time_t overflows in futex calls
This fixes another overflow in code converting a std::chrono::seconds
duration to a time_t. This time in the new code using a futex wait with
an absolute timeout (so this one doesn't need to be backported to the
release branches).

A timeout after the epochalypse would overflow the tv_sec field,
producing an incorrect value. If that incorrect value happened to be
negative, the syscall would return with EINVAL and then the caller would
keep retrying, spinning until the timeout was reached.  If the value
happened to be positive, we would wake up too soon and incorrectly
report a timeout

libstdc++-v3/ChangeLog:

	* src/c++11/futex.cc (relative_timespec): Add [[unlikely]]
	attributes.
	(__atomic_futex_unsigned_base::_M_futex_wait_until)
	(__atomic_futex_unsigned_base::_M_futex_wait_until_steady):
	Check for overflow.
	* testsuite/30_threads/future/members/wait_until_overflow.cc:
	New test.
2020-11-13 19:11:07 +00:00
Peter Jones
500e7efee9 Clarify the documentation for the ms_abi fucntion attribute
gcc/

	* doc/extend.texi: Clarify the documentation for the ms_abi
	function attribute.
2020-11-13 12:08:48 -07:00
Andrew MacLeod
fcbb6018ab Re: Fix gimple_expr_code?
have gimple_expr_code return the correct code for GIMPLE_ASSIGN.
use gassign and gcond in gimple_range_handler.

	* gimple-range.h (gimple_range_handler): Cast to gimple stmt
	kinds before asking for code and type.
	* gimple.h (gimple_expr_code): Call gassign and gcond routines
	to get their expr_code.
2020-11-13 13:59:44 -05:00
Eduard-Mihai Burtescu
84096498a7 libiberty: Support the new ("v0") mangling scheme in rust-demangle
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.
2020-11-13 18:59:09 +00:00
Seija Kijin
16b00dc63f Make strstr.c in libiberty ANSI compliant
libiberty/

	* strstr.c (strstr): Make implementation ANSI/POSIX compliant.
2020-11-13 11:53:16 -07:00
Jason Merrill
d50310408f c++: Implement C++20 'using enum'. [PR91367]
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: Nathan 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.
2020-11-13 13:36:29 -05:00
Vladimir N. Makarov
e3b3b59683 [PATCH] Implementation of asm goto outputs
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.
2020-11-13 13:01:51 -05:00
Jakub Jelinek
67100cb50e openmp: Support allocate for C/C++ array section reductions
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.
2020-11-13 18:57:06 +01:00
Martin Jambor
2e97d6443f ipa-cp: One more safe_add (PR 97816)
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.
2020-11-13 18:30:11 +01:00
Piotr H. Dabrowski
6f1ae1ecd3 Do not warn about unused macros while processing #pragma GCC optimize
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()
2020-11-13 12:28:33 -05:00
Jonathan Wakely
e7e0eeeb6e libstdc++: Avoid 32-bit time_t overflows in futex calls
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.
2020-11-13 17:19:12 +00:00
Andrew MacLeod
0d1189b4e6 Add 3 new EVRP testcases.
test new evrp functionality.

	gcc/testsuite/
	* gcc.dg/tree-ssa/evrp20.c
	* gcc.dg/tree-ssa/evrp21.c
	* gcc.dg/tree-ssa/evrp22.c
2020-11-13 11:43:38 -05:00
Martin Liska
2935ff7eb7 testsuite: move expected error location
gcc/testsuite/ChangeLog:

	PR testsuite/97788
	* g++.dg/ubsan/pr61272.C: Move expected error location.
2020-11-13 17:40:15 +01:00
Martin Liska
a98ebdc50a libsanitizer: update LOCAL_PATCHES.
libsanitizer/ChangeLog:

	* LOCAL_PATCHES: Update to the latest commit.
2020-11-13 17:31:16 +01:00
Martin Liska
d72227e29a libsanitizer: Apply local patches. 2020-11-13 17:29:28 +01:00
Martin Liska
98f792ff53 libsanitizer: merge from master. 2020-11-13 17:28:49 +01:00
Jozef Lawrynowicz
a514934a05 MSP430: Skip index-1.c test
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.
2020-11-13 15:36:30 +00:00
Jozef Lawrynowicz
54896b10db MSP430: Implement TARGET_INSN_COST
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.
2020-11-13 15:36:30 +00:00
Jozef Lawrynowicz
546c8f9558 MSP430: Add defaulting to the insn length attribute
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.
2020-11-13 15:36:30 +00:00
Jozef Lawrynowicz
f62dd39823 MSP430: Implement TARGET_RTX_COSTS
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.
2020-11-13 15:36:30 +00:00
Jozef Lawrynowicz
953587a2b0 MSP430: Implement TARGET_MEMORY_MOVE_COST
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.
2020-11-13 15:36:29 +00:00
Jan Hubicka
602c6cfc79 Improve handling of memory operands in ipa-icf 2/4
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.
2020-11-13 16:04:48 +01:00
Jan Hubicka
a1fdc16da3 Determine access types in ipa-icf-gimple.c
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.
2020-11-13 16:04:48 +01:00
Andrea Corallo
156edf21fa arm: Make use of RTL predicates
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.
2020-11-13 15:45:48 +01:00
Andrew MacLeod
47923622c6 Cleanup range of address calculations.
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.
2020-11-13 09:36:20 -05:00
Martin Jambor
ac91af71c9 loops: Invoke lim after successful loop interchange
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.
2020-11-13 15:35:18 +01:00
Richard Biener
4d6b8d4213 improve VN PHI hashing
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.
2020-11-13 15:19:49 +01:00
Iain Buclaw
be6169045e libphobos: Update libtool version to 2:0:0
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.
2020-11-13 14:58:58 +01:00
Iain Buclaw
d975d6dce9 d: Explicitly determine which built-in copysign function to call.
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.
2020-11-13 14:58:58 +01:00
Iain Buclaw
5d4b824faf d: Fix ICE in finish_thunk (PR97644)
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.
2020-11-13 14:58:58 +01:00
Martin Liska
5fa821bba7 clang: fix -Wmisleading-indentation warning.
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.
2020-11-13 14:05:17 +01:00
Iain Sandoe
4cfa85396c doc : Fix build error from r11-4972.
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.
2020-11-13 11:50:20 +00:00
Richard Biener
dcfd302a79 tree-optimization/97812 - fix range query in VRP assert discovery
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.
2020-11-13 12:24:54 +01:00
Andrea Corallo
3793ecc10f aarch64: Make use of RTL predicates
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.
2020-11-13 12:03:43 +01:00
Jonathan Wakely
8c4e33d203 libstdc++: Add -pthread options to std::future polling test
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.
2020-11-13 11:01:24 +00:00
Sudakshina Das
54bbde550e aarch64: Add backend support for expanding __builtin_memset
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.
2020-11-13 10:48:27 +00:00
Iain Sandoe
5e28fca09c C-Family, Objective-C : Implement Objective-C nullability Part 1[PR90707].
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.
2020-11-13 10:40:54 +00:00
Iain Sandoe
64f191b152 Objective-C [3/3] : Implement Wobjc-root-class [PR77404].
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.
2020-11-13 10:40:54 +00:00
Iain Sandoe
d35fbf7f76 Objective-C [2/3] : Implement Wobjc-root-class [PR77404].
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.
2020-11-13 10:40:54 +00:00
Iain Sandoe
3fe07cdec8 C-family, Objective-C [1/3] : Implement Wobjc-root-class [PR77404].
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.
2020-11-13 10:39:48 +00:00