aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2023-02-23Daily bump.GCC Administrator9-1/+767
2023-02-22c-family: avoid compile-time-hog in c_genericize [PR108880]Marek Polacek2-3/+20
This fixes a compile-time hog with UBSan. This only happened in cc1 but not cc1plus. The problem is ultimately that c_genericize_control_stmt/ STATEMENT_LIST -> walk_tree_1 doesn't use a hash_set to remember visited nodes, so it kept on recursing for a long time. We should be able to use the pset that c_genericize created. We just need to use walk_tree instead of walk_tree_w_d so that the pset is explicit. PR c/108880 gcc/c-family/ChangeLog: * c-gimplify.cc (c_genericize_control_stmt) <case STATEMENT_LIST>: Pass pset to walk_tree_1. (c_genericize): Call walk_tree with an explicit pset. gcc/testsuite/ChangeLog: * c-c++-common/ubsan/pr108880.c: New test.
2023-02-22Fortran: reject invalid CHARACTER length of derived type components [PR96024]Harald Anlauf2-0/+24
gcc/fortran/ChangeLog: PR fortran/96024 * resolve.cc (resolve_component): The type of a CHARACTER length expression must be INTEGER. gcc/testsuite/ChangeLog: PR fortran/96024 * gfortran.dg/pr96024.f90: New test.
2023-02-22testsuite: Skip module_cmi_p and related unsupported module testAlexandre Oliva1-0/+17
When a multi-source module is found to be unsupported, we fail module_cmi_p and subsequent sources. Override proc unsupported to mark the result in module_do, and test it to skip module_cmp_p and subsequent related tests. for gcc/testsuite/ChangeLog * g++.dg/modules/modules.exp: Override unsupported to update module_do, and test it after dg-test.
2023-02-22[arm] avoid aes-1742098 mitigation in combine testsAlexandre Oliva2-2/+2
The expected asm output for aes-fuse-[12].c does not correspond to that which is generated when -mfix-cortex-a57-aes-1742098 is enabled. The mitigation was introduced after the test, and enabled by default for the selected processor, a72. Select a53 instead, where the migitation is not enabled by default, and all the expected fusions can take place. for gcc/testsuite/ChangeLog * gcc.target/arm/aes-fuse-1.c: Switch to -mcpu=cortex-a53. * gcc.target/arm/aes-fuse-2.c: Likewise.
2023-02-22Drop need for constant I in ctf testAlexandre Oliva1-3/+3
Though I is supposed to be a constant expression, this is not the case on vxworks, but this is not what this debug information format test is testing for, so use real constants to initialize complex variables. for gcc/testsuite/ChangeLog * gcc.dg/debug/ctf/ctf-complex-1.c: Do not test whether I is usable in initializers.
2023-02-22xfail fp-uint64-convert-double-* on all arm targetsAlexandre Oliva2-2/+2
It wasn't long ago that I xfailed these tests on arm-*-eabi, but the fail is expected on all other arm targets: even when hard float is available, conversions between 64-bit integers and double are always emulated on ARM, and the emulation disregards rounding modes. So, bump the xfail to all of arm-*-*. for gcc/testsuite/ChangeLog * gcc.dg/torture/fp-uint64-convert-double-1.c: XFAIL on all of arm-*-*. * gcc.dg/torture/fp-uint64-convert-double-2.c: Likewise.
2023-02-22[arm] [testsuite] asm-flag-4.c: match quotes in expected messageAlexandre Oliva1-1/+1
Quotes were added around the "asm" keyword in the message expected by the test, so the test needs adjusting. for gcc/testsuite/ChangeLog * gcc.target/arm/asm-flag-4.c: Match quotes around "asm" in message.
2023-02-22testsuite: Accept pmf-vbit-in-delta extra warningAlexandre Oliva1-1/+5
cp_build_binary_op, that issues -Waddress warnings, issues an extra warning on arm targets, that g++.dg/warn/Waddress-5.C does not expect when comparing a pointer-to-member-function literal with null. The reason for the extra warning is that, on arm targets, TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_delta, which causes a different path to be taken, that extracts the pointer-to-function and the delta fields (minus the vbit) and compares each one with zero. It's when comparing this pointer-to-function with zero, in a recursive cp_build_binary_op, that another warning is issued. I suppose there should be a way to skip the warning in this recursive call, without disabling other warnings that might be issued there, but this patch only arranges for the test to tolerate the extra warning. for gcc/testsuite/ChangeLog * g++.dg/warn/Waddress-5.C: Tolerate extra -Waddress warning.
2023-02-22[libstdc++] do not destruct mutex_pool mutexesAlexandre Oliva1-1/+5
On vxworks, after destroying the semaphore used to implement a mutex, __gthread_mutex_lock fails and __gnu_cxx::__mutex::lock calls __throw_concurrence_lock_error. Nothing ensures the mutex_pool mutexes survive init-once objects containing _Safe_sequence_base. If such an object completes construction before mutex_pool initialization, it will be registered for atexit destruction after the mutex_pool mutexes, so the _M_detach_all() call in the _Safe_sequence_base dtor will use already-destructed mutexes, and basic_string/requirements/citerators_cc fails calling terminate. This patch fixes this problem by ensuring the mutex pool mutexes are constructed on demand, on a statically-allocated buffer, but never destructed. for libstdc++-v3/ChangeLog * src/c++11/shared_ptr.cc (__gnu_internal::get_mutex): Avoid destruction of the mutex pool.
2023-02-22[libstdc++] xfail noreplace tests on vxworksAlexandre Oliva2-2/+2
vxworks ignores O_EXCL in open, so noreplace open succeeds when it is expected to fail. xfail the tests. for libstdc++-v3/ChangeLog * testsuite/27_io/basic_ofstream/open/char/noreplace.cc: xfail on vxworks. * testsuite/27_io/basic_ofstream/open/wchar_t/noreplace.cc: Likewise.
2023-02-22[libstdc++] [testsuite] intro/names.cc: undef func on vxw7krnAlexandre Oliva1-0/+2
The '#define func' added in 2021, to test that system headers don't violate the user namespace, exposes such a bug in the vxworks sysLib.h header, so add yet another such annotated workaround. for libstdc++-v3/ChangeLog * testsuite/17_intro/names.cc: Undef func on vxworks >= 7 in kernel mode.
2023-02-22Rust: In 'type_for_mode' langhook also consider all 'int_n' modes/typesThomas Schwinge1-0/+15
As reported in "Rust related issues" at the end of <https://inbox.sourceware.org/gcc-patches/20221219212344.ewtuzd2jtztm77x2@lug-owl.de> "Modula-2 / Rust: Many targets failing", <https://github.com/Rust-GCC/gccrs/issues/1713> "Test failure on msp430-elfbare target", for '--target=msp430-elfbar' we ICE: <built-in>: internal compiler error: Segmentation fault 0xf2efbf crash_signal ../../gcc/gcc/toplev.cc:314 0x120c8c7 build_function_type(tree_node*, tree_node*, bool) ../../gcc/gcc/tree.cc:7360 0x120cc20 build_function_type_list(tree_node*, ...) ../../gcc/gcc/tree.cc:7442 0x120d16b build_common_builtin_nodes() ../../gcc/gcc/tree.cc:9883 0x8449b4 grs_langhook_init ../../gcc/gcc/rust/rust-lang.cc:132 [...] This is due to 'tmp == NULL' for 'gcc/tree.cc:build_common_builtin_nodes': tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0); ..., were 'targetm.eh_return_filter_mode' (that is, 'gcc/targhooks.cc:default_eh_return_filter_mode', via calling 'targetm.unwind_word_mode': 'gcc/config/msp430/msp430.cc:msp430_unwind_word_mode') returns 'PSImode', and 'lang_hooks.types.type_for_mode' (that is, 'gcc/rust/rust-lang.cc:grs_langhook_type_for_mode') returns 'NULL' for 'PSImode'. As, for example, discussed in <https://gcc.gnu.org/PR46805> "ICE: SIGSEGV in optab_for_tree_code (optabs.c:407) with -O -fno-tree-scev-cprop -ftree-vectorize", we have to support "random" modes/types in the 'type_for_mode' langhook. gcc/rust/ * rust-lang.cc (grs_langhook_type_for_mode): Also consider all 'int_n' modes/types.
2023-02-22vect: inbranch SIMD clonesAndrew Stubbs25-32/+682
There has been support for generating "inbranch" SIMD clones for a long time, but nothing actually uses them (as far as I can see). This patch add supports for a sub-set of possible cases (those using mask_mode == VOIDmode). The other cases fail to vectorize, just as before, so there should be no regressions. The sub-set of support should cover all cases needed by amdgcn, at present. gcc/ChangeLog: * internal-fn.cc (expand_MASK_CALL): New. * internal-fn.def (MASK_CALL): New. * internal-fn.h (expand_MASK_CALL): New prototype. * omp-simd-clone.cc (simd_clone_adjust_argument_types): Set vector_type for mask arguments also. * tree-if-conv.cc: Include cgraph.h. (if_convertible_stmt_p): Do if conversions for calls to SIMD calls. (predicate_statements): Convert functions to IFN_MASK_CALL. * tree-vect-loop.cc (vect_get_datarefs_in_loop): Recognise IFN_MASK_CALL as a SIMD function call. * tree-vect-stmts.cc (vectorizable_simd_clone_call): Handle IFN_MASK_CALL as an inbranch SIMD function call. Generate the mask vector arguments. gcc/testsuite/ChangeLog: * gcc.dg/vect/vect-simd-clone-16.c: New test. * gcc.dg/vect/vect-simd-clone-16b.c: New test. * gcc.dg/vect/vect-simd-clone-16c.c: New test. * gcc.dg/vect/vect-simd-clone-16d.c: New test. * gcc.dg/vect/vect-simd-clone-16e.c: New test. * gcc.dg/vect/vect-simd-clone-16f.c: New test. * gcc.dg/vect/vect-simd-clone-17.c: New test. * gcc.dg/vect/vect-simd-clone-17b.c: New test. * gcc.dg/vect/vect-simd-clone-17c.c: New test. * gcc.dg/vect/vect-simd-clone-17d.c: New test. * gcc.dg/vect/vect-simd-clone-17e.c: New test. * gcc.dg/vect/vect-simd-clone-17f.c: New test. * gcc.dg/vect/vect-simd-clone-18.c: New test. * gcc.dg/vect/vect-simd-clone-18b.c: New test. * gcc.dg/vect/vect-simd-clone-18c.c: New test. * gcc.dg/vect/vect-simd-clone-18d.c: New test. * gcc.dg/vect/vect-simd-clone-18e.c: New test. * gcc.dg/vect/vect-simd-clone-18f.c: New test.
2023-02-22RISC-V: Add RVV reduction C/C++ intrinsics supportJu-Zhe Zhong11-14/+668
gcc/ChangeLog: * config/riscv/riscv-vector-builtins-bases.cc (class reducop): New class. (class widen_reducop): Ditto. (class freducop): Ditto. (class widen_freducop): Ditto. (BASE): Ditto. * config/riscv/riscv-vector-builtins-bases.h: Ditto. * config/riscv/riscv-vector-builtins-functions.def (vredsum): Add reduction support. (vredmaxu): Ditto. (vredmax): Ditto. (vredminu): Ditto. (vredmin): Ditto. (vredand): Ditto. (vredor): Ditto. (vredxor): Ditto. (vwredsum): Ditto. (vwredsumu): Ditto. (vfredusum): Ditto. (vfredosum): Ditto. (vfredmax): Ditto. (vfredmin): Ditto. (vfwredosum): Ditto. (vfwredusum): Ditto. * config/riscv/riscv-vector-builtins-shapes.cc (struct reduc_alu_def): Ditto. (SHAPE): Ditto. * config/riscv/riscv-vector-builtins-shapes.h: Ditto. * config/riscv/riscv-vector-builtins-types.def (DEF_RVV_WI_OPS): New macro. (DEF_RVV_WU_OPS): Ditto. (DEF_RVV_WF_OPS): Ditto. (vint8mf8_t): Ditto. (vint8mf4_t): Ditto. (vint8mf2_t): Ditto. (vint8m1_t): Ditto. (vint8m2_t): Ditto. (vint8m4_t): Ditto. (vint8m8_t): Ditto. (vint16mf4_t): Ditto. (vint16mf2_t): Ditto. (vint16m1_t): Ditto. (vint16m2_t): Ditto. (vint16m4_t): Ditto. (vint16m8_t): Ditto. (vint32mf2_t): Ditto. (vint32m1_t): Ditto. (vint32m2_t): Ditto. (vint32m4_t): Ditto. (vint32m8_t): Ditto. (vuint8mf8_t): Ditto. (vuint8mf4_t): Ditto. (vuint8mf2_t): Ditto. (vuint8m1_t): Ditto. (vuint8m2_t): Ditto. (vuint8m4_t): Ditto. (vuint8m8_t): Ditto. (vuint16mf4_t): Ditto. (vuint16mf2_t): Ditto. (vuint16m1_t): Ditto. (vuint16m2_t): Ditto. (vuint16m4_t): Ditto. (vuint16m8_t): Ditto. (vuint32mf2_t): Ditto. (vuint32m1_t): Ditto. (vuint32m2_t): Ditto. (vuint32m4_t): Ditto. (vuint32m8_t): Ditto. (vfloat32mf2_t): Ditto. (vfloat32m1_t): Ditto. (vfloat32m2_t): Ditto. (vfloat32m4_t): Ditto. (vfloat32m8_t): Ditto. * config/riscv/riscv-vector-builtins.cc (DEF_RVV_WI_OPS): Ditto. (DEF_RVV_WU_OPS): Ditto. (DEF_RVV_WF_OPS): Ditto. (required_extensions_p): Add reduction support. (rvv_arg_type_info::get_base_vector_type): Ditto. (rvv_arg_type_info::get_tree_type): Ditto. * config/riscv/riscv-vector-builtins.h (enum rvv_base_type): Ditto. * config/riscv/riscv.md: Ditto. * config/riscv/vector-iterators.md (minu): Ditto. * config/riscv/vector.md (@pred_reduc_<reduc><mode><vlmul1>): New patern. (@pred_reduc_<reduc><mode><vlmul1_zve32>): Ditto. (@pred_widen_reduc_plus<v_su><mode><vwlmul1>): Ditto. (@pred_widen_reduc_plus<v_su><mode><vwlmul1_zve32>):Ditto. (@pred_reduc_plus<order><mode><vlmul1>): Ditto. (@pred_reduc_plus<order><mode><vlmul1_zve32>): Ditto. (@pred_widen_reduc_plus<order><mode><vwlmul1>): Ditto.
2023-02-22RISC-V: Add floating-point RVV C/C++ apiJu-Zhe Zhong17-211/+3472
Add RVV floating-point C/C++ api tests. The api unit-tests are all passed but not commit. They are located at RISC-V foundation repo: https://github.com/riscv-collab/riscv-gcc/tree/rvv-submission-v1 gcc/ChangeLog: * config/riscv/iterators.md: New iterator. * config/riscv/riscv-vector-builtins-bases.cc (class widen_binop): New class. (enum ternop_type): New enum. (class vmacc): New class. (class imac): Ditto. (class vnmsac): Ditto. (enum widen_ternop_type): New enum. (class vmadd): Ditto. (class vnmsub): Ditto. (class iwmac): Ditto. (class vwmacc): Ditto. (class vwmaccu): Ditto. (class vwmaccsu): Ditto. (class vwmaccus): Ditto. (class reverse_binop): Ditto. (class vfmacc): Ditto. (class vfnmsac): Ditto. (class vfmadd): Ditto. (class vfnmsub): Ditto. (class vfnmacc): Ditto. (class vfmsac): Ditto. (class vfnmadd): Ditto. (class vfmsub): Ditto. (class vfwmacc): Ditto. (class vfwnmacc): Ditto. (class vfwmsac): Ditto. (class vfwnmsac): Ditto. (class float_misc): Ditto. (class fcmp): Ditto. (class vfclass): Ditto. (class vfcvt_x): Ditto. (class vfcvt_rtz_x): Ditto. (class vfcvt_f): Ditto. (class vfwcvt_x): Ditto. (class vfwcvt_rtz_x): Ditto. (class vfwcvt_f): Ditto. (class vfncvt_x): Ditto. (class vfncvt_rtz_x): Ditto. (class vfncvt_f): Ditto. (class vfncvt_rod_f): Ditto. (BASE): Ditto. * config/riscv/riscv-vector-builtins-bases.h: * config/riscv/riscv-vector-builtins-functions.def (vzext): Ditto. (vsext): Ditto. (vfadd): Ditto. (vfsub): Ditto. (vfrsub): Ditto. (vfwadd): Ditto. (vfwsub): Ditto. (vfmul): Ditto. (vfdiv): Ditto. (vfrdiv): Ditto. (vfwmul): Ditto. (vfmacc): Ditto. (vfnmsac): Ditto. (vfmadd): Ditto. (vfnmsub): Ditto. (vfnmacc): Ditto. (vfmsac): Ditto. (vfnmadd): Ditto. (vfmsub): Ditto. (vfwmacc): Ditto. (vfwnmacc): Ditto. (vfwmsac): Ditto. (vfwnmsac): Ditto. (vfsqrt): Ditto. (vfrsqrt7): Ditto. (vfrec7): Ditto. (vfmin): Ditto. (vfmax): Ditto. (vfsgnj): Ditto. (vfsgnjn): Ditto. (vfsgnjx): Ditto. (vfneg): Ditto. (vfabs): Ditto. (vmfeq): Ditto. (vmfne): Ditto. (vmflt): Ditto. (vmfle): Ditto. (vmfgt): Ditto. (vmfge): Ditto. (vfclass): Ditto. (vfmerge): Ditto. (vfmv_v): Ditto. (vfcvt_x): Ditto. (vfcvt_xu): Ditto. (vfcvt_rtz_x): Ditto. (vfcvt_rtz_xu): Ditto. (vfcvt_f): Ditto. (vfwcvt_x): Ditto. (vfwcvt_xu): Ditto. (vfwcvt_rtz_x): Ditto. (vfwcvt_rtz_xu): Ditto. (vfwcvt_f): Ditto. (vfncvt_x): Ditto. (vfncvt_xu): Ditto. (vfncvt_rtz_x): Ditto. (vfncvt_rtz_xu): Ditto. (vfncvt_f): Ditto. (vfncvt_rod_f): Ditto. * config/riscv/riscv-vector-builtins-shapes.cc (struct alu_def): Ditto. (struct move_def): Ditto. * config/riscv/riscv-vector-builtins-types.def (DEF_RVV_WEXTF_OPS): New macro. (DEF_RVV_CONVERT_I_OPS): Ditto. (DEF_RVV_CONVERT_U_OPS): Ditto. (DEF_RVV_WCONVERT_I_OPS): Ditto. (DEF_RVV_WCONVERT_U_OPS): Ditto. (DEF_RVV_WCONVERT_F_OPS): Ditto. (vfloat64m1_t): Ditto. (vfloat64m2_t): Ditto. (vfloat64m4_t): Ditto. (vfloat64m8_t): Ditto. (vint32mf2_t): Ditto. (vint32m1_t): Ditto. (vint32m2_t): Ditto. (vint32m4_t): Ditto. (vint32m8_t): Ditto. (vint64m1_t): Ditto. (vint64m2_t): Ditto. (vint64m4_t): Ditto. (vint64m8_t): Ditto. (vuint32mf2_t): Ditto. (vuint32m1_t): Ditto. (vuint32m2_t): Ditto. (vuint32m4_t): Ditto. (vuint32m8_t): Ditto. (vuint64m1_t): Ditto. (vuint64m2_t): Ditto. (vuint64m4_t): Ditto. (vuint64m8_t): Ditto. * config/riscv/riscv-vector-builtins.cc (DEF_RVV_CONVERT_I_OPS): Ditto. (DEF_RVV_CONVERT_U_OPS): Ditto. (DEF_RVV_WCONVERT_I_OPS): Ditto. (DEF_RVV_WCONVERT_U_OPS): Ditto. (DEF_RVV_WCONVERT_F_OPS): Ditto. (DEF_RVV_F_OPS): Ditto. (DEF_RVV_WEXTF_OPS): Ditto. (required_extensions_p): Adjust for floating-point support. (check_required_extensions): Ditto. (unsigned_base_type_p): Ditto. (get_mode_for_bitsize): Ditto. (rvv_arg_type_info::get_base_vector_type): Ditto. (rvv_arg_type_info::get_tree_type): Ditto. * config/riscv/riscv-vector-builtins.def (v_f): New define. (f): New define. (f_v): New define. (xu_v): New define. (f_w): New define. (xu_w): New define. * config/riscv/riscv-vector-builtins.h (enum rvv_base_type): New enum. (function_expander::arg_mode): New function. * config/riscv/vector-iterators.md (sof): New iterator. (vfrecp): Ditto. (copysign): Ditto. (n): Ditto. (msac): Ditto. (msub): Ditto. (fixuns_trunc): Ditto. (floatuns): Ditto. * config/riscv/vector.md (@pred_broadcast<mode>): New pattern. (@pred_<optab><mode>): Ditto. (@pred_<optab><mode>_scalar): Ditto. (@pred_<optab><mode>_reverse_scalar): Ditto. (@pred_<copysign><mode>): Ditto. (@pred_<copysign><mode>_scalar): Ditto. (@pred_mul_<optab><mode>): Ditto. (pred_mul_<optab><mode>_undef_merge): Ditto. (*pred_<madd_nmsub><mode>): Ditto. (*pred_<macc_nmsac><mode>): Ditto. (*pred_mul_<optab><mode>): Ditto. (@pred_mul_<optab><mode>_scalar): Ditto. (*pred_mul_<optab><mode>_undef_merge_scalar): Ditto. (*pred_<madd_nmsub><mode>_scalar): Ditto. (*pred_<macc_nmsac><mode>_scalar): Ditto. (*pred_mul_<optab><mode>_scalar): Ditto. (@pred_neg_mul_<optab><mode>): Ditto. (pred_neg_mul_<optab><mode>_undef_merge): Ditto. (*pred_<nmadd_msub><mode>): Ditto. (*pred_<nmacc_msac><mode>): Ditto. (*pred_neg_mul_<optab><mode>): Ditto. (@pred_neg_mul_<optab><mode>_scalar): Ditto. (*pred_neg_mul_<optab><mode>_undef_merge_scalar): Ditto. (*pred_<nmadd_msub><mode>_scalar): Ditto. (*pred_<nmacc_msac><mode>_scalar): Ditto. (*pred_neg_mul_<optab><mode>_scalar): Ditto. (@pred_<misc_op><mode>): Ditto. (@pred_class<mode>): Ditto. (@pred_dual_widen_<optab><mode>): Ditto. (@pred_dual_widen_<optab><mode>_scalar): Ditto. (@pred_single_widen_<plus_minus:optab><mode>): Ditto. (@pred_single_widen_<plus_minus:optab><mode>_scalar): Ditto. (@pred_widen_mul_<optab><mode>): Ditto. (@pred_widen_mul_<optab><mode>_scalar): Ditto. (@pred_widen_neg_mul_<optab><mode>): Ditto. (@pred_widen_neg_mul_<optab><mode>_scalar): Ditto. (@pred_cmp<mode>): Ditto. (*pred_cmp<mode>): Ditto. (*pred_cmp<mode>_narrow): Ditto. (@pred_cmp<mode>_scalar): Ditto. (*pred_cmp<mode>_scalar): Ditto. (*pred_cmp<mode>_scalar_narrow): Ditto. (@pred_eqne<mode>_scalar): Ditto. (*pred_eqne<mode>_scalar): Ditto. (*pred_eqne<mode>_scalar_narrow): Ditto. (@pred_merge<mode>_scalar): Ditto. (@pred_fcvt_x<v_su>_f<mode>): Ditto. (@pred_<fix_cvt><mode>): Ditto. (@pred_<float_cvt><mode>): Ditto. (@pred_widen_fcvt_x<v_su>_f<mode>): Ditto. (@pred_widen_<fix_cvt><mode>): Ditto. (@pred_widen_<float_cvt><mode>): Ditto. (@pred_extend<mode>): Ditto. (@pred_narrow_fcvt_x<v_su>_f<mode>): Ditto. (@pred_narrow_<fix_cvt><mode>): Ditto. (@pred_narrow_<float_cvt><mode>): Ditto. (@pred_trunc<mode>): Ditto. (@pred_rod_trunc<mode>): Ditto. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/ternop_vv_constraint-3.c: New test. * gcc.target/riscv/rvv/base/ternop_vv_constraint-4.c: New test. * gcc.target/riscv/rvv/base/ternop_vv_constraint-5.c: New test. * gcc.target/riscv/rvv/base/ternop_vv_constraint-6.c: New test. * gcc.target/riscv/rvv/base/ternop_vx_constraint-8.c: New test. * gcc.target/riscv/rvv/base/ternop_vx_constraint-9.c: New test.
2023-02-22RISC-V: Make the test condition more strict for ↵Kito Cheng1-1/+1
gcc.target/riscv/_Float16-zhinxmin-1.c LTO might generate random string for the section name, which might contain `mv`, then might cause random false alarm. gcc/testsuite/ChangeLog: * gcc.target/riscv/_Float16-zhinxmin-1.c: Tweak test condition.
2023-02-22RISC-V: Adjust vsetvl testcase.Kito Cheng248-833/+833
- Fitler out 'Oz' for vsetvl testcases. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/vsetvl/avl_multiple-1.c: Filter out '-Oz'. * gcc.target/riscv/rvv/vsetvl/avl_multiple-10.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-11.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-12.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-13.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-14.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-15.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-16.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-7.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-8.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_multiple-9.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-10.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-11.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-13.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-14.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-16.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-23.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-27.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-30.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-38.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-41.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-42.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-43.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-44.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-45.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-48.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-5.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-50.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-51.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-6.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-65.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-66.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-67.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-68.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-69.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-70.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-71.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-73.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-74.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-75.c: Ditto. * gcc.target/riscv/rvv/vsetvl/avl_single-8.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_bb_prop-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_bb_prop-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_bb_prop-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_conflict-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_conflict-5.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-12.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-13.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-14.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-15.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_loop_invariant-16.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_switch-5.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_switch-6.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_switch-7.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_switch-8.c: Ditto. * gcc.target/riscv/rvv/vsetvl/imm_switch-9.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-10.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-11.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-12.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-13.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-14.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-15.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-16.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-17.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-18.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-19.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-20.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-21.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-22.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-23.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-24.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-25.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-26.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-27.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-28.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-29.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-30.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-31.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-32.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-33.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-34.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-35.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-36.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-37.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-38.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-39.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-40.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-41.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-42.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-43.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-44.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-45.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-46.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-6.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-7.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-8.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_back_prop-9.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-10.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-11.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-12.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-13.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-14.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-15.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-16.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-17.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-18.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-19.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-20.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-21.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-22.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-23.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-24.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-25.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-26.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-27.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-28.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-5.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-6.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-7.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-8.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_bb_prop-9.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_call-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_call-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_call-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_call-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_complex_loop-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_complex_loop-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-10.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-5.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-6.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-7.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-8.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_conflict-9.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-10.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-11.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-12.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-13.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-14.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-15.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-16.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-17.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-18.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-19.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-20.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-21.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-22.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-23.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-24.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-25.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-26.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-27.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-28.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-5.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-6.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-7.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-8.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_miss_default-9.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-10.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-11.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-12.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-13.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-14.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-15.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-16.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-17.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-18.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-19.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-20.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-21.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-22.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-23.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-24.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-25.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-26.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-27.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-28.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-5.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-6.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-7.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-8.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_phi-9.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_single_block-19.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-5.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-6.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-7.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-8.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-13.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-14.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-15.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-16.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-5.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-6.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-7.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-8.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-9.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvl-16.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvl-2.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvl-3.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvl-4.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvl-5.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvl-6.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvl-7.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvl-8.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvlmax-1.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvlmax-14.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vsetvlmax-18.c: Ditto. * gcc.target/riscv/rvv/vsetvl/vlmax_single_block-17.c: Filter out -Oz and -Og -g. * gcc.target/riscv/rvv/vsetvl/vlmax_single_block-18.c: Ditto.
2023-02-22cgraph: Handle BUILT_IN_UNREACHABLE_TRAP like BUILT_IN_UNREACHABLE in more ↵Jakub Jelinek3-4/+16
spots [PR106258] The following testcase ICEs because we still have some spots that treat BUILT_IN_UNREACHABLE specially but not BUILT_IN_UNREACHABLE_TRAP the same. 2023-02-22 Jakub Jelinek <jakub@redhat.com> PR middle-end/106258 * cgraph.cc (cgraph_edge::redirect_call_stmt_to_callee, cgraph_update_edges_for_call_stmt_node, cgraph_node::verify_node): Handle BUILT_IN_UNREACHABLE_TRAP like BUILT_IN_UNREACHABLE. * cgraphclones.cc (cgraph_node::create_clone): Likewise. * g++.dg/ipa/pr106258.C: New test.
2023-02-22Rust: Move void_list_node init to common codeThomas Schwinge1-4/+0
Apply commit r13-2682-g8ff2a92a0450243e52d3299a13b30f208bafa7e0 "Move void_list_node init to common code" to the Rust front end, too. gcc/rust/ * rust-lang.cc (grs_langhook_init): Do not initialize void_list_node.
2023-02-22Add '-Wno-complain-wrong-lang', and use it in ↵Thomas Schwinge40-41/+112
'gcc/testsuite/lib/target-supports.exp:check_compile' and elsewhere I noticed that GCC/Rust recently lost all LTO variants in torture testing: PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O0 (test for excess errors) PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O1 (test for excess errors) PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O2 (test for excess errors) -PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) -PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O3 -g (test for excess errors) PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -Os (test for excess errors) Etc. The reason is that when probing for availability of LTO, we run into: spawn [...]/build-gcc/gcc/testsuite/rust/../../gccrs -B[...]/build-gcc/gcc/testsuite/rust/../../ -fdiagnostics-plain-output -frust-incomplete-and-experimental-compiler-do-not-use -flto -c -o lto8274.o lto8274.c cc1: warning: command-line option '-frust-incomplete-and-experimental-compiler-do-not-use' is valid for Rust but not for C For GCC/Rust testing, this flag is (as of recently) defaulted in 'gcc/testsuite/lib/rust.exp:rust_init': lappend ALWAYS_RUSTFLAGS "additional_flags=-frust-incomplete-and-experimental-compiler-do-not-use" A few more "command-line option [...] is valid for [...] but not for [...]" instances were found in the test suite logs, when more than one language is involved. With '-Wno-complain-wrong-lang' used in 'gcc/testsuite/lib/target-supports.exp:check_compile', we get back: PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O0 (test for excess errors) PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O1 (test for excess errors) PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O2 (test for excess errors) +PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) +PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -O3 -g (test for excess errors) PASS: rust/compile/torture/all_doc_comment_line_blocks.rs -Os (test for excess errors) Etc., and in total: === rust Summary for unix === # of expected passes [-4990-]{+6718+} # of expected failures [-39-]{+51+} Anything that 'gcc/opts-global.cc:complain_wrong_lang' might do is cut short by '-Wno-complain-wrong-lang', not just the one 'warning' diagnostic. This corresponds to what already exists via 'lang_hooks.complain_wrong_lang_p'. The 'gcc/opts-common.cc:prune_options' changes follow the same rationale as PR67640 "driver passes -fdiagnostics-color= always last": we need to process '-Wno-complain-wrong-lang' early, so that it properly affects other options appearing before it on the command line. gcc/ * common.opt (-Wcomplain-wrong-lang): New. * doc/invoke.texi (-Wno-complain-wrong-lang): Document it. * opts-common.cc (prune_options): Handle it. * opts-global.cc (complain_wrong_lang): Use it. gcc/testsuite/ * gcc.dg/Wcomplain-wrong-lang-1.c: New. * gcc.dg/Wcomplain-wrong-lang-2.c: Likewise. * gcc.dg/Wcomplain-wrong-lang-3.c: Likewise. * gcc.dg/Wcomplain-wrong-lang-4.c: Likewise. * gcc.dg/Wcomplain-wrong-lang-5.c: Likewise. * lib/target-supports.exp (check_compile): Use '-Wno-complain-wrong-lang'. * g++.dg/abi/empty12.C: Likewise. * g++.dg/abi/empty13.C: Likewise. * g++.dg/abi/empty14.C: Likewise. * g++.dg/abi/empty15.C: Likewise. * g++.dg/abi/empty16.C: Likewise. * g++.dg/abi/empty17.C: Likewise. * g++.dg/abi/empty18.C: Likewise. * g++.dg/abi/empty19.C: Likewise. * g++.dg/abi/empty22.C: Likewise. * g++.dg/abi/empty25.C: Likewise. * g++.dg/abi/empty26.C: Likewise. * gfortran.dg/bind-c-contiguous-1.f90: Likewise. * gfortran.dg/bind-c-contiguous-4.f90: Likewise. * gfortran.dg/bind-c-contiguous-5.f90: Likewise. libgomp/ * testsuite/libgomp.fortran/alloc-10.f90: Use '-Wno-complain-wrong-lang'. * testsuite/libgomp.fortran/alloc-11.f90: Likewise. * testsuite/libgomp.fortran/alloc-7.f90: Likewise. * testsuite/libgomp.fortran/alloc-9.f90: Likewise. * testsuite/libgomp.fortran/allocate-1.f90: Likewise. * testsuite/libgomp.fortran/depend-4.f90: Likewise. * testsuite/libgomp.fortran/depend-5.f90: Likewise. * testsuite/libgomp.fortran/depend-6.f90: Likewise. * testsuite/libgomp.fortran/depend-7.f90: Likewise. * testsuite/libgomp.fortran/depend-inoutset-1.f90: Likewise. * testsuite/libgomp.fortran/examples-4/declare_target-1.f90: Likewise. * testsuite/libgomp.fortran/examples-4/declare_target-2.f90: Likewise. * testsuite/libgomp.fortran/order-reproducible-1.f90: Likewise. * testsuite/libgomp.fortran/order-reproducible-2.f90: Likewise. * testsuite/libgomp.oacc-fortran/parallel-dims.f90: Likewise. * testsuite/libgomp.fortran/task-detach-6.f90: Remove left-over 'dg-prune-output'.
2023-02-22Rust: Don't depend on unused 'target-libffi', 'target-libbacktrace'Thomas Schwinge1-2/+0
For example: configure: error: "libffi has not been ported to nvptx-unknown-none." Follow-up to commit a75f038c069cc3a23b214854bedf04321fe88bc5 "gccrs: Add config-lang.in", which said: > This was a copy/paste from gccgo front-end. We do not use any of the > target_libs yet, [...] gcc/rust/ * config-lang.in (target_libs): Remove.
2023-02-22In 'contrib/config-list.mk', clarify i686-symbolics-gnu to i686-gnuThomas Schwinge1-1/+1
Already in the first revision of 'contrib/config-list.mk', i686-symbolics-gnu has been present, but it's not clear to me whether that was meant to be Symbolics as in the manufacturer, <https://en.wikipedia.org/wiki/Symbolics>, with GNU (that is, GNU/Hurd) kernel/operating system (user land), or Symbolics kernel with GNU operating system (user land)? I can't find any mention of "Symbolics" in the history of 'config.sub' upstream. Either way, GCC configures i686-symbolics-gnu exactly the same as i686-gnu: $ sed -n -e '/Using .* host machine hooks\.$/q' -e '/^Using the following target machine macro files:$/,$p' log/i686-gnu-make.out Using the following target machine macro files: [...]/gcc/config/vxworks-dummy.h [...]/gcc/config/i386/i386.h [...]/gcc/config/i386/unix.h [...]/gcc/config/i386/att.h [...]/gcc/config/elfos.h [...]/gcc/config/gnu-user.h [...]/gcc/config/glibc-stdint.h [...]/gcc/config/i386/gnu-user-common.h [...]/gcc/config/i386/gnu-user.h [...]/gcc/config/gnu.h [...]/gcc/config/i386/gnu.h [...]/gcc/config/initfini-array.h ..., so let's clarify i686-symbolics-gnu to i686-gnu. contrib/ * config-list.mk (LIST): Clarify i686-symbolics-gnu to i686-gnu.
2023-02-22Daily bump.GCC Administrator8-1/+1128
2023-02-21analyzer: stop exploring the path after certain diagnostics [PR108830]David Malcolm33-46/+1157
PR analyzer/108830 reports a situation in which there are lots of followup -Wanalyzer-null-dereference warnings after the first access of a NULL pointer, leading to very noisy output from -fanalyzer. The analyzer's logic for stopping emitting multiple warnings from a state machine doesn't quite work for NULL pointers: it attempts to transition the malloc state machine's NULL pointer to the "stop" state, which doesn't seem to make much sense in retrospect, and seems to get confused over types. Similarly, poisoned_value_diagnostic can be very noisy for uninit variables, emitting a warning for every access to an uninitialized variable. In theory, region_model::check_for_poison makes some attempts to suppress followups, but only for the symbolic value itself; if the user's code keeps accessing the same region, we would get a warning on each one. For example, this showed up in Doom's s_sound.c where there were 7 followup uninit warnings after the first uninit warning in "S_ChangeMusic". This patch adds an extra mechanism, giving pending diagnostics the option of stopping the analysis of an execution path if they're saved for emission on it, and turning this on for these warnings: -Wanalyzer-null-dereference -Wanalyzer-null-argument -Wanalyzer-use-after-free -Wanalyzer-use-of-pointer-in-stale-stack-frame -Wanalyzer-use-of-uninitialized-value Doing so should hopefully reduce the cascades of diagnostics that -fanalyzer can sometimes emit. I added a -fno-analyzer-suppress-followups for the cases where you really want the followup warnings (e.g. in some DejaGnu tests, and for microbenchmarks of UB detection, such as PR analyzer/104224). Integration testing shows this patch reduces the number of probable false positives reported by 94, and finds one more true positive: Comparison: 9.34% -> 10.91% GOOD: 66 -> 67 (+1) BAD: 641 -> 547 (-94) where the affected warnings/projects are: -Wanalyzer-null-dereference: 0.00% GOOD: 0 BAD: 269 -> 239 (-30) Unclassified: 257 -> 228 (-29) apr-1.7.0: 12 -> 5 (-7) doom: 1 -> 0 (-1) haproxy-2.7.1: 47 -> 41 (-6) ImageMagick-7.1.0-57: 13 -> 9 (-4) qemu-7.2.0: 165 -> 154 (-11) Known false: 7 -> 6 (-1) xz-5.4.0: 4 -> 3 (-1) -Wanalyzer-use-of-uninitialized-value: 0.00% GOOD: 0 BAD: 143 -> 80 (-63) Known false: 47 -> 16 (-31) doom: 42 -> 11 (-31) Unclassified: 96 -> 64 (-32) coreutils-9.1: 14 -> 10 (-4) haproxy-2.7.1: 29 -> 23 (-6) qemu-7.2.0: 48 -> 26 (-22) -Wanalyzer-null-argument: 0.00% -> 2.33% GOOD: 0 -> 1 (+1) BAD: 43 -> 42 (-1) Unclassified: 39 -> 38 (-1) due to coreutils-9.1: 9 -> 8 (-1) True positive: 0 -> 1 (+1) (in haproxy-2.7.1) gcc/analyzer/ChangeLog: PR analyzer/108830 * analyzer.opt (fanalyzer-suppress-followups): New option. * engine.cc (impl_region_model_context::warn): Terminate the path if the diagnostic's terminate_path_p vfunc returns true and -fanalyzer-suppress-followups is true (the default). (impl_sm_context::warn): Likewise, for both overloads. * pending-diagnostic.h (pending_diagnostic::terminate_path_p): New vfunc. * program-state.cc (program_state::on_edge): Terminate the path if the ctxt requests it during updating the edge. * region-model.cc (poisoned_value_diagnostic::terminate_path_p): New vfunc. * sm-malloc.cc (null_deref::terminate_path_p): New vfunc. (null_arg::terminate_path_p): New vfunc. gcc/ChangeLog: PR analyzer/108830 * doc/invoke.texi: Document -fno-analyzer-suppress-followups. gcc/testsuite/ChangeLog: PR analyzer/108830 * gcc.dg/analyzer/attribute-nonnull.c: Update for -Wanalyzer-use-of-uninitialized-value terminating analysis along a path. * gcc.dg/analyzer/call-summaries-2.c: Likewise. * gcc.dg/analyzer/data-model-1.c: Likewise. * gcc.dg/analyzer/data-model-5.c: Likewise. * gcc.dg/analyzer/doom-s_sound-pr108867.c: New test. * gcc.dg/analyzer/memset-CVE-2017-18549-1.c: Add -fno-analyzer-suppress-followups. * gcc.dg/analyzer/null-deref-pr108830.c: New test. * gcc.dg/analyzer/pipe-1.c: Add -fno-analyzer-suppress-followups. * gcc.dg/analyzer/pipe-void-return.c: Likewise. * gcc.dg/analyzer/pipe2-1.c: Likewise. * gcc.dg/analyzer/pr101547.c: Update for -Wanalyzer-use-of-uninitialized-value terminating analysis along a path. * gcc.dg/analyzer/pr101875.c: Likewise. * gcc.dg/analyzer/pr104224-split.c: New test, based on... * gcc.dg/analyzer/pr104224.c: Add -fno-analyzer-suppress-followups. * gcc.dg/analyzer/realloc-2.c: Add -fno-analyzer-suppress-followups. * gcc.dg/analyzer/realloc-3.c: Likewise. * gcc.dg/analyzer/realloc-5.c: Likewise. * gcc.dg/analyzer/stdarg-1-ms_abi.c: Likewise. * gcc.dg/analyzer/stdarg-1-sysv_abi.c: Likewise. * gcc.dg/analyzer/stdarg-1.c: Likewise. * gcc.dg/analyzer/symbolic-1.c: Likewise. * gcc.dg/analyzer/symbolic-7.c: Update for -Wanalyzer-use-of-uninitialized-value terminating analysis along a path. * gcc.dg/analyzer/uninit-4.c: Likewise. * gcc.dg/analyzer/uninit-8.c: New test. * gcc.dg/analyzer/uninit-pr94713.c: Update for -Wanalyzer-use-of-uninitialized-value terminating analysis along a path. * gcc.dg/analyzer/zlib-6a.c: Add -fno-analyzer-suppress-followups. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2023-02-21gcc: xtensa: fix PR target/108876Max Filippov2-9/+13
gcc/ PR target/108876 * config/xtensa/xtensa.cc (xtensa_expand_epilogue): Drop emit_use for A0_REG. * config/xtensa/xtensa.md (sibcall, sibcall_internal) (sibcall_value, sibcall_value_internal): Add 'use' expression for A0_REG.
2023-02-21Fortran: improve checking of character length specification [PR96025]Harald Anlauf3-12/+28
gcc/fortran/ChangeLog: PR fortran/96025 * parse.cc (check_function_result_typed): Improve type check of specification expression for character length and return status. (parse_spec): Use status from above. * resolve.cc (resolve_fntype): Prevent use of invalid specification expression for character length. gcc/testsuite/ChangeLog: PR fortran/96025 * gfortran.dg/pr96025.f90: New test.
2023-02-21libphobos: Merge upstream phobos e5a521ab2.Iain Buclaw7-19415/+2527
Phobos changes: - Unicode tables have been updated to version 15. libphobos/ChangeLog: * src/MERGE: Merge upstream phobos e5a521ab2.
2023-02-21d: Merge upstream dmd, druntime 09faa4eacd, phobos 13ef27a56.Iain Buclaw253-999/+2627
D front-end changes: - Import dmd v2.102.0-beta.1 - `static assert' now supports multiple message arguments. D runtime changes: - Import druntime v2.102.0-beta.1 - The default `Throwable.TraceInfo' generation now is `@nogc'. - `Object.factory' method has now been deprecated. Phobos changes: - Import phobos v2.102.0-beta.1 - Added float- and double-precision implementations for log function families in std.math. - `std.typecons.Unique' now calls `destroy` on struct types gcc/d/ChangeLog: * Make-lang.in (D_FRONTEND_OBJS): Add d/location.o. * d-lang.cc (d_init_options): Update for new front-end interface. (d_post_options): Call Loc::set after handling options. * dmd/MERGE: Merge upstream dmd 09faa4eacd. * dmd/VERSION: Bump version to v2.102.0-beta.1. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime 09faa4eacd. * src/MERGE: Merge upstream phobos 13ef27a56. * testsuite/libphobos.exceptions/refcounted.d: Add test for chained reference counted exceptions. * testsuite/libphobos.shared/finalize.d: Add dg-warning for deprecated factory interfaces. * testsuite/libphobos.gc/issue22843.d: New test. gcc/testsuite/ChangeLog: * gdc.dg/simd2a.d: Update. * gdc.dg/simd2b.d: Update. * gdc.dg/simd2c.d: Update. * gdc.dg/simd2d.d: Update. * gdc.dg/simd2e.d: Update. * gdc.dg/simd2f.d: Update. * gdc.dg/simd2g.d: Update. * gdc.dg/simd2h.d: Update. * gdc.dg/simd2i.d: Update. * gdc.dg/simd2j.d: Update.
2023-02-21d: Only handle the left-to-right evaluation of a call expression during gimplifyIain Buclaw2-26/+12
Removes an unnecessary rewriting of the front-end AST during lowering. gcc/d/ChangeLog: * d-codegen.cc (d_build_call): Remove front-end expansion of side-effects in a call expression. * d-gimplify.cc (d_gimplify_call_expr): Gimplify the callee before its arguments.
2023-02-21d: Set doing_semantic_analysis_p before calling functionSemantic3Iain Buclaw2-0/+57
As functions which have semantic analysis ran late may still require the use of CTFE built-ins to be evaluated. gcc/d/ChangeLog: * decl.cc (DeclVisitor::visit (FuncDeclaration *)): Set doing_semantic_analysis_p before calling functionSemantic3. gcc/testsuite/ChangeLog: * gdc.dg/ctfeintrinsics.d: New test.
2023-02-21libphobos: Add @nogc to gcc.backtrace and gcc.libbacktrace modules.Iain Buclaw2-12/+12
libphobos/ChangeLog: * libdruntime/gcc/backtrace.d (simpleErrorCallback): Add @nogc. (LibBacktrace.initLibBacktrace): Likewise. (LibBacktrace.this): Likewise. (UnwindBacktrace.this): Likewise. (getBacktrace): Likewise. (getBacktraceSymbols): Likewise. * libdruntime/gcc/libbacktrace.d.in (backtrace_create_state): Likewise. (backtrace_full): Likewise. (backtrace_simple): Likewise. (backtrace_print): Likewise. (backtrace_pcinfo): Likewise. (backtrace_syminfo): Likewise.
2023-02-21tree-optimization/108691 - remove trigger-happy assertRichard Biener2-3/+14
The following gets rid of the idea that we should prevent setjmp like calls from popping up in uncontrolled way in the IL for now. The solution is probably to handle it similar as noreturn has the ctrl-altering flag on stmts, but use another flag, for example ctrl-receiving which would also make sure the stmt is first. PR tree-optimization/108691 * tree-ssa-dce.cc (eliminate_unnecessary_stmts): Remove assert about calls_setjmp not becoming true when it was false. * gcc.dg/pr108691.c: New testcase.
2023-02-21tree-optimization/108793 - niter compute type mismatchRichard Biener2-5/+16
When computing the number of iterations until wrap types are mixed up, eventually leading to checking ICEs with a pointer bitwise inversion. The following uses niter_type for the calculation. PR tree-optimization/108793 * tree-ssa-loop-niter.cc (number_of_iterations_until_wrap): Use convert operands to niter_type when computing num. * gcc.dg/torture/pr108793.c: New testcase.
2023-02-21Update copyright years.Thomas Schwinge2-2/+2
... which accidentally had gotten reverted in recent commit r13-6156-g1e8eb102200902e12c1b00e867e338be0a92c292 "gccrs: dump: Emit visibility when dumping items".
2023-02-21gccrs: add math intrinsicsRaiki Tamura2-4/+291
gcc/rust/ChangeLog: * backend/rust-builtins.cc (BuiltinsContext::setup_math_fns): New functions. gcc/testsuite/ChangeLog: * rust/compile/torture/intrinsics-math.rs: New test.
2023-02-21gccrs: const evaluator: Remove get_nth_callargArthur Cohen1-16/+3
We only used one path of the C++ folder's get_nth_callarg function: CALL_EXPR_ARG. Replace all calls to get_nth_callarg by macro calls to CALL_EXPR_ARG gcc/rust/ChangeLog: * backend/rust-constexpr.cc (get_nth_callarg): Remove function. (rs_bind_parameters_in_call): Use CALL_EXPR_ARG instead. (potential_constant_expression_1): Likewise.
2023-02-21gccrs: Repair 'gcc/rust/lang.opt' commentThomas Schwinge1-3/+1
... lost in #1527 commit 138a6260124740208b8f3aff2e38617f43b05fe8 "rust: Add -frust-compile-until option". gcc/rust/ChangeLog: * lang.opt: Fix ordering of file.
2023-02-21gccrs: Cleanup unused parameters to fix the bootstrap buildPhilip Herron26-695/+661
gcc/rust/ChangeLog: * backend/rust-compile-type.cc (TyTyResolveCompile::visit): Remove unused parameters. * backend/rust-constexpr.cc (constant_value_1): Likewise. (fold_non_dependent_init): Likewise. * backend/rust-tree.cc (publicly_uniquely_derived_p): Likewise. (instantiation_dependent_expression_p): Likewise. (type_has_nontrivial_copy_init): Likewise. (is_normal_capture_proxy): Likewise. (resolve_nondeduced_context): Likewise. (undeduced_auto_decl): Likewise. (require_deduced_type): Likewise. * checks/errors/privacy/rust-privacy-reporter.cc (PrivacyReporter::visit): Likewise. * checks/errors/privacy/rust-reachability.cc (ReachabilityVisitor::visit): Likewise. * checks/errors/privacy/rust-visibility-resolver.cc (VisibilityResolver::visit): Likewise. * checks/errors/rust-const-checker.cc (ConstChecker::visit): Likewise. * checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit): Likewise. * checks/lints/rust-lint-marklive.cc (MarkLive::go): Likewise. * checks/lints/rust-lint-unused-var.cc (unused_var_walk_fn): Likewise. * expand/rust-macro-builtins.cc (try_expand_single_string_literal): Likewise. (try_expand_many_expr): Likewise. (parse_single_string_literal): Likewise. (MacroBuiltin::assert_handler): Likewise. (MacroBuiltin::file_handler): Likewise. (MacroBuiltin::column_handler): Likewise. (MacroBuiltin::concat_handler): Likewise. (MacroBuiltin::env_handler): Likewise. (MacroBuiltin::line_handler): Likewise. * hir/rust-ast-lower-base.cc (ASTLoweringBase::visit): Likewise. (ASTLoweringBase::handle_doc_item_attribute): Likewise. * hir/rust-hir-dump.cc (Dump::visit): Likewise. * hir/tree/rust-hir-full-test.cc (ConstGenericParam::accept_vis): Likewise. * lex/rust-lex.cc (Lexer::parse_utf8_escape): Likewise. (Lexer::parse_string): Likewise. (Lexer::parse_char_or_lifetime): Likewise. * lex/rust-lex.h: Likewise. * metadata/rust-export-metadata.cc: Likewise. * resolve/rust-ast-resolve-expr.cc (ResolveExpr::visit): Likewise. * resolve/rust-ast-resolve-type.cc (ResolveType::visit): Likewise. (ResolveTypeToCanonicalPath::visit): Likewise. * resolve/rust-ast-verify-assignee.h: Likewise. * resolve/rust-early-name-resolver.cc (EarlyNameResolver::visit): Likewise. * typecheck/rust-hir-type-check-expr.h: Likewise. * typecheck/rust-hir-type-check-item.h: Likewise. * typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): Likewise. * typecheck/rust-tyty-rules.h: Likewise. * util/rust-attributes.cc (AttributeChecker::visit): Likewise.
2023-02-21gccrs: Skip this debug test case which is failing on the latest mac-os ↵Philip Herron1-7/+8
devtools and its only for debug info gcc/testsuite/ChangeLog: * rust/debug/chartype.rs: Skip testcases on Darwin architectures.
2023-02-21gccrs: Fix undefined behaviour issues on macosPhilip Herron5-13/+38
This adds missing copy constructors to HIR::PathExprSegment which were wrongly defaulting to empty vectors when apply specified generic arguments to method calls. gcc/rust/ChangeLog: * hir/tree/rust-hir-expr.h: Add const `get_method_name`. * hir/tree/rust-hir-full-decls.h (struct GenericArgs): Move from `struct`... (class GenericArgs): ...to `class`. * hir/tree/rust-hir-path.h (struct GenericArgs): Likewise. (class GenericArgs): Clear `type_args` in copy constructor. * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Reorder debug print. * typecheck/rust-tyty.h: Add default constructors for `SubstitutionArgumentMappings`.
2023-02-21gccrs: Add initial support for argument capture of closuresPhilip Herron6-6/+172
When we have a closure expression that captures a parent function's variable we must setup the closure data to contain this. Ignoring moveability and mutability requires for now, this patch creates the closure structure with fields for each of the captured variables. When it comes to compilation of the closure expression in order to support nested closures we must setup a context of implicit mappings so that for all path resolution we hit this implicit closure mappings lookups code before any lookup_var_decl as this decl will not exist so the order here is important during path resolution which is a similar problem to match expression destructuring. Fixes #195 gcc/rust/ChangeLog: * backend/rust-compile-context.cc (Context::push_closure_context): New function. (Context::pop_closure_context): Likewise. (Context::insert_closure_binding): Likewise. (Context::lookup_closure_binding): Likewise. * backend/rust-compile-context.h: Declare new functions and closure mappings. * backend/rust-compile-expr.cc (CompileExpr::visit): Visit captures properly. (CompileExpr::generate_closure_function): Compile captures properly. * backend/rust-compile-resolve-path.cc (ResolvePathRef::resolve): Check for closure bindings. * backend/rust-compile-type.cc (TyTyResolveCompile::visit): Compile capture list's types as well. gcc/testsuite/ChangeLog: * rust/execute/torture/closure3.rs: New test.
2023-02-21gccrs: Add capture tracking to the type info for closuresPhilip Herron3-6/+14
gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Pass captures properly to `TyTy::ClosureType` constructor. * typecheck/rust-tyty.cc (ClosureType::as_string): Fix string representation. (ClosureType::clone): Pass `captures` argument. * typecheck/rust-tyty.h: Add `captures` field.
2023-02-21gccrs: Add closure binding's tracking to name resolutionPhilip Herron3-0/+159
When we have a closure block referencing variables in a parent function, we must track what these are. We do this by having a context of closures so if we have a variable reference and its declared in a rib whose node id is less than the node id of the closure's node id we know it must be a captured variable. We also need to iterate all possible closure contexts as we might be in the case of a nested closure. Addresses #195 gcc/rust/ChangeLog: * resolve/rust-ast-resolve-expr.cc (ResolveExpr::visit): Use proper closure contexts. * resolve/rust-name-resolver.cc (Scope::lookup_decl_type): New function. (Scope::lookup_rib_for_decl): Likewise. (Resolver::insert_resolved_name): Insert captured items. (Resolver::push_closure_context): New function. (Resolver::pop_closure_context): Likewise. (Resolver::insert_captured_item): Likewise. (Resolver::decl_needs_capture): Likewise. (Resolver::get_captures): Likewise. * resolve/rust-name-resolver.h: Declare new functions.
2023-02-21gccrs: Refactor name resolver to take a Rib::ItemTypePhilip Herron10-41/+108
This allows us to track the type of declaration that is stored within a Rib. gcc/rust/ChangeLog: * resolve/rust-ast-resolve-expr.cc (ResolveExpr::visit): Add Rib argument. (ResolveExpr::resolve_closure_param): Likewise. * resolve/rust-ast-resolve-implitem.h: Likewise. * resolve/rust-ast-resolve-item.cc (ResolveTraitItems::visit): Likewise. (ResolveItem::visit): Likewise. * resolve/rust-ast-resolve-pattern.cc (PatternDeclaration::visit): Likewise. * resolve/rust-ast-resolve-pattern.h: Likewise. * resolve/rust-ast-resolve-stmt.h: Likewise. * resolve/rust-ast-resolve-toplevel.h: Likewise. * resolve/rust-ast-resolve-type.h: Likewise. * resolve/rust-name-resolver.cc (Rib::lookup_decl_type): Likewise. (Scope::insert): Likewise. (Resolver::insert_builtin_types): Likewise. * resolve/rust-name-resolver.h: Likewise.
2023-02-21gccrs: Get rid of make builtin macroPhilip Herron2-48/+46
This macro is a mess and a helper method is much better for this case. gcc/rust/ChangeLog: * resolve/rust-name-resolver.cc (MKBUILTIN_TYPE): Remove macro. (Rib::Rib): Remove `mappings` field. (Resolver::generate_builtins): Use `setup_builtin` instead of macro. (Resolver::setup_builtin): New function. * resolve/rust-name-resolver.h: Declare `setup_builtin`, add FIXME comment.
2023-02-21gccrs: Improve lexer dumpRaiki Tamura6-72/+72
gcc/rust/ChangeLog: * lex/rust-lex.cc (Lexer::Lexer): Add `dump_lex` boolean flag. (Lexer::skip_token): Dump tokens if flag is enabled. (Lexer::dump_and_skip): New function. * lex/rust-lex.h: Include optional.h and declare functions. * parse/rust-parse-impl.h (Parser::debug_dump_lex_output): Remove old unused function. * parse/rust-parse.h: Likewise. * rust-session-manager.cc (Session::compile_crate): Pass lexer dump option to lexer. (Session::dump_lex): New function. * util/rust-optional.h: Add missing constructor. Signed-off-by: Raiki Tamura <tamaron1203@gmail.com>
2023-02-21gccrs: Remove default location. Add visibility location to create_* functionsDave2-19/+25
gcc/rust/ChangeLog: * ast/rust-item.h: Remoe default location for Visibility class. * parse/rust-parse-impl.h (Parser::parse_visibility): Pass proper location when instantiating visibilities.
2023-02-21gccrs: ast: Dump no comma after self in fn params if it is the last oneJakub Dupak1-4/+12
gcc/rust/ChangeLog: * ast/rust-ast-dump.cc (Dump::visit): Fix dumping of fn params. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2023-02-21gccrs: ast: Dump remove /* stmp */ comment to not clutter the dumpJakub Dupak1-2/+1
gcc/rust/ChangeLog: * ast/rust-ast-dump.cc (Dump::visit): Remove extraneous string when dumping statements. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>