180757 Commits

Author SHA1 Message Date
Richard Biener
4c198ddff8 tree-optimization/97558 - compute vectype for SLP nested cycles
This makes sure to compute the vector type for invariant SLP children
of nested cycles.

2020-11-02  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97558
	* tree-vect-loop.c (vectorizable_reduction): For nested SLP
	cycles compute invariant operands vector type.

	* gcc.dg/vect/pr97558-2.c: New testcase.
2020-11-02 12:34:00 +01:00
Aldy Hernandez
f3a3327fe3 Add test for PR97505.
gcc/testsuite/ChangeLog:

	PR tree-optimization/97505
	* gcc.dg/pr97505.c: New test.
2020-11-02 11:36:59 +01:00
Richard Biener
5b41d673ad tree-optimization/97558 - avoid SLP analyzing irrelevant stmts
This avoids analyzing reductions that are not relevant (thus dead)
which eventually will lead into crashes because the participating
stmts meta is not analyzed.  For this to work the patch also
properly removes reduction groups that are not uniformly recognized
as patterns.

2020-11-02  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97558
	* tree-vect-loop.c (vect_fixup_scalar_cycles_with_patterns):
	Check for any mismatch in pattern vs. non-pattern and dissolve
	the group if there is one.
	* tree-vect-slp.c (vect_analyze_slp_instance): Avoid
	analyzing not relevant reductions.
	(vect_analyze_slp): Avoid analyzing not relevant reduction
	groups.

	* gcc.dg/vect/pr97558.c: New testcase.
2020-11-02 11:03:30 +01:00
Richard Biener
a159081ad4 tree-optimization/97650 - fix ICE in vect_get_and_check_slp_defs
I was mistaken to treat vect_external_def as only applying to
SSA_NAME defs, so check for that.

2020-11-02  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97650
	* tree-vect-slp.c (vect_get_and_check_slp_defs): Check
	for SSA_NAME before checking SSA_NAME_IS_DEFAULT_DEF.

	* gcc.dg/vect/bb-slp-pr97650.c: New testcase.
2020-11-02 11:03:30 +01:00
Kito Cheng
4ad7047780 RISC-V: Check multiletter extension has more than 1 letter
gcc/ChangeLog:

	* common/config/riscv/riscv-common.c
	(riscv_subset_list::parse_multiletter_ext): Checking multiletter
	extension has more than 1 letter.

gcc/testsuite/ChangeLog

	* gcc.target/riscv/arch-7.c: New.
	* gcc.target/riscv/attribute-10.c: Update test arch string.
2020-11-02 17:09:00 +08:00
Kito Cheng
c1e6691245 RISC-V: Add configure option: --with-multilib-generator to flexible config multi-lib settings.
- Able to configure complex multi-lib rule in configure time, without modify
   any in-tree source.

 - I was consider to implmenet this into `--with-multilib-list` option,
   but I am not sure who will using that with riscv*-*-elf*, so I decide to
   using another option name for that.

 - --with-multilib-generator will pass arguments to multilib-generator, and
   then using the generated multi-lib config file to build the toolchain.

   e.g. Build riscv gcc, default arch/abi is rv64gc/lp64, and build multilib
       for rv32imafd/ilp32 and rv32i/ilp32; rv32ic/ilp32 will reuse
       rv32i/ilp32.
    $ <GCC-SRC>/configure \
       --target=riscv64-elf \
       --with-arch=rv64gc --with-abi=lp64 \
       --with-multilib-generator=rv32i-ilp32--c;rv32imafd-ilp32--

V3 Changes:

 - Rename --with-multilib-config to --with-multilib-generator
 - Check --with-multilib-generator and --with-multilib-list can't be used at
   same time.

V2 Changes:

 - Fix --with-multilib-config hanling on non riscv*-*-elf* triple.

gcc/ChangeLog:

	* config.gcc (riscv*-*-*): Handle --with-multilib-generator.
	* configure: Regen.
	* configure.ac: Add --with-multilib-generator.
	* config/riscv/multilib-generator: Exit when parsing arch string error.
	* config/riscv/t-withmultilib-generator: New.
	* doc/install.texi: Document --with-multilib-generator.
2020-11-02 17:00:51 +08:00
Christophe Lyon
c3c3e2c9e8 arm: Improve handling of relocations with small offsets with -mpure-code on v6m (PR96770)
With -mpure-code on v6m (thumb-1), we can use small offsets with
upper/lower relocations to avoid the extra addition of the
offset.

This patch accepts expressions symbol+offset as legitimate constants
when the literal pool is disabled, making sure that the offset is
within the range supported by thumb-1 [0..255] as described in the
AAELF32 documentation.

It also makes sure that thumb1_movsi_insn emits an error in case we
try to use it with an unsupported RTL construct.

2020-09-28  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	PR target/96770
	* config/arm/arm.c (thumb_legitimate_constant_p): Accept
	(symbol_ref + addend) when literal pool is disabled.
	(arm_valid_symbolic_address_p): Add support for thumb-1 without
	MOVT/MOVW.
	* config/arm/thumb1.md (*thumb1_movsi_insn): Accept (symbol_ref +
	addend) in the pure-code alternative.

	gcc/testsuite/
	PR target/96770
	* gcc.target/arm/pure-code/pr96770.c: New test.
2020-11-02 07:34:50 +00:00
Christophe Lyon
4d9af90d6a arm: Avoid indirection with -mpure-code on v6m (PR96967)
With -mpure-code on v6m (thumb-1), to avoid a useless indirection when
building the address of a symbol, we want to consider SYMBOL_REF as a
legitimate constant. This way, we build the address using a series of
upper/lower relocations instead of loading the address from memory.

This patch also fixes a missing "clob" conds attribute for
thumb1_movsi_insn, needed because that alternative clobbers the flags.

2020-11-02  Christophe Lyon  <christophe.lyon@linaro.org>

	gcc/
	PR target/96967
	* config/arm/arm.c (thumb_legitimate_constant_p): Add support for
	disabled literal pool in thumb-1.
	* config/arm/thumb1.md (thumb1_movsi_symbol_ref): Remove.
	(*thumb1_movsi_insn): Add support for SYMBOL_REF with -mpure-code.

	gcc/testsuite
	PR target/96967
	* gcc.target/arm/pure-code/pr96767.c: New test.
