PR target/88465
* config/i386/i386.md (*movdi_internal, *movsi_internal,
*movhi_internal, *movqi_internal): Add alternative(s) to load
0 or -1 into k registers using kxor or kxnoq instructions.
* gcc.target/i386/avx512f-pr88465.c: New test.
* gcc.target/i386/avx512dq-pr88465.c: New test.
From-SVN: r267078
PR target/88461
* config/i386/sse.md (VI1248_AVX512VLBW, AVX512ZEXTMASK): New
mode iterators.
(<avx512>_testm<mode>3<mask_scalar_merge_name>,
<avx512>_testnm<mode>3<mask_scalar_merge_name>): Merge patterns
with VI12_AVX512VL and VI48_AVX512VL iterators into ones with
VI1248_AVX512VLBW iterator.
(*<avx512>_testm<VI1248_AVX512VLBW:mode>3_zext,
*<avx512>_testm<VI1248_AVX512VLBW:mode>3_zext_mask,
*<avx512>_testnm<VI1248_AVX512VLBW:mode>3_zext,
*<avx512>_testnm<VI1248_AVX512VLBW:mode>3_zext_mask): New
define_insns.
* gcc.target/i386/pr88461.c: New test.
From-SVN: r267077
The type table encoding can be DW_EH_PE_absptr, but this case
was missing, which was causing abort on ARM32 EABI. Add the
missing case.
Reviewed-on: https://go-review.googlesource.com/c/153857
From-SVN: r267070
PR fortran/88463
* trans-openmp.c (gfc_omp_predetermined_sharing): Handle TREE_READONLY
VAR_DECLs with DECL_EXTERNAL like those with TREE_STATIC.
* testsuite/libgomp.fortran/pr88463-1.f90: New test.
* testsuite/libgomp.fortran/pr88463-2.f90: New test.
From-SVN: r267069
This increases the time to wait for signals to be delivered in the
TestAtomicStop testcase. When running gccgo tests on ppc64 or ppc64le,
there are intermittent failures in this test because the wait time is
too small.
Updates golang/go#29046
Reviewed-on: https://go-review.googlesource.com/c/153879
From-SVN: r267068
/cp
2018-12-12 Paolo Carlini <paolo.carlini@oracle.com>
* decl.c (grokdeclarator): Fix location of error message about
static data member definition.
/testsuite
2018-12-12 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/other/static5.C: New.
From-SVN: r267066
The testcase uses REs like {(?n)\m_*bar[.$_]constprop[.$_]0:} to find
what functions are defined. But, this also matches lines like
.L.bar.constprop.0:(which are used on powerpc64-linux).
The "(?n)" doesn't do anything here either. We should use "^" here
instead of just "\m".
PR testsuite/88318
* gcc.dg/independent-cloneids-1.c: Use ^ not \m.
From-SVN: r267063
* config/aarch64/aarch64.c (aarch64_override_options): Once arch,
cpu and tune were validated, insert SUBTARGET_OVERRIDE_OPTIONS if
defined.
From-SVN: r267060
* config/aarch64/aarch64.c (PROBE_STACK_FIRST_REG) : Redefine as
R9_REGNUM instead of 9.
(PROBE_STACK_SECOND_REG): Redefine as R10_REGNUM instead of 10.
From-SVN: r267059
Although filesystem::path::iterator is only a bidirectional iterator,
the underlying sequence has random access iterators (specifically, raw
pointers). This means std::distance and std::advance can be implemented
more efficiently than the generic versions which apply ++ and --
repeatedly.
PR libstdc++/71044 (partial)
* include/bits/fs_path.h (__path_iter_distance, __path_iter_advance):
New friend functions to implement std::distance and std::advance more
efficiently.
(distance, advance): Add overloads for path::iterator.
* testsuite/27_io/filesystem/path/itr/components.cc: Test new
overload.
From-SVN: r267057
Ensure we don't try to instantiate __is_constructible_from<void, void>,
because there are two partial specializations that are equally good
matches.
PR libstdc++/80762
* include/bits/fs_path.h (path::_Path): Use remove_cv_t and is_void.
* include/experimental/bits/fs_path.h (path::_Path): Likewise.
* testsuite/27_io/filesystem/path/construct/80762.cc: New test.
* testsuite/experimental/filesystem/path/construct/80762.cc: New test.
From-SVN: r267056
This test currently fails unexpectedly if GCC is configured with
--disable-gcov, because it requires -fprofile-arcs. This patch
fixes the issue by requiring profiling support in order to run
this test.
Tested with two compilers, one built with --disable-gcov, resulting
in the test reporting an UNSUPPORTED result; and one built with gcov
support, resulting in 2 PASS tests.
gcc/testsuite/ChangeLog:
* gcc.dg/lto/20100430-1_0.c: Add dg-require-profiling requirement.
From-SVN: r267055
Add test-case that forces alloc.c functions to fail, and check whether fail
handling is robust.
This is the test-case for "[libbacktrace] Fix segfault upon allocation
failure". Without that patch, this test-case fails like this:
...
allocfail.sh: line 71: 26041 Segmentation fault (core dumped) \
./allocfail $i > /dev/null 2>&1
Unallowed fail found: 13
FAIL allocfail.sh (exit status: 1)
...
This is a seperate patch because the test-case is nontrivial.
Bootstrapped and reg-tested on x86_64.
2018-12-12 Tom de Vries <tdevries@suse.de>
* Makefile.am (TESTS): Add allocfail.sh.
(check_PROGRAMS): Add allocfail.
* Makefile.in: Regenerate.
* instrumented_alloc.c: New file. Redefine malloc and realloc.
Include alloc.c.
* allocfail.c: New file.
* allocfail.sh: New file.
From-SVN: r267054
Currently, .cfi_endproc and FUNC_END(__trampoline_setup) are placed
inside the #else branch of an "#if defined (__VXWORKS__) ...", so
non-pic vxworks does not get proper CFI nor a .size directive for
__trampoline_setup. I assume there's no magic reason for that (which
would warrant a comment), so move them outside.
From-SVN: r267051
The PR is about unnecessary saves of the pic base register, it shows on m32 Linux and m32/m64 Darwin.
The fix is to check that we are in a pic mode and that the picbase has actually been used.
As a bonus, some #ifdef’d TARGET_MACHO code is no longer required.
2018-12-12 Segher Boessenkool <segher@kernel.crashing.org>
Iain Sandoe <iain@sandoe.co.uk>
PR target/88343
* config/rs6000/rs6000.c (save_reg_p): Do not save the picbase reg
unless it has been used.
(first_reg_to_save): Remove dead code.
Co-Authored-By: Iain Sandoe <iain@sandoe.co.uk>
From-SVN: r267049
Recent changes to the lowerings for call handling in rs6000
have broken bootstrap for powerpc-darwin. This patch modifies
the calls to handle Darwin asa subset, a subsequent patch will
split Darwin out.
2018-12-12 Iain Sandoe <iain@sandoe.co.uk>
* config/rs6000/darwin.md (call_indirect_nonlocal_darwin64): Remove.
(call_nonlocal_darwin64): Remove.
(call_value_indirect_nonlocal_darwin64): Remove.
(call_value_nonlocal_darwin64): Remove.
* config/rs6000/rs6000.c (rs6000_call_template_1): Handle Darwin with
the same asm output as AIX/ELFv2. (rs6000_call_sysv): Preserve the
CALL_LONG flag when needed for Darwin.
* config/rs6000/rs6000.md (define expand “call”): Expand Darwin as
per sysv.
(define_expand “call_value”): Likewise.
(define_expand “sibcall”): Likewise.
(define_expand “sibcall_value”): Likewise.
(call_indirect_nonlocal_sysv): Mark the clobber mode P.
(call_nonlocal_sysv): Likewise.
(call_nonlocal_sysv_secure): Likewise.
(call_value_indirect_nonlocal_sysv): Likewise.
(call_value_nonlocal_sysv): Likewise.
(call_value_nonlocal_sysv_secure): Likewise.
(call_local64): Mark the clobber DI.
(call_value_local64): Likewise.
From-SVN: r267046
2018-12-11 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88155
* primary.c (gfc_match_structure_constructor): Set the locus of
an expression to avoid a NULL pointer dereference.
2018-12-11 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88155
* gfortran.dg/pr70870_1.f90: Update testcase to use -std=gnu.
* gfortran.dg/pr88155.f90: New test.
From-SVN: r267041
2018-12-11 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88249
* gfortran.h: Update prototype for gfc_resolve_filepos().
* io.c (gfc_resolve_filepos): Check for UNIT number if ERR= is present.
Use passed in locus for error message.
* resolve.c (gfc_resolve_code): Pass locus in gfc_resolve_filepos()
call.
2018-12-11 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/88249
* gfortran.dg/pr88249.f90: New test.
From-SVN: r267035
libada/
PR ada/88429
* configure.ac (default_gnatlib_target): Set to gnatlib instead of
gnatlib-plain if --disable-shared.
* configure: Regenerate.
* Makefile.in (all): Replace gnatlib prerequisite with libada.
(ADA_RTS_SUBDIR): Delete.
(libada): New target, renamed from...
(gnatlib): ...this. Merge with other library targets.
(gnatlib-plain): Delete.
(install-gnatlib): Rename to...
(install-libada): ...this.
(install): Replace install-gnatlib prerequisite with install-libada.
gcc/ada/
PR ada/88429
* gcc-interface/Makefile.in (./stamp-gnatlib1-$(RTSDIR)): Also pass
MULTISUBDIR to sub-make and add quotes around $(THREAD_KIND).
(gnatlib-shared-dual): Also pass PICFLAG_FOR_TARGET to sub-make.
(gnatlib-sjlj): Also pass MULTISUBDIR to sub-make, but do not pass
PICFLAG_FOR_TARGET.
(gnatlib-zcx): Likewise.
From-SVN: r267034
ARM32 EABI unwinder does not define _URC_NORMAL_STOP. Instead,
it has _URC_FAILURE. Use _URC_FAILURE there.
Should fix ARM32 build.
Reviewed-on: https://go-review.googlesource.com/c/153417
From-SVN: r267033
PR c++/87861
* class.c (build_vtbl_initializer): For TARGET_VTABLE_USES_DESCRIPTORS
bump index for each added word.
* constexpr.c (find_array_ctor_elt): Add forward declaration.
(cxx_eval_call_expression): Handle TARGET_VTABLE_USES_DESCRIPTORS
vtable calls.
(cxx_eval_constant_expression) <case OBJ_TYPE_REF>: Divide token
by TARGET_VTABLE_USES_DESCRIPTORS if non-zero.
From-SVN: r267032
* constexpr.c (potential_constant_expression_1): Check want_rval
instead of checking if we have a decl.
* decl2.c (decl_maybe_constant_var_p): Don't consider volatile
constexpr variables as maybe constant.
* g++.dg/cpp0x/constexpr-volatile2.C: New test.
* g++.dg/cpp0x/pr65327.C: Add dg-error.
From-SVN: r267030
/cp
2018-12-11 Paolo Carlini <paolo.carlini@oracle.com>
* decl.c (grokvardecl): Add location_t parameter and use it
in build_lang_decl_loc and build_decl calls.
(grokdeclarator): Move up loc declaration and use it in the
grokvardecl call too.
/testsuite
2018-12-11 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/pr53037-4.C: Test the first two locations too.
From-SVN: r267029
/cp
2018-12-11 Paolo Carlini <paolo.carlini@oracle.com>
* decl.c (grokvardecl): Add location_t parameter and use it
in build_lang_decl_loc and build_decl calls.
(grokdeclarator): Move up loc declaration and use it in the
grokvardecl call too.
/testsuite
2018-12-11 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/pr53037-4.C: Test the first two locations too.
From-SVN: r267028
/cp
2018-12-11 Paolo Carlini <paolo.carlini@oracle.com>
* decl2.c (grokvardecl): Add location_t parameter and use it
in build_lang_decl_loc and build_decl calls.
(grokdeclarator): Move up loc declaration and use it in the
grokvardecl call too.
/testsuite
2018-12-11 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/pr53037-4.C: Test the first two locations too.
From-SVN: r267027
PR tree-optimization/88444
* tree-vrp.c (register_edge_assert_for_2): Only register assertions
for conversions if rhs1 is a SSA_NAME.
* gcc.dg/pr88444.c: New test.
From-SVN: r267026
gcc/
2018-12-11 Dimitar Dimitrov <dimitar@dinux.eu>
* cfgexpand.c (asm_clobber_reg_is_valid): Also produce
error when stack pointer is clobbered.
(expand_asm_stmt): Refactor clobber check in separate function.
gcc/testsuite/
2018-12-11 Dimitar Dimitrov <dimitar@dinux.eu>
* gcc.target/i386/pr52813.c: New test.
From-SVN: r267025
The copysign operations will almost always be performed on values in
floating-point registers. As such, we do not want the compiler to
simplify the operations into code sequences that can only be done
using the general-purpose register set. Unfortunately, this is what
is currently happening.
Fortunately, it seems quite unlikely that copysign() will be
subsequently followed by other logical operations on the values
involved, so I think it is acceptable to use an unspec here. This
allows us to preserve the operation in a form that allows the register
allocator to make the right choice later on, without limitation on the
final form of the operation (well, if we do end up using the gp
register bank, we get a dead constant load that we cannot easily
eliminate at a late stage).
PR target/37369
* config/aarch64/iterators.md (sizem1): Add sizes for SFmode and DFmode.
(Vbtype): Add SFmode mapping.
* config/aarch64/aarch64.md (copysigndf3, copysignsf3): Delete.
(copysign<GPF:mode>3): New expand pattern.
(copysign<GPF:mode>3_insn): New insn pattern.
From-SVN: r267019
Routines in Ada.Real_Time are already annotated with Global => null
contracts to suppress spurious warnings from the flow analysis in
GNATprove. This patch adds such contracts to Ada.Calendar. No change in
runtime behavior expected.
2018-12-11 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* libgnat/a-calend.ads: Add "Global => null" contracts to pure
routines.
From-SVN: r267018
The following patch modifies the checks related to pragma
Thread_Local_Storage to correct a confusion in semantics which led to
spurious errors.
------------
-- Source --
------------
-- pack.ads
package Pack is
type Arr is array (1 .. 5) of Boolean;
type Arr_With_Default is array (1 .. 5) of Boolean
with Default_Component_Value => False;
type Int is new Integer range 1 .. 5;
type Int_With_Default is new Integer range 1 .. 5
with Default_Value => 1;
protected type Prot_Typ is
entry E;
end Prot_Typ;
type Rec_1 is record
Comp : Integer;
end record;
type Rec_2 is record
Comp : Int;
end record;
type Rec_3 is record
Comp : Int_With_Default;
end record;
task type Task_Typ is
entry E;
end Task_Typ;
end Pack;
-- pack.adb
package body Pack is
function F (Val : Int) return Int is
begin
if Val <= 1 then
return 1;
else
return F (Val - 1) * Val;
end if;
end F;
function F (Val : Int_With_Default) return Int_With_Default is
begin
if Val <= 1 then
return 1;
else
return F (Val - 1) * Val;
end if;
end F;
function F (Val : Integer) return Integer is
begin
if Val <= 1 then
return 1;
else
return F (Val - 1) * Val;
end if;
end F;
protected body Prot_Typ is
entry E when True is begin null; end E;
end Prot_Typ;
task body Task_Typ is
begin
accept E;
end Task_Typ;
Obj_1 : Arr; -- OK
pragma Thread_Local_Storage (Obj_1);
Obj_2 : Arr := (others => True); -- OK
pragma Thread_Local_Storage (Obj_2);
Obj_3 : Arr := (others => F (2) = Integer (3)); -- ERROR
pragma Thread_Local_Storage (Obj_3);
Obj_4 : Arr_With_Default; -- ERROR
pragma Thread_Local_Storage (Obj_4);
Obj_5 : Arr_With_Default := (others => True); -- OK
pragma Thread_Local_Storage (Obj_5);
Obj_6 : Arr_With_Default := (others => F (2) = Integer (3)); -- ERROR
pragma Thread_Local_Storage (Obj_6);
Obj_7 : Integer; -- OK
pragma Thread_Local_Storage (Obj_7);
Obj_8 : Integer := 1; -- OK
pragma Thread_Local_Storage (Obj_8);
Obj_9 : Integer := F (2); -- ERROR
pragma Thread_Local_Storage (Obj_9);
Obj_10 : Int; -- OK
pragma Thread_Local_Storage (Obj_10);
Obj_11 : Int := 1; -- OK
pragma Thread_Local_Storage (Obj_11);
Obj_12 : Int := F (2); -- ERROR
pragma Thread_Local_Storage (Obj_12);
Obj_13 : Int_With_Default; -- ERROR
pragma Thread_Local_Storage (Obj_13);
Obj_14 : Int_With_Default := 1; -- OK
pragma Thread_Local_Storage (Obj_14);
Obj_15 : Int_With_Default := F (2); -- ERROR
pragma Thread_Local_Storage (Obj_15);
Obj_16 : Prot_Typ; -- ERROR
pragma Thread_Local_Storage (Obj_16);
Obj_17 : Rec_1; -- OK
pragma Thread_Local_Storage (Obj_17);
Obj_18 : Rec_1 := (others => 1); -- OK
pragma Thread_Local_Storage (Obj_18);
Obj_19 : Rec_1 := (others => F (2)); -- ERROR
pragma Thread_Local_Storage (Obj_19);
Obj_20 : Rec_2; -- OK
pragma Thread_Local_Storage (Obj_20);
Obj_21 : Rec_2 := (others => 1); -- OK
pragma Thread_Local_Storage (Obj_21);
Obj_22 : Rec_2 := (others => F (2)); -- ERROR
pragma Thread_Local_Storage (Obj_22);
Obj_23 : Rec_3; -- ERROR
pragma Thread_Local_Storage (Obj_23);
Obj_24 : Rec_3 := (others => 1); -- OK
pragma Thread_Local_Storage (Obj_24);
Obj_25 : Rec_3 := (others => F (2)); -- ERROR
pragma Thread_Local_Storage (Obj_25);
Obj_26 : Task_Typ; -- ERROR
pragma Thread_Local_Storage (Obj_26);
end Pack;
----------------------------
-- Compilation and output --
----------------------------
$ gcc -c pack.adb
pack.adb:47:04: Thread_Local_Storage variable "Obj_4" is improperly
initialized
pack.adb:47:04: only allowed initialization is explicit "null", static
expression or static aggregate
pack.adb:62:04: Thread_Local_Storage variable "Obj_9" is improperly
initialized
pack.adb:62:04: only allowed initialization is explicit "null", static
expression or static aggregate
pack.adb:71:04: Thread_Local_Storage variable "Obj_12" is improperly
initialized
pack.adb:71:04: only allowed initialization is explicit "null", static
expression or static aggregate
pack.adb:74:04: Thread_Local_Storage variable "Obj_13" is improperly
initialized
pack.adb:74:04: only allowed initialization is explicit "null", static
expression or static aggregate
pack.adb:80:04: Thread_Local_Storage variable "Obj_15" is improperly
initialized
pack.adb:80:04: only allowed initialization is explicit "null", static
expression or static aggregate
pack.adb:83:04: Thread_Local_Storage variable "Obj_16" is improperly
initialized
pack.adb:83:04: only allowed initialization is explicit "null", static
expression or static aggregate
pack.adb:92:04: Thread_Local_Storage variable "Obj_19" is improperly
initialized
pack.adb:92:04: only allowed initialization is explicit "null", static
expression or static aggregate
pack.adb:101:04: Thread_Local_Storage variable "Obj_22" is improperly
initialized
pack.adb:101:04: only allowed initialization is explicit "null", static
expression or static aggregate
pack.adb:104:04: Thread_Local_Storage variable "Obj_23" is improperly
initialized
pack.adb:104:04: only allowed initialization is explicit "null", static
expression or static aggregate
pack.adb:110:04: Thread_Local_Storage variable "Obj_25" is improperly
initialized
pack.adb:110:04: only allowed initialization is explicit "null", static
expression or static aggregate
pack.adb:113:04: Thread_Local_Storage variable "Obj_26" is improperly
initialized
pack.adb:113:04: only allowed initialization is explicit "null", static
expression or static aggregate
2018-12-11 Hristian Kirtchev <kirtchev@adacore.com>
gcc/ada/
* freeze.adb (Check_Pragma_Thread_Local_Storage): Use the
violating set to diagnose detect an illegal initialization,
rather than the complement of the OK set.
(Freeze_Object_Declaration): Factorize code in
Has_Default_Initialization.
(Has_Default_Initialization, Has_Incompatible_Initialization):
New routines.
From-SVN: r267017