aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-10-15Daily bump.GCC Administrator11-1/+567
2020-10-14libgo: print reason code if throwing unwind exception failsNikhil Benesch2-6/+10
Calls to _Unwind_RaiseException and friends *can* return due to bugs in libgo or memory corruption. When this occurs, print a message to stderr with the reason code before aborting to aid debugging. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261257
2020-10-14PR middle-end/97391 - bogus -Warray-bounds accessing a multidimensional ↵Martin Sebor2-5/+120
array parameter gcc/ChangeLog: PR middle-end/97391 * builtins.c (gimple_parm_array_size): Peel off one less layer of array types. gcc/testsuite/ChangeLog: PR middle-end/97391 * gcc.dg/Warray-bounds-68.c: New test.
2020-10-14PR c/97413 - bogus error on function declaration with many VLA argumentsMartin Sebor3-4/+97
gcc/ChangeLog: PR c/97413 * attribs.c (init_attr_rdwr_indices): Unwrap extra list layer. gcc/c-family/ChangeLog: PR c/97413 * c-attribs.c (build_attr_access_from_parms): Wrap chain of VLA bounds in an extra list. gcc/testsuite/ChangeLog: PR c/97413 * gcc.dg/Wvla-parameter-8.c: New test.
2020-10-14[testsuite] Don't overwrite compiler_flags in check_compileTom de Vries1-0/+3
Consider the test-case gcc.c-torture/compile/pr42717.c, which has: ... /* { dg-xfail-if "ptxas crashes" { nvptx-*-* } { "-O0" } { "" } } */ ... When running make check-gcc, I get: ... XPASS: gcc.c-torture/compile/pr42717.c -O0 (test for excess errors) ... but when forcing to run only that test-case using RUNTESTFLAGS=compile.exp=pr42717.c I get instead: ... PASS: gcc.c-torture/compile/pr42717.c -O0 (test for excess errors) ... Using RUNTESTFLAGS="-v -v -v" we can see what happens: ... check_cached_effective_target exceptions_enabled: \ returning 1 for nvptx-none-run Limited to targets: *-*-* Will search for options "-O0" Will exclude for options "" Compiler flags are: exceptions_enabled9848.cc -fdiagnostics-plain-output \ --sysroot=/home/vries/nvptx/trunk/install/nvptx-none -S -isystem \ /home/vries/nvptx/trunk/build-gcc/nvptx-none/./newlib/targ-include \ -isystem /home/vries/nvptx/trunk/source-gcc/newlib/libc/include \ -o exceptions_enabled9848.s Checking "*-*-*" against "nvptx-unknown-none" Looking for -O0 to include in the compiler flags Looking for to exclude in the compiler flags This is not a conditional match PASS: gcc.c-torture/compile/pr42717.c -O0 (test for excess errors) ... The effective target exceptions_enabled is tested from gcc-dg-prune, but the calculation overwrites $compiler_flags, which is subsequently tested for -O0. Fix this by saving and restoring $compiler_flags when calling ${tool}_target_compile in check_compile. Tested on nvptx. gcc/testsuite/ChangeLog: 2020-10-14 Tom de Vries <tdevries@suse.de> * lib/target-supports.exp (check_compile): Save and restore $compiler_flags when calling ${tool}_target_compile.
2020-10-14libgo: export NetBSD-specific types in mksysinfo.shNikhil Benesch7-16/+196
The syscall package depends on many NetBSD-specific types on NetBSD. Teach mksysinfo.sh to export these types. This alone is not sufficient to get the syscall package to compile on NetBSD, but it's a start. Note that the IfMsgHdr type is recapitalized to IfMsghdr, which requires changes in the AIX port. The new capitalization is what's used by upstream in existing NetBSD-specific code and is more consistent with the capitalization of other C structs with the "hdr" suffix. Updates golang/go#38538. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261739
2020-10-14runtime: correct semaphore implementation on netbsdNikhil Benesch7-8/+30
NetBSD's semaphores use the underlying lighweight process mechanism (LWP) on NetBSD, rather than pthreads. This means the m.prodcid needs to be set to the LWP ID rather than the pthread ID in order for unpark notifications to get sent to the right place. Introduce a new getProcID() method that selects the correct ID for the platform. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261742
2020-10-14analyzer: fix ICE on globals with unknown size [PR93388]David Malcolm3-21/+40
This patch fixes an ICE seen when attempting to build various existing tests in our testsuite with -fanalyzer, including gcc.c-torture/compile/980816-1.c. gcc/analyzer/ChangeLog: PR analyzer/93388 * region-model.cc (region_model::get_initial_value_for_global): Fall back to returning an initial_svalue if decl_region::get_svalue_for_initializer fails. * region.cc (decl_region::get_svalue_for_initializer): Don't attempt to create a compound_svalue if the region has an unknown size. gcc/testsuite/ChangeLog: PR analyzer/93388 * gcc.dg/analyzer/data-model-21.c: New test.
2020-10-14analyzer: fix build with ada [PR93723]David Malcolm1-1/+0
gcc/analyzer/ChangeLog: PR analyzer/93723 * store.cc (binding_map::apply_ctor_to_region): Remove redundant assertion.
2020-10-14analyzer: don't use <setjmp.h> in tests [PR97394]David Malcolm4-6/+15
PR analyzer/97394 reports issues with analyzer setjmp results when testing against MUSL. This patch fixes up gcc.dg/analyzer so that it doesn't use <setjmp.h>. gcc/testsuite/ChangeLog: PR analyzer/97394 * gcc.dg/analyzer/setjmp-pr93378.c: Use test-setjmp.h rather than <setjmp.h>. * gcc.dg/analyzer/sigsetjmp-5.c: Likewise. * gcc.dg/analyzer/sigsetjmp-6.c: Likewise. * gcc.dg/analyzer/test-setjmp.h: Don't include <setjmp.h>. Provide decls of jmp_buf, sigjmp_buf, setjmp, sigsetjmp, longjmp, and siglongjmp.
2020-10-14c++: Diagnose bogus variadic lambda. [PR97358]Jason Merrill2-5/+32
If the lambda has a capture pack, it cannot be used unexpanded within the body of the lambda. If you want to expand the pack across multiple lambdas, don't capture the whole pack. gcc/cp/ChangeLog: PR c++/97358 * pt.c (check_for_bare_parameter_packs): Diagnose use of capture pack. gcc/testsuite/ChangeLog: PR c++/97358 * g++.dg/cpp0x/lambda/lambda-variadic11.C: New test.
2020-10-14Rework the condition variables support for VxWorksAlexandre Oliva2-12/+47
This change reworks the condition variables support for VxWorks to address the very legit points raised by Rasmus in https://gcc.gnu.org/pipermail/gcc/2020-May/232524.html While some of the issues were taken care of by the use of semFlush, a few others were indeed calling for adjustments. We first considered resorting to the condvarLib library available in VxWorks7. Unfortunately, it is vx7 only and we wanted something working for at least vx 6.9 as well. It also turned out requiring the use of recursive mutexes for condVarWait, which seemed unnecessarily constraining. Instead, this change corrects the sequencing logic in a few places and leverages the semExchange API to ensure the key atomicity requirement on cond_wait operations. 2020-10-14 Alexandre Oliva <oliva@adacore.com> libgcc/ * config/gthr-vxworks-thread.c: Include stdlib.h. (tls_delete_hook): Prototype it. (__gthread_cond_signal): Return early if no waiters. Consume signal in case the semaphore got full. Use semInfoGet instead of kernel-mode-only semInfo. (__gthread_cond_timedwait): Use semExchange. Always take the mutex again before returning. * config/gthr-vxworks-cond.c (__ghtread_cond_wait): Likewise.
2020-10-14x86: Add missing intrinsics [PR95483]Sunil K Pandey64-57/+1429
Tested on x86-64. gcc/ChangeLog: PR target/95483 * config/i386/avx2intrin.h (_mm_broadcastsi128_si256): New intrinsics. (_mm_broadcastsd_pd): Ditto. * config/i386/avx512bwintrin.h (_mm512_loadu_epi16): New intrinsics. (_mm512_storeu_epi16): Ditto. (_mm512_loadu_epi8): Ditto. (_mm512_storeu_epi8): Ditto. * config/i386/avx512dqintrin.h (_mm_reduce_round_sd): New intrinsics. (_mm_mask_reduce_round_sd): Ditto. (_mm_maskz_reduce_round_sd): Ditto. (_mm_reduce_round_ss): Ditto. (_mm_mask_reduce_round_ss): Ditto. (_mm_maskz_reduce_round_ss): Ditto. (_mm512_reduce_round_pd): Ditto. (_mm512_mask_reduce_round_pd): Ditto. (_mm512_maskz_reduce_round_pd): Ditto. (_mm512_reduce_round_ps): Ditto. (_mm512_mask_reduce_round_ps): Ditto. (_mm512_maskz_reduce_round_ps): Ditto. * config/i386/avx512erintrin.h (_mm_mask_rcp28_round_sd): New intrinsics. (_mm_maskz_rcp28_round_sd): Ditto. (_mm_mask_rcp28_round_ss): Ditto. (_mm_maskz_rcp28_round_ss): Ditto. (_mm_mask_rsqrt28_round_sd): Ditto. (_mm_maskz_rsqrt28_round_sd): Ditto. (_mm_mask_rsqrt28_round_ss): Ditto. (_mm_maskz_rsqrt28_round_ss): Ditto. (_mm_mask_rcp28_sd): Ditto. (_mm_maskz_rcp28_sd): Ditto. (_mm_mask_rcp28_ss): Ditto. (_mm_maskz_rcp28_ss): Ditto. (_mm_mask_rsqrt28_sd): Ditto. (_mm_maskz_rsqrt28_sd): Ditto. (_mm_mask_rsqrt28_ss): Ditto. (_mm_maskz_rsqrt28_ss): Ditto. * config/i386/avx512fintrin.h (_mm_mask_sqrt_sd): New intrinsics. (_mm_maskz_sqrt_sd): Ditto. (_mm_mask_sqrt_ss): Ditto. (_mm_maskz_sqrt_ss): Ditto. (_mm_mask_scalef_sd): Ditto. (_mm_maskz_scalef_sd): Ditto. (_mm_mask_scalef_ss): Ditto. (_mm_maskz_scalef_ss): Ditto. (_mm_mask_cvt_roundsd_ss): Ditto. (_mm_maskz_cvt_roundsd_ss): Ditto. (_mm_mask_cvt_roundss_sd): Ditto. (_mm_maskz_cvt_roundss_sd): Ditto. (_mm_mask_cvtss_sd): Ditto. (_mm_maskz_cvtss_sd): Ditto. (_mm_mask_cvtsd_ss): Ditto. (_mm_maskz_cvtsd_ss): Ditto. (_mm512_cvtsi512_si32): Ditto. (_mm_cvtsd_i32): Ditto. (_mm_cvtss_i32): Ditto. (_mm_cvti32_sd): Ditto. (_mm_cvti32_ss): Ditto. (_mm_cvtsd_i64): Ditto. (_mm_cvtss_i64): Ditto. (_mm_cvti64_sd): Ditto. (_mm_cvti64_ss): Ditto. * config/i386/avx512vlbwintrin.h (_mm256_storeu_epi8): New intrinsics. (_mm_storeu_epi8): Ditto. (_mm256_loadu_epi16): Ditto. (_mm_loadu_epi16): Ditto. (_mm256_loadu_epi8): Ditto. (_mm_loadu_epi8): Ditto. (_mm256_storeu_epi16): Ditto. (_mm_storeu_epi16): Ditto. * config/i386/avx512vlintrin.h (_mm256_load_epi64): New intrinsics. (_mm_load_epi64): Ditto. (_mm256_load_epi32): Ditto. (_mm_load_epi32): Ditto. (_mm256_store_epi32): Ditto. (_mm_store_epi32): Ditto. (_mm256_loadu_epi64): Ditto. (_mm_loadu_epi64): Ditto. (_mm256_loadu_epi32): Ditto. (_mm_loadu_epi32): Ditto. (_mm256_mask_cvt_roundps_ph): Ditto. (_mm256_maskz_cvt_roundps_ph): Ditto. (_mm_mask_cvt_roundps_ph): Ditto. (_mm_maskz_cvt_roundps_ph): Ditto. * config/i386/avxintrin.h (_mm256_cvtsi256_si32): New intrinsics. * config/i386/emmintrin.h (_mm_loadu_si32): New intrinsics. (_mm_loadu_si16): Ditto. (_mm_storeu_si32): Ditto. (_mm_storeu_si16): Ditto. * config/i386/i386-builtin-types.def (V8DF_FTYPE_V8DF_INT_V8DF_UQI_INT): Add new type. (V16SF_FTYPE_V16SF_INT_V16SF_UHI_INT): Ditto. (V4SF_FTYPE_V4SF_V2DF_V4SF_UQI_INT): Ditto. (V2DF_FTYPE_V2DF_V4SF_V2DF_UQI_INT): Ditto. * config/i386/i386-builtin.def (__builtin_ia32_cvtsd2ss_mask_round): New builtin. (__builtin_ia32_cvtss2sd_mask_round): Ditto. (__builtin_ia32_rcp28sd_mask_round): Ditto. (__builtin_ia32_rcp28ss_mask_round): Ditto. (__builtin_ia32_rsqrt28sd_mask_round): Ditto. (__builtin_ia32_rsqrt28ss_mask_round): Ditto. (__builtin_ia32_reducepd512_mask_round): Ditto. (__builtin_ia32_reduceps512_mask_round): Ditto. (__builtin_ia32_reducesd_mask_round): Ditto. (__builtin_ia32_reducess_mask_round): Ditto. * config/i386/i386-expand.c (ix86_expand_round_builtin): Expand round builtin for new type. (V8DF_FTYPE_V8DF_INT_V8DF_UQI_INT) (V16SF_FTYPE_V16SF_INT_V16SF_UHI_INT) (V4SF_FTYPE_V4SF_V2DF_V4SF_UQI_INT) (V2DF_FTYPE_V2DF_V4SF_V2DF_UQI_INT) * config/i386/mmintrin.h () Define datatype __m32 and __m16. Define datatype __m32_u and __m16_u. * config/i386/sse.md: Adjust pattern. (<mask_codefor>reducep<mode><mask_name><round_saeonly_name>): Adjust. (reduces<mode><mask_scalar_name><round_saeonly_scalar_name>): Ditto. (sse2_cvtsd2ss<mask_name><round_name>): Ditto. (sse2_cvtss2sd<mask_name><round_saeonly_name>): Ditto. (avx512er_vmrcp28<mode><mask_name><round_saeonly_name>): Ditto. (avx512er_vmrsqrt28<mode><mask_name><round_saeonly_name>): Ditto. gcc/testsuite/ChangeLog: PR target/95483 * gcc.target/i386/avx-1.c: Add test. * gcc.target/i386/avx2-vbroadcastsi128-1.c: Ditto. * gcc.target/i386/avx2-vbroadcastsi128-2.c: Ditto. * gcc.target/i386/avx512bw-vmovdqu16-1.c: Ditto. * gcc.target/i386/avx512bw-vmovdqu8-1.c: Ditto. * gcc.target/i386/avx512dq-vreducesd-1.c: Ditto. * gcc.target/i386/avx512dq-vreducesd-2.c: Ditto. * gcc.target/i386/avx512dq-vreducess-1.c: Ditto. * gcc.target/i386/avx512dq-vreducess-2.c: Ditto. * gcc.target/i386/avx512er-vrcp28sd-1.c: Ditto. * gcc.target/i386/avx512er-vrcp28sd-2.c: Ditto. * gcc.target/i386/avx512er-vrcp28ss-1.c: Ditto. * gcc.target/i386/avx512er-vrcp28ss-2.c: Ditto. * gcc.target/i386/avx512er-vrsqrt28sd-1.c: Ditto. * gcc.target/i386/avx512er-vrsqrt28sd-2.c: Ditto. * gcc.target/i386/avx512er-vrsqrt28ss-1.c: Ditto. * gcc.target/i386/avx512er-vrsqrt28ss-2.c: Ditto. * gcc.target/i386/avx512f-vcvtsd2si-1.c: Ditto. * gcc.target/i386/avx512f-vcvtsd2si64-1.c: Ditto. * gcc.target/i386/avx512f-vcvtsd2ss-1.c: Ditto. * gcc.target/i386/avx512f-vcvtsi2sd64-1.c: Ditto. * gcc.target/i386/avx512f-vcvtsi2ss-1.c: Ditto. * gcc.target/i386/avx512f-vcvtsi2ss64-1.c: Ditto. * gcc.target/i386/avx512f-vcvtss2sd-1.c: Ditto. * gcc.target/i386/avx512f-vcvtss2si-1.c: Ditto. * gcc.target/i386/avx512f-vcvtss2si64-1.c: Ditto. * gcc.target/i386/avx512f-vscalefsd-1.c: Ditto. * gcc.target/i386/avx512f-vscalefsd-2.c: Ditto. * gcc.target/i386/avx512f-vscalefss-1.c: Ditto. * gcc.target/i386/avx512f-vscalefss-2.c: Ditto. * gcc.target/i386/avx512f-vsqrtsd-1.c: Ditto. * gcc.target/i386/avx512f-vsqrtsd-2.c: Ditto. * gcc.target/i386/avx512f-vsqrtss-1.c: Ditto. * gcc.target/i386/avx512f-vsqrtss-2.c: Ditto. * gcc.target/i386/avx512vl-vmovdqa32-1.c: Ditto. * gcc.target/i386/avx512vl-vmovdqa64-1.c: Ditto. * gcc.target/i386/sse-13.c: Ditto. * gcc.target/i386/sse-23.c: Ditto. * gcc.target/i386/avx512dq-vreducepd-3.c: New test. * gcc.target/i386/avx512dq-vreducepd-4.c: New test. * gcc.target/i386/avx512dq-vreduceps-3.c: New test. * gcc.target/i386/avx512dq-vreduceps-4.c: New test. * gcc.target/i386/avx512f-vcvtsi2sd-1.c: New test. * gcc.target/i386/pr95483-1.c: New test. * gcc.target/i386/pr95483-2.c: New test. * gcc.target/i386/pr95483-3.c: New test. * gcc.target/i386/pr95483-4.c: New test. * gcc.target/i386/pr95483-5.c: New test. * gcc.target/i386/pr95483-6.c: New test. * gcc.target/i386/pr95483-7.c: New test.
2020-10-14Fix the VX_CPU selection for -mcpu=xscale on arm-vxworksOlivier Hainque1-1/+1
This fixlet makes sure -mcpu=xscale selects the correct VX_CPU. 2020-10-14 Olivier Hainque <hainque@adacore.com> gcc/ * config/arm/vxworks.h (TARGET_OS_CPP_BUILTINS): Fix the VX_CPU selection for -mcpu=xscale on arm-vxworks.
2020-10-14libstdc++: Fix unspecified comparison to null pointer [PR 97415]Jonathan Wakely1-4/+5
The standard doesn't guarantee that null pointers compare less than non-null pointers. AddressSanitizer complains about the pptr()> egptr() comparison in basic_stringbuf::str() when egptr() is null. libstdc++-v3/ChangeLog: PR libstdc++/97415 * include/std/sstream (basic_stringbuf::str()): Check for null egptr() before comparing to non-null pptr().
2020-10-14Rework CPP_BUILTINS_SPEC for powerpc-vxworksOlivier Hainque1-7/+50
This change reworks CPP_BUILTINS_SPEC for powerpc-vxworks to prepare for the upcoming addition of 32 and 64 bit ports for VxWorks 7r2. 2020-10-14 Olivier Hainque <hainque@adacore.com> gcc/ * config/rs6000/vxworks.h (TARGET_OS_CPP_BUILTINS): Accommodate expectations from different versions of VxWorks, for 32 or 64bit configurations.
2020-10-14Fallback to default CPP spec for C++ on VxWorksOlivier Hainque1-0/+6
Arrange to inhibit the effects of CPLUSPLUS_CPP_SPEC in gnu-user.h, which #defines _GNU_SOURCE, which is invalid for VxWorks (possibly not providing ::mkstemp, for example). 2020-10-14 Olivier Hainque <hainque@adacore.com> gcc/ * config/vxworks.h: #undef CPLUSPLUS_CPP_SPEC.
2020-10-14Honor $(MULTISUBDIR) in -I directives for libgcc on VxWorksOlivier Hainque2-2/+2
This is useful to handle ports where we might arrange to use different sets of fixed headers for different multilibs, typically for kernel vs rtp modes. 2020-10-14 Olivier Hainque <hainque@adacore.com> libgcc/ * config/t-vxworks (LIBGCC2_INCLUDES): Append $(MULTISUBDIR) to the -I path for fixed headers, as we arrange to have different sets of such headers for different multilibs when they are activated. * config/t-vxworks7: Likewise.
2020-10-14Add include-fixed to include search paths for libgcc on VxWorksOlivier Hainque2-0/+2
The special vxworks rules for the compilation of libgcc had -I.../gcc/include and not .../gcc/include-fixed, causing build failure of our arm-vxworks7r2 port because of indirect dependencies on limits.h. The omission was just an oversight and this change just adds the missing -I. 2020-10-14 Olivier Hainque <hainque@adacore.com> libgcc/ * config/t-vxworks: Add include-fixed to include search paths for libgcc on VxWorks. * config/t-vxworks7: Likewise.
2020-10-14Adjust the VxWorks alternative LIMITS_H guard for glimits.hOlivier Hainque1-1/+1
This is a minor adjustment to the vxworks specific macro name used to guard the header file contents, to make it closer to the original one and easier to search for. 2020-10-14 Olivier Hainque <hainque@adacore.com> gcc/ * config/t-vxworks: Adjust the VxWorks alternative LIMITS_H guard for glimits.h, make it both closer to the previous one and easier to search for.
2020-10-14c++: DECL_FRIEND_P cleanupNathan Sidwell9-177/+99
DECL_FRIEND_P's meaning has changed over time. It now (almost) means the the friend function decl has not been met via an explicit decl. This completes that transition, renaming it to DECL_UNIQUE_FRIEND_P, so one doesn't think it is the sole indicator of friendliness (plenty of friends do not have the flag set). This allows reduction in the complexity of managing the field -- all in duplicate_decls now. gcc/cp/ * cp-tree.h (struct lang_decl_fn): Adjust context comment. (DECL_FRIEND_P): Replace with ... (DECL_UNIQUE_FRIEND_P): ... this. Only for FUNCTION_DECLs. (DECL_FRIEND_CONTEXT): Adjust. * class.c (add_implicitly_declared_members): Detect friendly spaceship from context. * constraint.cc (remove_constraints): Use a checking assert. (maybe_substitute_reqs_for): Use DECL_UNIQUE_FRIEND_P. * decl.c (check_no_redeclaration_friend_default_args): DECL_UNIQUE_FRIEND_P is signficant, not hiddenness. (duplicate_decls): Adjust DECL_UNIQUE_FRIEND_P clearing. (redeclaration_error_message): Use DECL_UNIQUE_FRIEND_P. (start_preparsed_function): Correct in-class friend processing. Refactor some initializers. (grokmethod): Directly check friend decl-spec. * decl2.c (grokfield): Check DECL_UNIQUE_FRIEND_P. * friend.c (do_friend): Set DECL_UNIQUE_FRIEND_P first, remove extraneous conditions. Don't re set it afterwards. * name-lookup.c (lookup_elaborated_type_1): Simplify revealing code. (do_pushtag): Likewise. * pt.c (optimize_specialization_lookup_p): Check DECL_UNIQUE_FRIEND_P. (push_template_decl): Likewise. Drop unneeded friend setting. (type_dependent_expression_p): Check DECL_UNIQUE_FRIEND_P. libcc1/ * libcp1plugin.cc (plugin_add_friend): Set DECL_UNIQUE_FRIEND_P.
2020-10-14i386: Improve chaining of _{addcarry,subborrow}_u{32,64} [PR97387]Jakub Jelinek4-12/+132
These builtins have two known issues and this patch fixes one of them. One issue is that the builtins effectively return two results and they make the destination addressable until expansion, which means a stack slot is allocated for them and e.g. with -fstack-protector* DSE isn't able to optimize that away. I think for that we want to use the technique of returning complex value; the patch doesn't handle that though. See PR93990 for that. The other problem is optimization of successive uses of the builtin e.g. for arbitrary precision arithmetic additions/subtractions. As shown PR93990, combine is able to optimize the case when the first argument to these builtins is 0 (the first instance when several are used together), and also the last one if the last one ignores its result (i.e. the carry/borrow is dead and thrown away in that case). As shown in this PR, combiner refuses to optimize the rest, where it sees: (insn 10 9 11 2 (set (reg:QI 88 [ _31 ]) (ltu:QI (reg:CCC 17 flags) (const_int 0 [0]))) "include/adxintrin.h":69:10 785 {*setcc_qi} (expr_list:REG_DEAD (reg:CCC 17 flags) (nil))) - set pseudo 88 to CF from flags, then some uninteresting insns that don't modify flags, and finally: (insn 17 15 18 2 (parallel [ (set (reg:CCC 17 flags) (compare:CCC (plus:QI (reg:QI 88 [ _31 ]) (const_int -1 [0xffffffffffffffff])) (reg:QI 88 [ _31 ]))) (clobber (scratch:QI)) ]) "include/adxintrin.h":69:10 350 {*addqi3_cconly_overflow_1} (expr_list:REG_DEAD (reg:QI 88 [ _31 ]) (nil))) to set CF in flags back to what we saved earlier. The combiner just punts trying to combine the 10, 17 and following addcarrydi (etc.) instruction, because if (i1 && !can_combine_p (i1, i3, i0, NULL, i2, NULL, &i1dest, &i1src)) { if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "Can't combine i1 into i3\n"); undo_all (); return 0; } fails - the 3 insns aren't all adjacent and || (! all_adjacent && (((!MEM_P (src) || ! find_reg_note (insn, REG_EQUIV, src)) && modified_between_p (src, insn, i3)) src (flags hard register) is modified between the first and third insn - in the second insn. The following patch optimizes this by optimizing just the two insns, 10 and 17 above, i.e. save CF into pseudo, set CF from that pseudo, into a nop. The new define_insn_and_split matches how combine simplifies those two together (except without the ix86_cc_mode change it was choosing CCmode for the destination instead of CCCmode, so had to change that function too, and also adjust costs so that combiner understand it is beneficial). With this, all the testcases are optimized, so that the: setc %dl ... addb $-1, %dl insns in between the ad[dc][lq] or s[ub]b[lq] instructions are all optimized away (sure, if something would clobber flags in between they wouldn't, but there is nothing that can be done about that). 2020-10-14 Jakub Jelinek <jakub@redhat.com> PR target/97387 * config/i386/i386.md (CC_CCC): New mode iterator. (*setcc_qi_addqi3_cconly_overflow_1_<mode>): New define_insn_and_split. * config/i386/i386.c (ix86_cc_mode): Return CCCmode for *setcc_qi_addqi3_cconly_overflow_1_<mode> pattern operands. (ix86_rtx_costs): Return true and *total = 0; for *setcc_qi_addqi3_cconly_overflow_1_<mode> pattern. Use op0 and op1 temporaries to simplify COMPARE checks. * gcc.target/i386/pr97387-1.c: New test. * gcc.target/i386/pr97387-2.c: New test.
2020-10-14libstdc++: Fix tests that fail with old std::string ABIJonathan Wakely2-2/+2
These two tests have started to fail with the old std::string ABI. The scan-assembler-not checks fail because they match debug info, not code. Adding -g0 to the test flags fixes them. libstdc++-v3/ChangeLog: * testsuite/21_strings/basic_string/modifiers/assign/char/move_assign_optim.cc: Do not generate debug info. * testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign_optim.cc: Likewise.
2020-10-14Do not call range_of_ssa_name_with_loop_info with the loop tree root.Aldy Hernandez2-1/+24
gcc/ChangeLog: PR tree-optimization/97396 * gimple-range.cc (gimple_ranger::range_of_phi): Do not call range_of_ssa_name_with_loop_info with the loop tree root. gcc/testsuite/ChangeLog: * gcc.dg/pr97396.c: New test.
2020-10-14More vect_get_and_check_slp_defs refactoringRichard Biener1-1/+8
This is another tiny piece in some bigger refactoring of vect_get_and_check_slp_defs. Split out a test that has nothing to do with def types or commutation. 2020-10-14 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_get_and_check_slp_defs): Split out test for compatible operand types.
2020-10-14Tigthen flag_pic processing in vxworks_override_optionsOlivier Hainque1-2/+4
This fixes spurious complaints about PIC mode not supported from "gcc --help=...", on VxWorks without -mrtp. The spurious message is emitted by vxworks_override_options, called with flag_pic == -1 when we're running for --help. The change simply adjusts the check testing for "we're generating pic code" to "flag_pic > 0" instead of just "flag_pic". We're not generating code at all when reaching here with -1. gcc/ChangeLog: 2020-10-14 Olivier Hainque <hainque@adacore.com> * config/vxworks.c (vxworks_override_options): Guard pic checks with flag_pic > 0 instead of just flag_pic.
2020-10-14Turn offset_map to HOST_WIDE_INTJan Hubicka3-5/+6
gcc/ChangeLog: 2020-10-14 Jan Hubicka <hubicka@ucw.cz> * ipa-fnsummary.c (remap_edge_summaries): Make offset_map HOST_WIDE_INT. (remap_freqcounting_predicate): Likewise. (ipa_merge_fn_summary_after_inlining): Likewise. * ipa-predicate.c (predicate::remap_after_inlining): Likewise * ipa-predicate.h (remap_after_inlining): Update.
2020-10-14Handle POINTER_PLUS_EXPR in jump functions in ipa-modref.Jan Hubicka3-3/+60
gcc/ChangeLog: * ipa-modref.c (compute_parm_map): Handle POINTER_PLUS_EXPR in PASSTHROUGH. gcc/testsuite/ChangeLog: * gcc.dg/ipa/modref-1.c: New test. * gcc.dg/tree-ssa/modref-4.c: New test.
2020-10-14Fortran: Fix line-truncation warning for !$acc and !gcc$Tobias Burnus2-2/+13
gcc/fortran/ChangeLog: PR fortran/97390 * scanner.c (load_line): Fix line-truncation warning for !$acc and !gcc$ in free-form source code. gcc/testsuite/ChangeLog: PR fortran/97390 * gfortran.dg/goacc/warn_truncated.f90: New test.
2020-10-14adjust BB SLP build from scalars heuristicsRichard Biener1-20/+31
We can end up with { _1, 1.0 } * { 3.0, _2 } which isn't really profitable. The following adjusts things so we reject more than one possibly expensive (non-constant and not uniform) vector CTOR and instead build a CTOR for the scalar operation results. This also moves a check in vect_get_and_check_slp_defs to a better place. 2020-10-14 Richard Biener <rguenther@suse.de> * tree-vect-slp.c (vect_get_and_check_slp_defs): Move check for duplicate/interleave of variable size constants to a place done once and early. (vect_build_slp_tree_2): Adjust heuristics when to build a BB SLP node from scalars.
2020-10-14[gimple] Move can_duplicate_bb_p to gimple_can_duplicate_bb_pTom de Vries2-64/+40
The function gimple_can_duplicate_bb_p currently always returns true. The presence of can_duplicate_bb_p in tracer.c however suggests that there are cases when bb's indeed cannot be duplicated. Move the implementation of can_duplicate_bb_p to gimple_can_duplicate_bb_p. Bootstrapped and reg-tested on x86_64-linux. Build x86_64-linux with nvptx accelerator and tested libgomp. No issues found. As corner-case check, bootstrapped and reg-tested a patch that makes gimple_can_duplicate_bb_p always return false, resulting in PR97333 - "[gimple_can_duplicate_bb_p == false, tree-ssa-threadupdate] ICE in duplicate_block, at cfghooks.c:1093". gcc/ChangeLog: 2020-10-09 Tom de Vries <tdevries@suse.de> * tracer.c (cached_can_duplicate_bb_p, analyze_bb): Use can_duplicate_block_p. (can_duplicate_insn_p, can_duplicate_bb_no_insn_iter_p) (can_duplicate_bb_p): Move and merge ... * tree-cfg.c (gimple_can_duplicate_bb_p): ... here.
2020-10-14c++: Instantiation with local extern [PR97395]Nathan Sidwell2-7/+33
It turns out that pushdecl_with_scope has somewhat strange behaviour, which probably made more sense way back. Unfortunately making it somewhat saner turned into a rathole. Instead use a push_nested_namespace around pushing the alias -- this is similar to some of the friend handling we already have. gcc/cp/ * name-lookup.c (push_local_extern_decl_alias): Push into alias's namespace and use pushdecl. (do_pushdecl_with_scope): Clarify behaviour. gcc/testsuite/ * g++.dg/lookup/extern-redecl2.C: New.
2020-10-14libstdc++: Define some std::string constructors inlineJonathan Wakely2-62/+28
There are a lot of very simple constructors for the old string which are not defined inline. I don't see any reason for this and it probably makes them less likely to be optimized away. Move the definitions into the class body. libstdc++-v3/ChangeLog: * include/bits/basic_string.h (basic_string(const Alloc&)) (basic_string(const basic_string&) (basic_string(const CharT*, size_type, const Alloc&)) (basic_string(const CharT*, const Alloc&)) (basic_string(size_type, CharT, const Alloc&)) (basic_string(initializer_list<CharT>, const Alloc&)) (basic_string(InputIterator, InputIterator, const Alloc&)): Define inline in class body. * include/bits/basic_string.tcc (basic_string(const Alloc&)) (basic_string(const basic_string&) (basic_string(const CharT*, size_type, const Alloc&)) (basic_string(const CharT*, const Alloc&)) (basic_string(size_type, CharT, const Alloc&)) (basic_string(initializer_list<CharT>, const Alloc&)) (basic_string(InputIterator, InputIterator, const Alloc&)): Move definitions into class body.
2020-10-14libstdc++: Improve comments for check_effective_target_cxx11-abiJonathan Wakely1-0/+2
libstdc++-v3/ChangeLog: * testsuite/lib/libstdc++.exp (check_effective_target_cxx11-abi): Add comments about which test flags get used by the check.
2020-10-14libstdc++: Improve comments in std::string testsJonathan Wakely14-44/+44
The COW std::string does support some features of C++11 allocators, just not propagation. Change some comments in the tests to be more precise about that. libstdc++-v3/ChangeLog: * testsuite/21_strings/basic_string/allocator/char/copy.cc: Make comment more precise about what isn't supported by COW strings. * testsuite/21_strings/basic_string/allocator/char/copy_assign.cc: Likewise. * testsuite/21_strings/basic_string/allocator/char/move.cc: Likewise. * testsuite/21_strings/basic_string/allocator/char/move_assign.cc: Likewise. * testsuite/21_strings/basic_string/allocator/char/noexcept.cc: Likewise. * testsuite/21_strings/basic_string/allocator/char/operator_plus.cc: Likewise. * testsuite/21_strings/basic_string/allocator/char/swap.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/move.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/operator_plus.cc: Likewise. * testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc: Likewise.
2020-10-14libstdc++: Enable tests that incorrectly require cxx11-abiJonathan Wakely3-11/+6
These tests were not being run when -D_GLIBCXX_USE_CXX11_ABI=0 was added to the test flags, but they actually work OK with the old string. libstdc++-v3/ChangeLog: * testsuite/21_strings/basic_string/allocator/char/minimal.cc: Do not require cxx11-abi effective target. * testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc: Likewise. * testsuite/27_io/basic_fstream/cons/base.cc: Likewise.
2020-10-14libstdc++: Implement LWG 3706 for COW stringsJonathan Wakely3-2/+7
The basic_string deduction guides are defined for the old ABI, but the tests are currently disabled. This is because a single case fails when using the old ABI, which is just because LWG 3706 isn't implemented for the old ABI. That can be done easily, and the tests can be enabled. libstdc++-v3/ChangeLog: * include/bits/basic_string.h [!_GLIBCXX_USE_CXX11_ABI] (basic_string(const _CharT*, const _Alloc&)): Constrain to require an allocator-like type to fix CTAD ambiguity (LWG 3706). * testsuite/21_strings/basic_string/cons/char/deduction.cc: Remove dg-skip-if. * testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc: Likewise.
2020-10-14Fortran : ICE in build_field PR95614Mark Eggleston8-8/+44
Local identifiers can not be the same as a module name. Original patch by Steve Kargl resulted in name clashes between common block names and local identifiers. A local identifier can be the same as a global identier if that identifier is not a module or a program. The original patch was modified to reject global identifiers that represent a module or a program. 2020-10-14 Steven G. Kargl <kargl@gcc.gnu.org> Mark Eggleston <markeggleston@gcc.gnu.org> gcc/fortran/ChangeLog: PR fortran/95614 * decl.c (gfc_get_common): Use gfc_match_common_name instead of match_common_name. * decl.c (gfc_bind_idents): Use gfc_match_common_name instead of match_common_name. * match.c : Rename match_common_name to gfc_match_common_name. * match.c (gfc_match_common): Use gfc_match_common_name instead of match_common_name. * match.h : Rename match_common_name to gfc_match_common_name. * resolve.c (resolve_common_vars): Check each symbol in a common block has a global symbol. If there is a global symbol issue an error if the symbol type is a module or a program. 2020-10-14 Mark Eggleston <markeggleston@gcc.gnu.org> gcc/testsuite/ChangeLog: PR fortran/95614 * gfortran.dg/pr95614_1.f90: New test. * gfortran.dg/pr95614_2.f90: New test. * gfortran.dg/pr95614_3.f90: New test. * gfortran.dg/pr95614_4.f90: New test.
2020-10-14Support ofsetted parameters in local modrefJan Hubicka5-3/+92
2020-10-14 Jan Hubicka <hubicka@ucw.cz> * doc/invoke.texi: (ipa-jump-function-lookups): Document param. * ipa-modref.c (merge_call_side_effects): Use unadjusted_ptr_and_unit_offset. * ipa-prop.c (unadjusted_ptr_and_unit_offset): New function. * ipa-prop.h (unadjusted_ptr_and_unit_offset): Declare. * params.opt: (-param-ipa-jump-function-lookups): New.
2020-10-14Fix SCC discovery in ipa-modrefJan Hubicka1-5/+34
this patch fixes SCC discovery in ipa-modref which is causing misoptimization of gnat bootstrapped with LTO, PGO and -O3. I also improved debug info and spotted wrong parameter to ignore_stores_p (which is probably quite harmless since we only inline matching functions, but it is better to be consistent). PR bootstrap/97350 * ipa-modref.c (ignore_edge): Do not ignore inlined edes. (ipa_merge_modref_summary_after_inlining): Improve debug output and fix parameter of ignore_stores_p.
2020-10-14libgomp: Fix a typo in documentationJakub Jelinek1-1/+1
2020-10-14 Jakub Jelinek <jakub@redhat.com> * libgomp.texi (omp_get_supported_active_levels): Fix a typo.
2020-10-13runtime: populate signal PC on NetBSDNikhil Benesch2-1/+3
The NetBSD libc provides an architecture-independent macro that can extract the PC from a ucontext struct. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261740
2020-10-13syscall: port fix for netbsd unix sockets from upstreamNikhil Benesch2-4/+10
NetBSD does not include the null terminator when in its reported socket length. Port the upstream bugfix for the issue (#6627). This was likely missed during the usual upstream merge because the gc and gccgo socket implementations have diverged quite a bit. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261741
2020-10-14PR target/96759 - Handle global variable assignment from misaligned ↵Kito Cheng3-0/+23
structure/PARALLEL return values. In g:70cdb21e579191fe9f0f1d45e328908e59c0179e, DECL/global variable has handled misaligned stores, but it didn't handle PARALLEL values, and I refer the other part of this function, I found the PARALLEL need handled by emit_group_* functions, so I add a check, and using emit_group_store if storing a PARALLEL value, also checked this change didn't break the testcase(gcc.target/arm/unaligned-argument-3.c) added by the orginal changes. For riscv64 target, struct S {int a; double b;} will pack into a parallel value to return and it has TImode when misaligned access is supported, however TImode required 16-byte align, but it only 8-byte align, so it go to the misaligned stores handling, then it will try to generate move instruction from a PARALLEL value. Tested on following target without introduced new reguression: - riscv32/riscv64 elf - x86_64-linux - arm-eabi v2 changes: - Use maybe_emit_group_store instead of emit_group_store. - Remove push_temp_slots/pop_temp_slots, emit_group_store only require stack temp slot when dst is CONCAT or PARALLEL, however maybe_emit_group_store will always use REG for dst if needed. gcc/ChangeLog: PR target/96759 * expr.c (expand_assignment): Handle misaligned stores with PARALLEL value. gcc/testsuite/ChangeLog: PR target/96759 * g++.target/riscv/pr96759.C: New. * gcc.target/riscv/pr96759.c: New.
2020-10-13reflect: ensure uniqueness of type descriptors on AIX.Clément Chigot10-30/+168
On AIX, duplication of type descriptors can occur if one is declared in the libgo and one in the Go program being compiled. The AIX linker isn't able to merge them together as Linux one does. One solution is to always load libgo first but that needs a huge mechanism in gcc core. Thus, this patch ensures that the duplication isn't visible for the end user. In reflect and internal/reflectlite, the comparison of rtypes is made on their name and not only on their addresses. In reflect, toType() function is using a canonicalization map to force rtypes having the same rtype.String() to return the same Type. This can't be made in internal/reflectlite as it needs sync package. But, for now, it doesn't matter as internal/reflectlite is not widely used. Fixes golang/go#39276 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/260158
2020-10-14Daily bump.GCC Administrator5-1/+224
2020-10-13openmp: Add support for the omp_get_supported_active_levels runtime library ↵Kwok Cheung Yeung11-4/+70
routine This patch implements the omp_get_supported_active_levels runtime routine from the OpenMP 5.0 specification, which returns the maximum number of active nested parallel regions supported by this implementation. The current maximum (set using the omp_set_max_active_levels routine or the OMP_MAX_ACTIVE_LEVELS environment variable) cannot exceed this number. 2020-10-13 Kwok Cheung Yeung <kcy@codesourcery.com> libgomp/ * env.c (gomp_max_active_levels_var): Initialize to gomp_supported_active_levels. (initialize_env): Limit gomp_max_active_levels_var to be at most equal to gomp_supported_active_levels. * fortran.c (omp_get_supported_active_levels): Add ialias_redirect. (omp_get_supported_active_levels_): New. * icv.c (omp_set_max_active_levels): Limit gomp_max_active_levels_var to at most equal to gomp_supported_active_levels. (omp_get_supported_active_levels): New. * libgomp.h (gomp_supported_active_levels): New. * libgomp.map (OMP_5.0.1): Add omp_get_supported_active_levels and omp_get_supported_active_levels_. * libgomp.texi (omp_get_supported_active_levels): New. (omp_set_max_active_levels): Update. Add reference to omp_get_supported_active_levels. * omp.h.in (omp_get_supported_active_levels): New. * omp_lib.f90.in (omp_get_supported_active_levels): New. * omp_lib.h.in (omp_get_supported_active_levels): New. * testsuite/libgomp.c/lib-2.c (main): Check omp_get_max_active_levels against omp_get_supported_active_levels. * testsuite/libgomp.fortran/lib4.f90 (lib4): Likewise.
2020-10-13libstdc++: Fix doxygen comment for std::any_ofNuno Lopes1-1/+1
libstdc++-v3/ChangeLog: * include/bits/stl_algo.h (any_of): Fix incorrect description in comment.
2020-10-13combine: Fix up simplify_shift_const_1 for nested ROTATEs [PR97386]Jakub Jelinek3-2/+41
The following testcases are miscompiled (the first one since my improvements to rotate discovery on GIMPLE, the other one for many years) because combiner optimizes nested ROTATEs with narrowing SUBREG in between (i.e. the outer rotate is performed in shorter precision than the inner one) to just one ROTATE of the rotated constant. While that (under certain conditions) can work for shifts, it can't work for rotates where we can only do that with rotates of the same precision. 2020-10-13 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/97386 * combine.c (simplify_shift_const_1): Don't optimize nested ROTATEs if they have different modes. * gcc.c-torture/execute/pr97386-1.c: New test. * gcc.c-torture/execute/pr97386-2.c: New test.
2020-10-13libstdc++: Update C++20 status documentationJonathan Wakely10-10/+81
libstdc++-v3/ChangeLog: * doc/xml/manual/evolution.xml: Document some API changes and deprecations. * doc/xml/manual/intro.xml: Document LWG 2499. * doc/xml/manual/status_cxx2020.xml: Update status. * doc/html/*: Regenerate.