2020-11-02 07:31:22 +00:00
Iain Sandoe
590febb5f6 Darwin: Adjust the PCH area to allow for 16384byte page size.
Newer versions of Darwin report pagesize 20 which means that we
need to adjust the aligment of the PCH area.

gcc/ChangeLog:

	* config/host-darwin.c: Align pch_address_space to 16384.
2020-11-01 20:33:47 +00:00
Iain Sandoe
bb93020ff8 Objective-C : Implement SEL as a built-in typedef.
The reference implementation for Objective-C provides the SEL
typedef (although it is also available from <objc/objc.h>).

gcc/objc/ChangeLog:

	* objc-act.c (synth_module_prologue): Get the SEL identifier.
	* objc-act.h (enum objc_tree_index): Add OCTI_SEL_NAME.
	(objc_selector_name): New.
	(SEL_TYPEDEF_NAME): New.
	* objc-gnu-runtime-abi-01.c
	(gnu_runtime_01_initialize): Initialize SEL typedef.
	* objc-next-runtime-abi-01.c
	(next_runtime_01_initialize): Likewise.
	* objc-next-runtime-abi-02.c

gcc/testsuite/ChangeLog:

	* obj-c++.dg/SEL-typedef.mm: New test.
	* objc.dg/SEL-typedef.m: New test.
2020-11-01 20:28:57 +00:00
Iain Sandoe
7a2cc1e843 Objective-C/C++ : Improve '@' keyword locations.
When we are lexing tokens for Objective-C, we combine '@' tokens
with a following keyword (when that keyword is a valid Objective-C
one or, for Objective-C, one of the C++ keywords that can appear in
this position).  The responsibility is passed on to the parser to
validate the resulting combination.

The combination of tokens was being done without applying the rule
to their locations - so that we get:

@property
^

instead of what the user might expect:

@property
^~~~~~~~~

This patch combines the source range of the keyword with that of the
'@' sign - which improves diagnostics.

gcc/c-family/ChangeLog:

	* c-lex.c (c_lex_with_flags): When combining '@' with a
	keyword for Objective-C, combine the location ranges too.
2020-11-01 20:21:41 +00:00
Iain Sandoe
e344ea07e4 Objective-C++ : Address a FIXME.
We can avoid the spurious additional complaint about a closing
')' by short-circuiting the test in the case we know there's a
syntax error already reported.

gcc/cp/ChangeLog:

	* parser.c (cp_parser_objc_at_property_declaration): Use any
	exisiting syntax error to suppress complaints about a missing
	closing parenthesis in parsing property attributes.

gcc/testsuite/ChangeLog:

	* obj-c++.dg/property/at-property-1.mm: Adjust test after
	fixing spurious error output.
2020-11-01 20:15:25 +00:00
Pat Bernardi
3784f161a3 i386: Set the stack usage to 0 for naked functions
gcc/ChangeLog

	* config/i386/i386.c (ix86_expand_prologue): Set the stack usage to 0
	for naked functions.
2020-11-01 18:51:08 +01:00
Iain Buclaw
895fdc1f4c ipa: Fix segmentation fault in function_summary<clone_info*>::get(cgraph_node*)
PR 97660 occurs when cgraph_node::get returns NULL, and this NULL
cgraph_node is then passed to clone_info::get.  As the original assert
prior to the regressing change in r11-4587 allowed for the cgraph_node
to be NULL, clone_info::get is now only called when cgraph_node::get
returns a nonnull value.

gcc/ChangeLog:

	PR ipa/97660
	* cgraph.c (cgraph_edge::redirect_call_stmt_to_callee): Don't call
	clone_info::get when cgraph_node::get returns NULL.
2020-11-01 18:21:35 +01:00
Iain Sandoe
318be202bb testsuite, X86 : Add target requires masm_intel to three tests.
These tests currently fail on targets without Intel assembler support.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/amxbf16-asmintel-1.c: Require masm_intel.
	* gcc.target/i386/amxint8-asmintel-1.c: Likewise.
	* gcc.target/i386/amxtile-asmintel-1.c: Likewise.
2020-11-01 16:27:54 +00:00
Jonathan Wakely
29e4184858 libstdc++: Define type traits for wchar_t even when libc support missing
This meets the requirement that std::is_integral_v<wchar_t> is true,
even when full library support for wchar_t via specializations of
char_traits etc. is not provided. This is done by checking
__WCHAR_TYPE__ to see if the compiler knows about the type, rather than
checking the library's own _GLIBCXX_USE_WCHAR_T autoconf macro.

This assumes that the C++ compiler correctly defines wchar_t as a
distinct type, not a typedef for one of the other integeral types. This
is always true for G++ and should be true for any supported non-GNU
compilers.

Similarly, the std::make_unsigned and std::make_signed traits and the
internal helpers std::__is_integer and std::__is_char are also changed
to depend on the same macro.

libstdc++-v3/ChangeLog:

	* include/std/type_traits (is_integral<wchar_t>)
	(make_unsigned<wchar_t>, make_signed<wchar_t>): Define based
	on #ifdef __WCHAR_TYPE__ instead of _GLIBCXX_USE_WCHAR_T.
	* include/bits/cpp_type_traits.h (__is_integer<wchar_t>)
	(__is_char<wchar_t>): Likewise.
2020-11-01 11:39:07 +00:00
François Dumont
de77abee11 libstdc++: Fix gnu-version-namespace buid
Co-authored-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog

	* src/c++17/floating_from_chars.cc (_GLIBCXX_USE_CX11_ABI): Add define.
	(buffering_string): New.
	[!_GLIBCXX_USE_CXX11_ABI](reserve_string): New.
	(from_chars): Adapt.
	* src/c++20/sstream-inst.cc: Limit instantiations to
	_GLIBCXX_USE_CXX11_ABI.
2020-10-31 18:10:10 +01:00
Jonathan Wakely
60d9f25487 libstdc++: Prefer double to long double in std::shuffle_order_engine
The transition algorithm for std::shuffle_order_engine uses long double
to ensure that the value (max() - min() + 1) can be accurately
represented, to avoid bias in the shuffling. However, when the base
engine's range is small enough we can avoid slower long double
arithmetic by using double. For example, long double is unnecessary for
any base engine returning 32-bit values.

This makes std::knuth_b::operator() about 15% faster on x86_64, and
probably even more on targets where long double uses soft-float.

libstdc++-v3/ChangeLog:

	* include/bits/random.h (independent_bit_engine): Fix typo
	in comment.
	(shuffle_order_engine): Fix incorrect description in comment.
	* include/bits/random.tcc (__representable_as_double
	(__p1_representable_as_double): New helper functions.
	(shuffle_order_engine::operator()): Use double for calculation
	if (max() - min() + 1) is representable as double.
	* testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error
	line number.
2020-10-31 12:54:03 +00:00
Jan Hubicka
ae7a23a3fa Move clone_info to summary
* Makefile.in: (OBJS): Add symtab-clones.o
	(GTFILES): Add symtab-clones.h
	* cgraph.c: Include symtab-clones.h.
	(cgraph_edge::resolve_speculation): Fix formating
	(cgraph_edge::redirect_call_stmt_to_callee): Update.
	(cgraph_update_edges_for_call_stmt): Update
	(release_function_body): Fix formating.
	(cgraph_node::remove): Fix formating.
	(cgraph_node::dump): Fix formating.
	(cgraph_node::get_availability): Fix formating.
	(cgraph_node::call_for_symbol_thunks_and_aliases): Fix formating.
	(set_const_flag_1): Fix formating.
	(set_pure_flag_1): Fix formating.
	(cgraph_node::can_remove_if_no_direct_calls_p): Fix formating.
	(collect_callers_of_node_1): Fix formating.
	(clone_of_p): Update.
	(cgraph_node::verify_node): Update.
	(cgraph_c_finalize): Call clone_info::release ().
	* cgraph.h (struct cgraph_clone_info): Move to symtab-clones.h.
	(cgraph_node): Remove clone_info.
	(symbol_table): Add m_clones.
	* cgraphclones.c: Include symtab-clone.h.
	(duplicate_thunk_for_node): Update.
	(cgraph_node::create_clone): Update.
	(cgraph_node::create_virtual_clone): Update.
	(cgraph_node::find_replacement): Update.
	(cgraph_node::materialize_clone): Update.
	* gengtype.c (open_base_files): Include symtab-clones.h.
	* ipa-cp.c: Include symtab-clones.h.
	(initialize_node_lattices): Update.
	(want_remove_some_param_p): Update.
	(create_specialized_node): Update.
	* ipa-fnsummary.c: Include symtab-clones.h.
	(ipa_fn_summary_t::duplicate): Update.
	* ipa-modref.c: Include symtab-clones.h.
	(update_signature): Update.
	* ipa-param-manipulation.c: Include symtab-clones.h.
	(ipa_param_body_adjustments::common_initialization): Update.
	* ipa-prop.c: Include symtab-clones.h.
	(adjust_agg_replacement_values): Update.
	(ipcp_get_parm_bits): Update.
	(ipcp_update_bits): Update.
	(ipcp_update_vr): Update.
	* ipa-sra.c: Include symtab-clones.h.
	(process_isra_node_results): Update.
	(disable_unavailable_parameters): Update.
	* lto-cgraph.c: Include symtab-clone.h.
	(output_cgraph_opt_summary_p): Update.
	(output_node_opt_summary): Update.
	(input_node_opt_summary): Update.
	* symtab-clones.cc: New file.
	* symtab-clones.h: New file.
	* tree-inline.c (expand_call_inline): Update.
	(update_clone_info): Update.
	(tree_function_versioning): Update.
2020-10-31 10:18:06 +01:00
Jan Hubicka
617695cdc2 Handle fnspec in local ipa-modref
* ipa-modref.c (modref_summary::dump): Dump writes_errno.
	(parm_map_for_arg): Break out from ...
	(merge_call_side_effects): ... here.
	(get_access_for_fnspec): New function.
	(process_fnspec): New function.
	(analyze_call): Use it.
	(analyze_stmt): Update.
	(analyze_function): Initialize writes_errno.
	(modref_summaries::duplicate): Duplicate writes_errno.
	* ipa-modref.h (struct modref_summary): Add writes_errno.
	* tree-ssa-alias.c (call_may_clobber_ref_p_1): Check errno.
2020-10-31 08:56:40 +01:00
Jonathan Wakely
943cc2a1b7 libstdc++: Use double for unordered container load factors [PR 96958]
My previous commit for this PR changed the types from long double to
double, but didn't change the uses of __builtin_ceill and
__builtin_floorl. It also failed to change the non-inline functions in
src/c++11/hashtable_c++0x.cc. This should fix it properly now.

libstdc++-v3/ChangeLog:

	PR libstdc++/96958
	* include/bits/hashtable_policy.h (_Prime_rehash_policy)
	(_Power2_rehash_policy): Use ceil and floor instead of ceill and
	floorl.
	* src/c++11/hashtable_c++0x.cc (_Prime_rehash_policy): Likewise.
	Use double instead of long double.
2020-10-31 00:52:57 +00:00
Patrick Palka
afb8da7faa libstdc++: Don't initialize from *this inside some views [PR97600]
This works around a subtle issue where instantiating the begin()/end()
member of some views (as part of return type deduction) inadvertently
requires computing the satisfaction value of range<foo_view>.

This is problematic because the constraint range<foo_view> requires the
begin()/end() member to be callable.  But it's not callable until we've
deduced its return type, so evaluation of range<foo_view> yields false
at this point.  And if after both members are instantiated (and their
return types deduced) we evaluate range<foo_view> again, this time it
will yield true since the begin()/end() members are now both callable.
This makes the program ill-formed according to [temp.constr.atomic]/3:

  If, at different points in the program, the satisfaction result is
  different for identical atomic constraints and template arguments, the
  program is ill-formed, no diagnostic required.

The views affected by this issue are those whose begin()/end() member
has a placeholder return type and that member initializes an _Iterator
or _Sentinel object from a reference to *this.  The second condition is
relevant because it means explicit conversion functions are considered
during overload resolution (as per [over.match.copy], I think), and
therefore it causes g++ to check the constraints of the conversion
function view_interface<foo_view>::operator bool().  And this conversion
function's constraints indirectly require range<foo_view>.

This issue is observable on trunk only with basic_istream_view (as in
the testcase in the PR).  But a pending patch that makes g++ memoize
constraint satisfaction values indefinitely (it currently invalidates
the satisfaction cache on various events) causes many existing tests for
the other affected views to fail, because range<foo_view> then remains
false for the whole compilation.

This patch works around this issue by adjusting the constructors of the
_Iterator and _Sentinel types of the affected views to take their
foo_view argument by pointer instead of by reference, so that g++ no
longer considers explicit conversion functions when resolving the
direct-initialization inside these views' begin()/end() members.

libstdc++-v3/ChangeLog:

	PR libstdc++/97600
	* include/std/ranges (basic_istream_view::begin): Initialize
	_Iterator from 'this' instead of '*this'.
	(basic_istream_view::_Iterator::_Iterator): Adjust constructor
	accordingly.
	(filter_view::_Iterator::_Iterator): Take a filter_view*
	argument instead of a filter_view& argument.
	(filter_view::_Sentinel::_Sentinel): Likewise.
	(filter_view::begin): Initialize _Iterator from 'this' instead
	of '*this'.
	(filter_view::end): Likewise.
	(transform_view::_Iterator::_Iterator): Take a _Parent* instead
	of a _Parent&.
	(filter_view::_Iterator::operator+): Adjust accordingly.
	(filter_view::_Iterator::operator-): Likewise.
	(filter_view::begin): Initialize _Iterator from 'this' instead
	of '*this'.
	(filter_view::end): Likewise.
	(join_view::_Iterator): Take a _Parent* instead of a _Parent&.
	(join_view::_Sentinel): Likewise.
	(join_view::begin): Initialize _Iterator from 'this' instead of
	'*this'.
	(join_view::end): Initialize _Sentinel from 'this' instead of
	'*this'.
	(split_view::_OuterIter): Take a _Parent& instead of a _Parent*.
	(split_view::begin): Initialize _OuterIter from 'this' instead
	of '*this'.
	(split_view::end): Likewise.
	* testsuite/std/ranges/97600.cc: New test.
2020-10-30 20:33:19 -04:00
Jonathan Wakely
39bf4f14fc libstdc++: Implement P2017R1 "Conditionally borrowed ranges"
This makes some range adaptors model the borrowed_range concept if they
are adapting a borrowed range. This hasn't been added to the C++23
working paper yet, but it has been approved by LWG, and the
recommendation is to treat it as a defect report for C++20 as well.

libstdc++-v3/ChangeLog:

	* include/std/ranges (enable_borrowed_view<take_view<T>>)
	(enable_borrowed_view<drop_view<T>>)
	(enable_borrowed_view<drop_while_view<T>>)
	(enable_borrowed_view<reverse_view<T>>)
	(enable_borrowed_view<common_view<T>>)
	(enable_borrowed_view<elements_view<T>>): Add partial
	specializations as per P2017R1.
	* testsuite/std/ranges/adaptors/conditionally_borrowed.cc:
	New test.
2020-10-30 23:25:52 +00:00
Michael Meissner
f03851e1a6 PowerPC: Don't assume all targets have GLIBC.
gcc/
2020-10-30  Michael Meissner  <meissner@linux.ibm.com>

	* config/rs6000/rs6000.c (glibc_supports_ieee_128bit): New helper
	function.
	(rs6000_option_override_internal): Call it.
2020-10-30 18:36:25 -04:00
Jonathan Wakely
a1343e5c74 libstdc++: Use double for unordered container load factors [PR 96958]
These calculations were changed to use long double nearly ten years ago
in order to get more precision than float:
https://gcc.gnu.org/pipermail/libstdc++/2011-September/036420.html

However, double should be sufficient, whlie being potentially faster
than long double, and not requiring soft FP calculations for targets
without native long double support.

libstdc++-v3/ChangeLog:

	PR libstdc++/96958
	* include/bits/hashtable_policy.h (_Prime_rehash_policy)
	(_Power2_rehash_policy): Use double instead of long double.
2020-10-30 20:58:08 +00:00
Jonathan Wakely
d1e5d82af8 libstdc++: Fix some more warnings in test
libstdc++-v3/ChangeLog:

	* testsuite/23_containers/vector/bool/modifiers/insert/31370.cc:
	Avoid -Wcatch-value warnings.
2020-10-30 20:58:08 +00:00
Harald Anlauf
667db6dedd PR libfortran/97581 - clean up size calculation of random generator state
The random number generator internal state may be saved to/restored from
an array of integers.  Clean up calculation of needed number of elements
to avoid redefiniton of auxiliary macro SZ.

libgfortran/ChangeLog:

	* intrinsics/random.c (SZ_IN_INT_4): Define size of state in int32_t.
	(SZ_IN_INT_8): Define size of state in int64_t.
	(SZ): Remove.
	(random_seed_i4): Use size SZ_IN_INT_4 instead of SZ.
	(random_seed_i8): Use size SZ_IN_INT_8 instead of SZ.
2020-10-30 20:49:32 +01:00
qing zhao
d10f3e900b Add -fzero-call-used-regs option and zero_call_used_regs function attributes.
This new feature causes the compiler to zero a  subset of all call-used
registers at function return.  This is used to increase program security
by either mitigating Return-Oriented Programming (ROP) attacks or
preventing information leakage through registers.

gcc/ChangeLog:

2020-10-30  Qing Zhao  <qing.zhao@oracle.com>
	    H.J.Lu  <hjl.tools@gmail.com>

	* common.opt: Add new option -fzero-call-used-regs
	* config/i386/i386.c (zero_call_used_regno_p): New function.
	(zero_call_used_regno_mode): Likewise.
	(zero_all_vector_registers): Likewise.
	(zero_all_st_registers): Likewise.
	(zero_all_mm_registers): Likewise.
	(ix86_zero_call_used_regs): Likewise.
	(TARGET_ZERO_CALL_USED_REGS): Define.
	* df-scan.c (df_epilogue_uses_p): New function.
	(df_get_exit_block_use_set): Replace EPILOGUE_USES with
	df_epilogue_uses_p.
	* df.h (df_epilogue_uses_p): Declare.
	* doc/extend.texi: Document the new zero_call_used_regs attribute.
	* doc/invoke.texi: Document the new -fzero-call-used-regs option.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in (TARGET_ZERO_CALL_USED_REGS): New hook.
	* emit-rtl.h (struct rtl_data): New field must_be_zero_on_return.
	* flag-types.h (namespace zero_regs_flags): New namespace.
	* function.c (gen_call_used_regs_seq): New function.
	(class pass_zero_call_used_regs): New class.
	(pass_zero_call_used_regs::execute): New function.
	(make_pass_zero_call_used_regs): New function.
	* optabs.c (expand_asm_reg_clobber_mem_blockage): New function.
	* optabs.h (expand_asm_reg_clobber_mem_blockage): Declare.
	* opts.c (zero_call_used_regs_opts): New structure array
	initialization.
	(parse_zero_call_used_regs_options): New function.
	(common_handle_option): Handle -fzero-call-used-regs.
	* opts.h (zero_call_used_regs_opts): New structure array.
	* passes.def: Add new pass pass_zero_call_used_regs.
	* recog.c (valid_insn_p): New function.
	* recog.h (valid_insn_p): Declare.
	* resource.c (init_resource_info): Replace EPILOGUE_USES with
	df_epilogue_uses_p.
	* target.def (zero_call_used_regs): New hook.
	* targhooks.c (default_zero_call_used_regs): New function.
	* targhooks.h (default_zero_call_used_regs): Declare.
	* tree-pass.h (make_pass_zero_call_used_regs): Declare.

gcc/c-family/ChangeLog:

2020-10-30  Qing Zhao  <qing.zhao@oracle.com>
	    H.J.Lu  <hjl.tools@gmail.com>

	* c-attribs.c (c_common_attribute_table): Add new attribute
	zero_call_used_regs.
	(handle_zero_call_used_regs_attribute): New function.

gcc/testsuite/ChangeLog:

2020-10-30  Qing Zhao  <qing.zhao@oracle.com>
	    H.J.Lu  <hjl.tools@gmail.com>

	* c-c++-common/zero-scratch-regs-1.c: New test.
	* c-c++-common/zero-scratch-regs-10.c: New test.
	* c-c++-common/zero-scratch-regs-11.c: New test.
	* c-c++-common/zero-scratch-regs-2.c: New test.
	* c-c++-common/zero-scratch-regs-3.c: New test.
	* c-c++-common/zero-scratch-regs-4.c: New test.
	* c-c++-common/zero-scratch-regs-5.c: New test.
	* c-c++-common/zero-scratch-regs-6.c: New test.
	* c-c++-common/zero-scratch-regs-7.c: New test.
	* c-c++-common/zero-scratch-regs-8.c: New test.
	* c-c++-common/zero-scratch-regs-9.c: New test.
	* c-c++-common/zero-scratch-regs-attr-usages.c: New test.
	* gcc.target/i386/zero-scratch-regs-1.c: New test.
	* gcc.target/i386/zero-scratch-regs-10.c: New test.
	* gcc.target/i386/zero-scratch-regs-11.c: New test.
	* gcc.target/i386/zero-scratch-regs-12.c: New test.
	* gcc.target/i386/zero-scratch-regs-13.c: New test.
	* gcc.target/i386/zero-scratch-regs-14.c: New test.
	* gcc.target/i386/zero-scratch-regs-15.c: New test.
	* gcc.target/i386/zero-scratch-regs-16.c: New test.
	* gcc.target/i386/zero-scratch-regs-17.c: New test.
	* gcc.target/i386/zero-scratch-regs-18.c: New test.
	* gcc.target/i386/zero-scratch-regs-19.c: New test.
	* gcc.target/i386/zero-scratch-regs-2.c: New test.
	* gcc.target/i386/zero-scratch-regs-20.c: New test.
	* gcc.target/i386/zero-scratch-regs-21.c: New test.
	* gcc.target/i386/zero-scratch-regs-22.c: New test.
	* gcc.target/i386/zero-scratch-regs-23.c: New test.
	* gcc.target/i386/zero-scratch-regs-24.c: New test.
	* gcc.target/i386/zero-scratch-regs-25.c: New test.
	* gcc.target/i386/zero-scratch-regs-26.c: New test.
	* gcc.target/i386/zero-scratch-regs-27.c: New test.
	* gcc.target/i386/zero-scratch-regs-28.c: New test.
	* gcc.target/i386/zero-scratch-regs-29.c: New test.
	* gcc.target/i386/zero-scratch-regs-30.c: New test.
	* gcc.target/i386/zero-scratch-regs-31.c: New test.
	* gcc.target/i386/zero-scratch-regs-3.c: New test.
	* gcc.target/i386/zero-scratch-regs-4.c: New test.
	* gcc.target/i386/zero-scratch-regs-5.c: New test.
	* gcc.target/i386/zero-scratch-regs-6.c: New test.
	* gcc.target/i386/zero-scratch-regs-7.c: New test.
	* gcc.target/i386/zero-scratch-regs-8.c: New test.
	* gcc.target/i386/zero-scratch-regs-9.c: New test.
2020-10-30 20:41:38 +01:00
Vladimir N. Makarov
44fbc9c6e0 Take insn scratch RA requirements into account in IRA.
The patch changes insn scratches which require registers for all
insn alternatives (in other words w/o X constraint in scratch
constraint string).  This is done before IRA staring its work.  LRA
still continue to change the rest scratches (with X constraint and in
insn created during IRA) into pseudos.  As before the patch at the end
of LRA work, spilled scratch pseudos (for which X constraint was
chosen) changed into scratches back.

gcc/ChangeLog:

	* lra.c (get_scratch_reg): New function.
	(remove_scratches_1): Rename remove_insn_scratches.  Use
	ira_remove_insn_scratches and get_scratch_reg.
	(remove_scratches): Do not
	initialize scratches, scratch_bitmap, and scratch_operand_bitmap.
	(lra): Call ira_restore_scratches instead of restore_scratches.
	(struct sloc, sloc_t, scratches, scratch_bitmap)
	(scratch_operand_bitmap, lra_former_scratch_p)
	(lra_former_scratch_operand_p, lra_register_new_scratch_op)
	(restore_scratches): Move them to ...
	* ira.c: ... here.
	(former_scratch_p, former_scratch_operand_p): Rename to
	ira_former_scratch_p and ira_former_scratch_operand_p.
	(contains_X_constraint_p): New function.
	(register_new_scratch_op): Rename to ira_register_new_scratch_op.
	Change it to work for IRA and LRA.
	(restore_scratches): Rename to ira_restore_scratches.
	(get_scratch_reg, ira_remove_insn_scratches): New functions.
	(ira): Call ira_remove_scratches if we use LRA.
	* ira.h (ira_former_scratch_p, ira_former_scratch_operand_p): New
	prototypes.
	(ira_register_new_scratch_op, ira_restore_scratches): New prototypes.
	(ira_remove_insn_scratches): New prototype.
	* lra-int.h (lra_former_scratch_p, lra_former_scratch_operand_p):
	Remove prototypes.
	(lra_register_new_scratch_op): Ditto.
	* lra-constraints.c: Rename lra_former_scratch_p and
	lra_former_scratch_p to ira_former_scratch_p and to
	ira_former_scratch_p.
	* lra-remat.c: Ditto.
	* lra-spills.c: Rename lra_former_scratch_p to ira_former_scratch_p.
2020-10-30 15:08:23 -04:00
Martin Sebor
bdf6524bc0 PR middle-end/97556 - ICE on excessively large index into a multidimensional array
gcc/ChangeLog:

	PR middle-end/97556
	* builtins.c (access_ref::add_offset): Cap offset lower bound
	to at most the the upper bound.

gcc/testsuite/ChangeLog:

	PR middle-end/97556
	* gcc.dg/Warray-bounds-70.c: New test.
2020-10-30 13:04:29 -06:00
Patrick Palka
f3ced6772e libstdc++: Fix the default constructor of ranges::__detail::__box
The class template semiregular-box<T> of [range.semi.wrap] is specified
to value-initialize the underlying object whenever its type is default
initializable.  Our primary template for __detail::__box respects this
requirement, but the recently added partial specialization (for types
that are already semiregular) does not.

This patch fixes this issue, and additionally makes the corresponding in
place constructor explicit (as in the primary template).

libstdc++-v3/ChangeLog:

	* include/std/ranges (__detail::__box): For the partial
	specialization used by types that are already semiregular,
	make the default constructor value-initialize the underlying
	object instead of default-initializing it.  Make its in place
	constructor explicit.
	* testsuite/std/ranges/adaptors/detail/semiregular_box.cc:
	Augment test.
2020-10-30 12:33:13 -04:00
Tobias Burnus
24d762d143 testsuite: Avoid TCL errors when rootme or ASAN/TSAN/UBSAN is not avail
gcc/testsuite/
	* g++.dg/guality/guality.exp: Skip $rootme-based check if unset.
	* gcc.dg/guality/guality.exp: Likewise.
	* gfortran.dg/guality/guality.exp: Likewise.
	* lib/asan-dg.exp: Don't use $asan_saved_library_path if not set.
	* lib/tsan-dg.exp: Don't use $tsan_saved_library_path if not set.
	* lib/ubsan-dg.exp: Don't use $ubsan_saved_library_path if not set.
2020-10-30 17:11:20 +01:00
Tobias Burnus
1fc5e7ef98 Fortran: Update omp atomic for OpenMP 5
gcc/fortran/ChangeLog:

	* dump-parse-tree.c (show_omp_clauses): Handle atomic clauses.
	(show_omp_node): Call it for atomic.
	* gfortran.h (enum gfc_omp_atomic_op): Add GFC_OMP_ATOMIC_UNSET,
	remove GFC_OMP_ATOMIC_SEQ_CST and GFC_OMP_ATOMIC_ACQ_REL.
	(enum gfc_omp_memorder): Replace OMP_MEMORDER_LAST by
	OMP_MEMORDER_UNSET, add OMP_MEMORDER_SEQ_CST/OMP_MEMORDER_RELAXED.
	(gfc_omp_clauses): Add capture and atomic_op.
	(gfc_code): remove omp_atomic.
	* openmp.c (enum omp_mask1): Add atomic, capture, memorder clauses.
	(gfc_match_omp_clauses): Match them.
	(OMP_ATOMIC_CLAUSES): Add.
	(gfc_match_omp_flush): Update for 'last' to 'unset' change.
	(gfc_match_omp_oacc_atomic): Removed and placed content ..
	(gfc_match_omp_atomic): ... here. Update for OpenMP 5 clauses.
	(gfc_match_oacc_atomic): Match directly here.
	(resolve_omp_atomic, gfc_resolve_omp_directive): Update.
	* parse.c (parse_omp_oacc_atomic): Update for struct gfc_code changes.
	* resolve.c (gfc_resolve_blocks): Update assert.
	* st.c (gfc_free_statement): Also call for EXEC_O{ACC,MP}_ATOMIC.
	* trans-openmp.c (gfc_trans_omp_atomic): Update.
	(gfc_trans_omp_flush): Update for 'last' to 'unset' change.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/atomic-2.f90: New test.
	* gfortran.dg/gomp/atomic.f90: New test.
2020-10-30 15:57:46 +01:00
Jan Hubicka
aa701610e5 Fix thunk info WRT PCH
PR pch/97593
	* cgraph.c (cgraph_node::create_thunk): Register thunk as early during
	parsing.
	* cgraphunit.c (analyze_functions): Call
	thunk_info::process_early_thunks.
	* symtab-thunks.cc (struct unprocessed_thunk): New struct.
	(thunks): New static variable.
	(thunk_info::register_early): New member function.
	(thunk_info::process_early_thunks): New member function.
	* symtab-thunks.h (thunk_info::register_early): Declare.
	(thunk_info::process_early_thunks): Declare.
2020-10-30 14:30:43 +01:00
Jan Hubicka
40cb3f8ac8 Disable TBAA for array descriptors.
* trans-types.c: Include alias.h
	(gfc_get_array_type_bounds): Set typeless storage.
2020-10-30 14:28:23 +01:00
Richard Biener
82ff7e3426 tree-optimization/97623 - avoid excessive insert iteration for hoisting
This avoids requiring insert iteration for back-to-back hoisting
opportunities as seen in the added testcase.  For the PR at hand
this halves the number of insert iterations retaining only
the hard to avoid PRE / hoist insert back-to-backs.

2020-10-30  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97623
	* tree-ssa-pre.c (insert): First do hoist insertion in
	a backward walk.

	* gcc.dg/tree-ssa/ssa-hoist-7.c: New testcase.
2020-10-30 13:35:24 +01:00
Richard Biener
33c0f246f7 tree-optimization/97626 - handle SCCs properly in SLP stmt analysis
This makes sure to roll-back the whole SCC when we fail stmt
analysis, otherwise the optimistic visited treatment breaks down
with different entries.  Rollback is easy when tracking additions
to visited in a vector which also makes the whole thing cheaper
than the two hash-sets used before.

2020-10-30  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97626
	* tree-vect-slp.c (vect_slp_analyze_node_operations):
	Exchange the lvisited hash-set for a vector, roll back
	recursive adds to visited when analysis failed.
	(vect_slp_analyze_operations): Likewise.

	* gcc.dg/vect/bb-slp-pr97626.c: New testcase.
2020-10-30 12:28:42 +01:00
Jakub Jelinek
5cafae2c5b openmp: Use FIELD_TGT_EMPTY once more
2020-10-30  Jakub Jelinek  <jakub@redhat.com>

	* target.c (gomp_map_vars_internal): Use FIELD_TGT_EMPTY macro
	even in field_tgt_clear initializer.
2020-10-30 12:03:36 +01:00
Thomas Schwinge
fa410314ec [OpenACC] Elaborate testcases that verify column location information [PR92793]
After PR92793 commit 9c81750c5bedd7883182ee2684a012c6210ebe1d "Fortran] PR
92793 - fix column used for error diagnostic", commit
d0d0ba20f2345023e9cec2419c9fb9e6cc7098c6 did "Add tests to verify OpenACC
clause locations", later fixed up in PR92901 commit
e6c90dba73291435c244decb9a89c47019cc5a45 to "Fix PR92901: Change test
expectation for C++ in OpenACC test clause-locations.c".

Now, add some more testing to verify/document the status quo.

	gcc/testsuite/
	PR fortran/92793
	* c-c++-common/goacc/clause-locations.c: Rewrite into...
	* c-c++-common/goacc/pr92793-1.c: ... this.
	* gfortran.dg/goacc/clause-locations.f90: Rewrite into...
	* gfortran.dg/goacc/pr92793-1.f90: ... this.
2020-10-30 11:26:30 +01:00
Martin Liska
63d0da8852 gcc-changelog: Handle situations like '* tree-vect-slp.c (): '
contrib/ChangeLog:

	* gcc-changelog/git_commit.py: Handle empty groups in
	file description.
	* gcc-changelog/test_email.py: New test.
	* gcc-changelog/test_patches.txt: Likewise.
2020-10-30 11:24:49 +01:00
zhengnannan
c517003e71 AArch64: Add FLAG for float conversion intrinsics [PR94442]
2020-10-30  Zhiheng Xie  <xiezhiheng@huawei.com>
	    Nannan Zheng  <zhengnannan@huawei.com>

gcc/ChangeLog:

	* config/aarch64/aarch64-simd-builtins.def: Add proper FLAG
	for conversion intrinsics.
2020-10-30 10:22:30 +00:00
Richard Biener
c0bfd9672e tree-optimization/97633 - fix SLP scheduling of single-node cycles
This makes sure to update backedges in single-node cycles.

2020-10-30  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/97633
	* tree-vect-slp.c (): Update backedges in single-node cycles.
	Optimize processing of externals.

	* g++.dg/vect/slp-pr97636.cc: New testcase.
	* gcc.dg/vect/bb-slp-pr97633.c: Likewise.
2020-10-30 10:46:08 +01:00
Alex Coplan
7de23b8c53 aarch64: Fix PR96998 and restore code quality in combine
This change fixes a bug in the AArch64 backend. Currently, we accept an
odd sign_extract representation of addresses, but don't accept that same
odd form of address as an LEA.

This is the cause of PR96998. In the testcase given in the PR, combine
produces:

(insn 9 8 10 3 (set (mem:SI (plus:DI (sign_extract:DI (mult:DI (subreg:DI (reg/v:SI 92 [ g ]) 0)
                        (const_int 4 [0x4]))
                    (const_int 34 [0x22])
                    (const_int 0 [0]))
                (reg/f:DI 96)) [3 *i_5+0 S4 A32])
        (asm_operands:SI ("") ("=Q") 0 []
             []
             [] test.c:11)) "test.c":11:5 -1
     (expr_list:REG_DEAD (reg/v:SI 92 [ g ])
        (nil)))

Then LRA reloads the address and we ICE because we fail to recognize the
sign_extract outside the mem:

(insn 33 8 34 3 (set (reg:DI 100)
        (sign_extract:DI (ashift:DI (subreg:DI (reg/v:SI 92 [ g ]) 0)
                (const_int 2 [0x2]))
            (const_int 34 [0x22])
            (const_int 0 [0]))) "test.c":11:5 -1
     (nil))

The aarch64 changes here remove the support for this sign_extract
representation of addresses, fixing PR96998. Now this by itself would
regress code quality, so this change is paired with an improvement to
combine which prevents an extract rtx from being emitted in this case:
we now write the rtx above as a shift of an extend, which allows the
combination to go ahead.

Prior to this, combine.c:make_extraction() identified where we can emit
an ashift of an extend in place of an extraction, but failed to make the
corresponding canonicalization/simplification when presented with a mult
by a power of two. Such a representation is canonical when representing
a left-shifted address inside a mem.

This change remedies this situation. For rtxes such as:

(mult:DI (subreg:DI (reg:SI r) 0) (const_int 2^n))

where the bottom 32 + n bits are valid (the higher-order bits are
undefined) and make_extraction() is being asked to sign_extract the
lower (valid) bits, after the patch, we rewrite this as:

(mult:DI (sign_extend:DI (reg:SI r)) (const_int 2^n))

instead of using a sign_extract.

gcc/ChangeLog:

	PR target/96998
	* combine.c (make_extraction): Also handle shifts written as
	(mult x 2^n), avoid creating an extract rtx for these.
	* config/aarch64/aarch64.c (aarch64_is_extend_from_extract): Delete.
	(aarch64_classify_index): Remove extract-based address handling.
	(aarch64_strip_extend): Likewise.
	(aarch64_rtx_arith_op_extract_p): Likewise, remove now-unused parameter.
	Update callers...
	(aarch64_rtx_costs): ... here.

gcc/testsuite/ChangeLog:

	PR target/96998
	* gcc.c-torture/compile/pr96998.c: New test.
2020-10-30 09:21:31 +00:00
Olivier Hainque
17e8da49bf Predefine __ppc and __ppc__ for VxWorks 7
Unfortunately, some VxWorks 7r2 system headers rely on a
couple more variations of the predefined macros expected
to characterize a "powerpc" target that we discussed recently.

setjmp.h, for example, relies on __ppc and the absence of
a definition results in "gcc" dejagnu test failures from all
the tests #including that header, which stumble on:

  #error "_JBLEN not set!"

The other case is __ppc__ expected by yvals.h, key to libstdc++.

This change adjusts the VxWorks 7 section of our configuration
to honor those expectations.

2020-10-29  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config/rs6000/vxworks.h (TARGET_OS_CPP_BUILTINS): Also
	builtin_define __ppc and __ppc__ for VxWorks 7.
2020-10-30 08:25:26 +00:00
Olivier Hainque
9a835ba4c0 Introduce support for vxworks7r2 on x86 and x86_64
This change extends the VxWorks support on intel CPUs to
VxWorks7r2 for x86_64 as well as x86, with a "mcmodel=large"
additional multilib for the 64bit configuration.

The support for fPIC is not functional yet for this model,
so we just don't add the corresponding multilib.

We extend the range of CPU families handled by TARGET_OS_CPP_BUILTINS,
accounting for the fact that archs older than PENTIUM4 are
not supported (any more) by VxWorks 7.

As we did for powerpc, we leverage VX_CPU_PREFIX to emit different
forms of definitions for different families of VxWorks as the system
headers's expectations has evolved between Vx 5, 6 and 7.

2020-10-27  Olivier Hainque  <hainque@adacore.com>

gcc/
	* config.gcc: Adjust the ix86/x86_64-wrs-vxworks filters
	to apply to VxWorks 7 as well.
	* config/i386/t-vxworks (MULTILIB_OPTIONS, MULTILIB_DIRNAMES):
	Remove the fPIC multilib and add one for the large code model
	on x86_64.
	* config/i386/vxworks.h: Separate sections for TARGET_VXWORKS7,
	other variants and common bits.
	(TARGET_OS_CPP_BUILTINS): Augment to support a range of CPU
	families. Leverage VX_CPU_PREFIX.
	(CC1_SPEC): Add definition.
	(STACK_CHECK_PROTECT): Use conditional expression instead of
	heavier to read conditioned macro definitions.

libgcc/
	* config.host: Adjust the ix86/x86_64-wrs-vxworks filters
	to apply to VxWorks 7 as well.

Co-authored-by: Douglas Rupp <rupp@adacore.com>
Co-authored-by: Pat Bernardi <bernardi@adacore.com>
2020-10-30 08:25:26 +00:00
Jakub Jelinek
71e713209a openmp: Fix handling of allocate clause on taskloop
This patch fixes gimplification of allocate clause on taskloop - puts
allocate on inner taskloop only if there is allocate clause, because otherwise
the data sharing clauses are only on the task construct in the construct sandwich.

2020-10-30  Jakub Jelinek  <jakub@redhat.com>

	* gimplify.c (gimplify_scan_omp_clauses): Force
	OMP_CLAUSE_ALLOCATE_ALLOCATOR into a temporary if it is non-NULL and
	non-constant.
	(gimplify_omp_for): Only put allocate on inner taskloop if lastprivate
	for the same variable is going to be put there, and in that case
	if the OMP_CLAUSE_ALLOCATE_ALLOCATOR is non-NULL non-constant, make
	the allocator firstprivate on task.

	* c-c++-common/gomp/allocate-3.c: New test.
2020-10-30 09:18:36 +01:00
Jakub Jelinek
5a6b1d8ef4 openmp: Handle non-static data members in allocate clause and other C++ allocate fixes
This allows specification of non-static data members in allocate clause like it
can be specified in other privatization clauses and adds a new testcase that covers
also handling of that clause in templates.

2020-10-30  Jakub Jelinek  <jakub@redhat.com>

	* semantics.c (finish_omp_clauses) <case OMP_CLAUSE_ALLOCATE>: Handle
	non-static members in methods.
	* pt.c (tsubst_omp_clauses): Handle OMP_CLAUSE_ALLOCATE.

	* c-c++-common/gomp/allocate-1.c (qux): Add another test.
	* g++.dg/gomp/allocate-1.C: New test.
2020-10-30 09:16:45 +01:00
Richard Biener
973574465c Adjust gcc.dg/vect/bb-slp-pr65935.c
This adjusts the testcase to allow splitting up the group for
larger vector sizes and thus printing the splat message multiple times.

2020-10-30  Richard Biener  <rguenther@suse.de>

	* gcc.dg/vect/bb-slp-pr65935.c: Adjust.
2020-10-30 09:13:24 +01:00
Michael Meissner
228156e849 PowerPC: Adjust float128/ibm128 warnings.
This patch ccombines two patches:

1) If GLIBC is 2.32 or newer, and the language is C or C++, allow the user to
   change the long double type without having to use -Wno-psabi.

2) Adjust the warnings for intermixing __float128 and __ibm128 to accomidate
   the future change to allow long double to use the IEEE 128-bit format.

gcc/
2020-10-29  Michael Meissner  <meissner@linux.ibm.com>

	* config/rs6000/rs6000.c (rs6000_option_override_internal): Allow
	long double type to be changed for C/C++ if glibc 2.32 or newer.
	(rs6000_invalid_binary_op): Update error messages about mixing IBM
	long double and IEEE 128-bit.

gcc/testsuite/
2020-10-27  Michael Meissner  <meissner@linux.ibm.com>

	* gcc.target/powerpc/float128-mix-2.c: New test.
	* gcc.target/powerpc/float128-mix-3.c: New test.
	* gcc.target/powerpc/float128-mix.c: Update failure messages.
2020-10-29 22:15:10 -04:00
David Edelsohn
dec1eb4c27 libstdc++: AIX xfail for_overwrite.cc testcase
The 20_util/unique_ptr/creation/for_overwrite.cc testcase relies on
operator new, which requires special features on AIX.  This patch
disables the testcase.

libstdc++-v3/ChangeLog:

	* testsuite/20_util/unique_ptr/creation/for_overwrite.cc: XFAIL on AIX.
2020-10-29 21:57:24 -04:00