aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2023-05-29RISC-V: Fix VSETVL PASS ICE on SLP auto-vectorizationJuzhe-Zhong2-1/+46
Fix bug reported here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109974 PR target/109974 Signed-off-by: Juzhe-Zhong <juzhe.zhong@rivai.ai> gcc/ChangeLog: * config/riscv/riscv-vsetvl.cc (source_equal_p): Fix ICE. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/vsetvl/pr109974.c: New test.
2023-05-29RISC-V: Remove redundant printf of abs-run.cJuzhe-Zhong1-1/+0
Notice that this testcase cause unexpected fail: FAIL: gcc.target/riscv/rvv/autovec/unop/abs-run.c (test for excess errors) Excess errors: /work/home/jzzhong/work/rvv-opensource/software/host/toolchain/gcc/riscv-gcc/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/abs-run.c:22:7: warning: implicit declaration of function 'printf' [-Wimplicit-function-declaration] /work/home/jzzhong/work/rvv-opensource/software/host/toolchain/gcc/riscv-gcc/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/abs-run.c:22:7: warning: incompatible implicit declaration of built-in function 'printf' [-Wbuiltin-declaration-mismatch] /work/home/jzzhong/work/rvv-opensource/software/host/toolchain/gcc/riscv-gcc/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/abs-run.c:22:7: warning: incompatible implicit declaration of built-in function 'printf' [-Wbuiltin-declaration-mismatch] /work/home/jzzhong/work/rvv-opensource/software/host/toolchain/gcc/riscv-gcc/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/abs-run.c:22:7: warning: incompatible implicit declaration of built-in function 'printf' [-Wbuiltin-declaration-mismatch] /work/home/jzzhong/work/rvv-opensource/software/host/toolchain/gcc/riscv-gcc/gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/abs-run.c:22:7: warning: incompatible implicit declaration of built-in function 'printf' [-Wbuiltin-declaration-mismatch] spawn /work/home/jzzhong/work/rvv-opensource/output/sim/bin/spike --isa=RV64GCVZfh /work/home/jzzhong/work/rvv-opensource/output/sim/riscv64-rivai-elf/bin/pk ./abs-run.exe^M bbl loader^M^M 0 0 -64^M 1 63 -63^M 2 2 -62^M 3 61 -61^M 4 4 -60^M 5 59 -59^M 6 6 -58^M 7 57 -57^M 8 8 -56^M 9 55 -55^M 10 10 -54^M 11 53 -53^M 12 12 -52^M 13 51 -51^M Remove printf since it's unnecessary. Signed-off-by: Juzhe-Zhong <juzhe.zhong@rivai.ai> gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/unop/abs-run.c: Remove redundant printf.
2023-05-29RISC-V: Add RVV FMA auto-vectorization supportJuzhe-Zhong10-0/+476
This patch support FMA auto-vectorization pattern. Let's RA decide vmacc or vmadd. Signed-off-by: Juzhe-Zhong <juzhe.zhong@rivai.ai> gcc/ChangeLog: * config/riscv/autovec.md (fma<mode>4): New pattern. (*fma<mode>): Ditto. * config/riscv/riscv-protos.h (enum insn_type): New enum. (emit_vlmax_ternary_insn): New function. * config/riscv/riscv-v.cc (emit_vlmax_ternary_insn): Ditto. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/rvv.exp: Add ternary tests * gcc.target/riscv/rvv/autovec/ternop/ternop-1.c: New test. * gcc.target/riscv/rvv/autovec/ternop/ternop-2.c: New test. * gcc.target/riscv/rvv/autovec/ternop/ternop-3.c: New test. * gcc.target/riscv/rvv/autovec/ternop/ternop_run-1.c: New test. * gcc.target/riscv/rvv/autovec/ternop/ternop_run-2.c: New test. * gcc.target/riscv/rvv/autovec/ternop/ternop_run-3.c: New test.
2023-05-29RISC-V: Fix ternary instruction attribute bugJuzhe-Zhong1-1/+1
Fix bug of vector.md which generate incorrect information to VSETVL PASS when testing FMA auto vectorization ternop-3.c. Signed-off-by: Juzhe-Zhong <juzhe.zhong@rivai.ai> gcc/ChangeLog: * config/riscv/vector.md: Fix vimuladd instruction bug.
2023-05-29RISC-V: Fix incorrect VXRM configuration in mode switching for CALL and ASMJuzhe-Zhong3-1/+66
Currently mode switching incorrect codegen for the following case: void fn (void); void f (void * in, void *out, int32_t x, int n, int m) { for (int i = 0; i < n; i++) { vint32m1_t v = __riscv_vle32_v_i32m1 (in + i, 4); vint32m1_t v2 = __riscv_vle32_v_i32m1_tu (v, in + 100 + i, 4); vint32m1_t v3 = __riscv_vaadd_vx_i32m1 (v2, 0, VXRM_RDN, 4); fn (); v3 = __riscv_vaadd_vx_i32m1 (v3, 3, VXRM_RDN, 4); __riscv_vse32_v_i32m1 (out + 100 + i, v3, 4); } } Before this patch: Preheader: ... csrwi vxrm,2 Loop Body: ... (no cswri vxrm,2) vaadd.vx ... vaadd.vx ... This codegen is incorrect. After this patch: Preheader: ... csrwi vxrm,2 Loop Body: ... vaadd.vx ... csrwi vxrm,2 ... vaadd.vx ... cross-compile build PASS and regression PASS. Signed-off-by: Juzhe-Zhong <juzhe.zhong@rivai.ai> gcc/ChangeLog: * config/riscv/riscv.cc (global_state_unknown_p): New function. (riscv_mode_after): Fix incorrect VXM. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/base/vxrm-11.c: New test. * gcc.target/riscv/rvv/base/vxrm-12.c: New test.
2023-05-29RISC-V: Add ZVFHMIN extension to the -march= optionPan Li4-2/+63
This patch would like to add new sub extension (aka ZVFHMIN) to the -march= option. To make it simple, only the sub extension itself is involved in this patch, and the underlying FP16 related RVV intrinsic API depends on the TARGET_ZVFHMIN. The Zvfhmin extension depends on the Zve32f extension. You can locate more information about ZVFHMIN from below spec doc. https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#zvfhmin-vector-extension-for-minimal-half-precision-floating-point Signed-off-by: Pan Li <pan2.li@intel.com> gcc/ChangeLog: * common/config/riscv/riscv-common.cc: (riscv_implied_info): Add zvfhmin item. (riscv_ext_version_table): Ditto. (riscv_ext_flag_table): Ditto. * config/riscv/riscv-opts.h (MASK_ZVFHMIN): New macro. (TARGET_ZFHMIN): Align indent. (TARGET_ZFH): Ditto. (TARGET_ZVFHMIN): New macro. gcc/testsuite/ChangeLog: * gcc.target/riscv/arch-20.c: New test. * gcc.target/riscv/predef-26.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com>
2023-05-28Daily bump.GCC Administrator4-1/+21
2023-05-27[COMMITTED]: New entry to MAINTAINERS.Benjamin Priour1-0/+1
ChangeLog: * MAINTAINERS: New entry.
2023-05-27Split notl + pbraodcast + pand to pbroadcast + pandn more modes.liuhongt3-7/+59
r12-5595-gc39d77f252e895306ef88c1efb3eff04e4232554 adds 2 splitter to transform notl + pbroadcast + pand to pbroadcast + pandn for VI124_AVX2 which leaves out all DI-element-size ones as well as all 512-bit ones. This patch extend the splitter to VI_AVX2 which will handle DImode for AVX2, and V64QImode,V32HImode,V16SImode,V8DImode for AVX512. gcc/ChangeLog: PR target/100711 * config/i386/sse.md (*andnot<mode>3): Extend below splitter to VI_AVX2 to cover more modes. gcc/testsuite/ChangeLog: * gcc.target/i386/pr100711-2.c: Add v4di/v2di testcases. * gcc.target/i386/pr100711-3.c: New test.
2023-05-27Disable avoid_false_dep_for_bmi for atom and icelake(and later) core processors.liuhongt1-1/+2
lzcnt/tzcnt has been fixed since skylake, popcnt has been fixed since icelake. At least for icelake and later intel Core processors, the errata tune is not needed. And the tune isn't need for ATOM either. gcc/ChangeLog: * config/i386/x86-tune.def (X86_TUNE_AVOID_FALSE_DEP_FOR_BMI): Remove ATOM and ICELAKE(and later) core processors.
2023-05-27Daily bump.GCC Administrator8-1/+557
2023-05-26c: -Wstringop-overflow for parameters with forward-declared sizesMartin Uecker2-0/+24
Warnings from -Wstringop-overflow do not appear for parameters declared as VLAs when the bound refers to a parameter forward declaration. This is fixed by splitting the loop that passes through parameters into two, first only recording the positions of all possible size expressions and then processing the parameters. PR c/109970 gcc/c-family: * c-attribs.cc (build_attr_access_from_parms): Split loop to first record all parameters. gcc/testsuite: * gcc.dg/pr109970.c: New test.
2023-05-26RISC-V: Implement autovec abs, vneg, vnot.Robin Dapp16-0/+278
This patch implements abs<mode>2, vneg<mode>2 and vnot<mode>2 expanders for integer vector registers and adds tests for them. gcc/ChangeLog: * config/riscv/autovec.md (<optab><mode>2): Add vneg/vnot. (abs<mode>2): Add. * config/riscv/riscv-protos.h (emit_vlmax_masked_mu_insn): Declare. * config/riscv/riscv-v.cc (emit_vlmax_masked_mu_insn): New function. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/rvv.exp: Add unop tests. * gcc.target/riscv/rvv/autovec/unop/abs-run.c: New test. * gcc.target/riscv/rvv/autovec/unop/abs-rv32gcv.c: New test. * gcc.target/riscv/rvv/autovec/unop/abs-rv64gcv.c: New test. * gcc.target/riscv/rvv/autovec/unop/abs-template.h: New test. * gcc.target/riscv/rvv/autovec/unop/vneg-run.c: New test. * gcc.target/riscv/rvv/autovec/unop/vneg-rv32gcv.c: New test. * gcc.target/riscv/rvv/autovec/unop/vneg-rv64gcv.c: New test. * gcc.target/riscv/rvv/autovec/unop/vneg-template.h: New test. * gcc.target/riscv/rvv/autovec/unop/vnot-run.c: New test. * gcc.target/riscv/rvv/autovec/unop/vnot-rv32gcv.c: New test. * gcc.target/riscv/rvv/autovec/unop/vnot-rv64gcv.c: New test. * gcc.target/riscv/rvv/autovec/unop/vnot-template.h: New test.
2023-05-26RISC-V: Add autovec sign/zero extension and truncation.Robin Dapp36-35/+488
This patch implements the autovec expanders for sign and zero extension patterns as well as the accompanying truncations. In order to use them additional mode_attr iterators as well as vectorizer hooks are required. Using these hooks we can e.g. vectorize with VNx4QImode as base mode and extend VNx4SI to VNx4DI. They are still going to be expanded in the future. vf4 and vf8 truncations are emulated by truncating two and three times respectively. The patch also adds tests and changes some expectations for already existing ones. Combine does not yet handle binary operations of two widened operands as we are missing the necessary split/rewrite patterns. These will be added at a later time. Co-authored-by: Juzhe Zhong <juzhe.zhong@rivai.ai> gcc/ChangeLog: * config/riscv/autovec.md (<optab><v_double_trunc><mode>2): New expander. (<optab><v_quad_trunc><mode>2): Dito. (<optab><v_oct_trunc><mode>2): Dito. (trunc<mode><v_double_trunc>2): Dito. (trunc<mode><v_quad_trunc>2): Dito. (trunc<mode><v_oct_trunc>2): Dito. * config/riscv/riscv-protos.h (vectorize_related_mode): Define. (autovectorize_vector_modes): Define. * config/riscv/riscv-v.cc (vectorize_related_mode): Implement hook. (autovectorize_vector_modes): Implement hook. * config/riscv/riscv.cc (riscv_autovectorize_vector_modes): Implement target hook. (riscv_vectorize_related_mode): Implement target hook. (TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES): Define. (TARGET_VECTORIZE_RELATED_MODE): Define. * config/riscv/vector-iterators.md: Add lowercase versions of mode_attr iterators. gcc/testsuite/ChangeLog: * gcc.target/riscv/rvv/autovec/binop/shift-rv32gcv.c: Adjust expectation. * gcc.target/riscv/rvv/autovec/binop/shift-rv64gcv.c: Dito. * gcc.target/riscv/rvv/autovec/binop/vdiv-run.c: Dito. * gcc.target/riscv/rvv/autovec/binop/vdiv-rv32gcv.c: Dito. * gcc.target/riscv/rvv/autovec/binop/vdiv-rv64gcv.c: Dito. * gcc.target/riscv/rvv/autovec/binop/vdiv-template.h: Dito. * gcc.target/riscv/rvv/autovec/binop/vrem-rv32gcv.c: Dito. * gcc.target/riscv/rvv/autovec/binop/vrem-rv64gcv.c: Dito. * gcc.target/riscv/rvv/autovec/zve32f_zvl128b-2.c: Dito. * gcc.target/riscv/rvv/autovec/zve32x_zvl128b-2.c: Dito. * gcc.target/riscv/rvv/autovec/zve64d-2.c: Dito. * gcc.target/riscv/rvv/autovec/zve64f-2.c: Dito. * gcc.target/riscv/rvv/autovec/zve64x-2.c: Dito. * gcc.target/riscv/rvv/rvv.exp: Add new conversion tests. * gcc.target/riscv/rvv/vsetvl/avl_single-38.c: Do not vectorize. * gcc.target/riscv/rvv/vsetvl/avl_single-47.c: Dito. * gcc.target/riscv/rvv/vsetvl/avl_single-48.c: Dito. * gcc.target/riscv/rvv/vsetvl/avl_single-49.c: Dito. * gcc.target/riscv/rvv/vsetvl/imm_switch-8.c: Dito. * gcc.target/riscv/rvv/autovec/conversions/vncvt-run.c: New test. * gcc.target/riscv/rvv/autovec/conversions/vncvt-rv32gcv.c: New test. * gcc.target/riscv/rvv/autovec/conversions/vncvt-rv64gcv.c: New test. * gcc.target/riscv/rvv/autovec/conversions/vncvt-template.h: New test. * gcc.target/riscv/rvv/autovec/conversions/vsext-run.c: New test. * gcc.target/riscv/rvv/autovec/conversions/vsext-rv32gcv.c: New test. * gcc.target/riscv/rvv/autovec/conversions/vsext-rv64gcv.c: New test. * gcc.target/riscv/rvv/autovec/conversions/vsext-template.h: New test. * gcc.target/riscv/rvv/autovec/conversions/vzext-run.c: New test. * gcc.target/riscv/rvv/autovec/conversions/vzext-rv32gcv.c: New test. * gcc.target/riscv/rvv/autovec/conversions/vzext-rv64gcv.c: New test. * gcc.target/riscv/rvv/autovec/conversions/vzext-template.h: New test.
2023-05-26Fortran/OpenMP: Add parsing support for allocators/allocate directivesTobias Burnus18-43/+1068
gcc/fortran/ChangeLog: * dump-parse-tree.cc (show_omp_namelist): Update allocator, fix align dump. (show_omp_node, show_code_node): Handle EXEC_OMP_ALLOCATE. * gfortran.h (enum gfc_statement): Add ST_OMP_ALLOCATE and ..._EXEC. (enum gfc_exec_op): Add EXEC_OMP_ALLOCATE. (struct gfc_omp_namelist): Add 'allocator' to 'u2' union. (struct gfc_namespace): Add omp_allocate. (gfc_resolve_omp_allocate): New. * match.cc (gfc_free_omp_namelist): Free 'u2.allocator'. * match.h (gfc_match_omp_allocate, gfc_match_omp_allocators): New. * openmp.cc (gfc_omp_directives): Uncomment allocate/allocators. (gfc_match_omp_variable_list): Add bool arg for rejecting listening common-block vars separately. (gfc_match_omp_clauses): Update for u2.allocators. (OMP_ALLOCATORS_CLAUSES, gfc_match_omp_allocate, gfc_match_omp_allocators, is_predefined_allocator, gfc_resolve_omp_allocate): New. (resolve_omp_clauses): Update 'allocate' clause checks. (omp_code_to_statement, gfc_resolve_omp_directive): Handle OMP ALLOCATE/ALLOCATORS. * parse.cc (in_exec_part): New global var. (check_omp_allocate_stmt, parse_openmp_allocate_block): New. (decode_omp_directive, case_exec_markers, case_omp_decl, gfc_ascii_statement, parse_omp_structured_block): Handle OMP allocate/allocators. (verify_st_order, parse_executable): Set in_exec_part. * resolve.cc (gfc_resolve_blocks, resolve_codes): Handle allocate/allocators. * st.cc (gfc_free_statement): Likewise. * trans.cc (trans_code): Likewise. * trans-openmp.cc (gfc_trans_omp_directive): Likewise. (gfc_trans_omp_clauses, gfc_split_omp_clauses): Update for u2.allocator, fix for u.align. libgomp/ChangeLog: * testsuite/libgomp.fortran/allocate-4.f90: Update dg-error. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/allocate-2.f90: Update dg-error. * gfortran.dg/gomp/allocate-4.f90: New test. * gfortran.dg/gomp/allocate-5.f90: New test. * gfortran.dg/gomp/allocate-6.f90: New test. * gfortran.dg/gomp/allocate-7.f90: New test. * gfortran.dg/gomp/allocators-1.f90: New test. * gfortran.dg/gomp/allocators-2.f90: New test.
2023-05-26Remove accidentally added gfortran.dg/gomp/allocate*-.f90 filesTobias Burnus6-530/+0
I looked at the commit, proof reading the commit, but missed a <tab> in the changelog, fixing it with 'git ... --amend', the new files sneaked in - and the auto-accept new files without ChangeLog entry feature let it pass. Hence, remove those bogus files again that were added in r14-1299-g366e3d30b8d5dc2bf226696987dfbd2a7df192f5 gcc/testsuite: * gfortran.dg/gomp/allocate-4.f90: Remove autoadded file. * gfortran.dg/gomp/allocate-5.f90: Likewise. * gfortran.dg/gomp/allocate-6.f90: Likewise. * gfortran.dg/gomp/allocate-7.f90: Likewise. * gfortran.dg/gomp/allocators-1.f90: Likewise. * gfortran.dg/gomp/allocators-2.f90: Likewise.
2023-05-26amdgcn: Change -m(no-)xnack to -mxnack=(on,off,any)Tobias Burnus12-35/+585
Since object code target ID V4, xnack has the values unspecified, '+' and '-', which with this commit is represented in GCC as 'any', 'on', and 'off', following the precidence for 'sram(-)ecc' and -msram-ecc=. The current default was 'no' and is now 'off'; however, once XNACK is implemented, the default should be probably 'any'. This commit updates the commandline options to permit the new tristate and updates the documentation. As the feature itself is currently not really supported in GCC, the change should not affect real-world users. The XNACK feature allows memory load instructions to restart safely following a page-miss interrupt. This is useful for shared-memory devices, like APUs, and to implement OpenMP Unified Shared Memory. 2023-05-26 Andrew Stubbs <ams@codesourcery.com> Tobias Burnus <tobias@codesourcery.com> * config/gcn/gcn-hsa.h (XNACKOPT): New macro. (ASM_SPEC): Use XNACKOPT. * config/gcn/gcn-opts.h (enum sram_ecc_type): Rename to ... (enum hsaco_attr_type): ... this, and generalize the names. (TARGET_XNACK): New macro. * config/gcn/gcn.cc (gcn_option_override): Update to sorry for all but -mxnack=off. (output_file_start): Update xnack handling. (gcn_hsa_declare_function_name): Use TARGET_XNACK. * config/gcn/gcn.opt (-mxnack): Add the "on/off/any" syntax. (sram_ecc_type): Rename to ... (hsaco_attr_type: ... this.) * config/gcn/mkoffload.cc (SET_XNACK_ANY): New macro. (TEST_XNACK): Delete. (TEST_XNACK_ANY): New macro. (TEST_XNACK_ON): New macro. (main): Support the new -mxnack=on/off/any syntax. * doc/invoke.texi (-mxnack): Update for new syntax.
2023-05-26genmatch: Emit debug message right before "return x" instead of earlierAndrew Pinski1-11/+22
This is based on the review of https://gcc.gnu.org/pipermail/gcc-patches/2023-May/619342.html . Instead of emitting debug message even if we don't apply a pattern, this fixes the issue by only emitting it if it the pattern finally succeeded. OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. gcc/ChangeLog: * genmatch.cc (emit_debug_printf): New function. (dt_simplify::gen_1): Emit printf into the code before the `return true` or returning the folded result instead of emitting it always.
2023-05-26libstdc++: Resolve -Wsign-compare issueMatthias Kretz1-1/+1
Signed-off-by: Matthias Kretz <m.kretz@gsi.de> libstdc++-v3/ChangeLog: * include/experimental/bits/simd_ppc.h (_S_bit_shift_left): Negative __y is UB, so prefer signed compare.
2023-05-26xtensa: Rework 'setmemsi' insn patternTakayuki 'January June' Suwa3-154/+172
In order to reject voodoo estimation logic with lots of magic numbers, this patch revises the code to measure the costs of the three memset methods based on the actual emission size of the insn sequence corresponding to each method and choose the smallest one. gcc/ChangeLog: * config/xtensa/xtensa-protos.h (xtensa_expand_block_set_unrolled_loop, xtensa_expand_block_set_small_loop): Remove. (xtensa_expand_block_set): New prototype. * config/xtensa/xtensa.cc (xtensa_expand_block_set_libcall): New subfunction. (xtensa_expand_block_set_unrolled_loop, xtensa_expand_block_set_small_loop): Rewrite as subfunctions. (xtensa_expand_block_set): New function that calls the above subfunctions. * config/xtensa/xtensa.md (memsetsi): Change to invoke only xtensa_expand_block_set().
2023-05-26xtensa: Add 'subtraction from constant' insn patternTakayuki 'January June' Suwa4-1/+33
This patch makes try to eliminate using temporary pseudo for '(minus:SI (const_int) (reg:SI))' if the addition of negative constant value can be emitted in a single machine instruction. /* example */ int test0(int x) { return 1 - x; } int test1(int x) { return 100 - x; } int test2(int x) { return 25600 - x; } ;; before test0: movi.n a9, 1 sub a2, a9, a2 ret.n test1: movi a9, 0x64 sub a2, a9, a2 ret.n test2: movi.n a9, 0x19 slli a9, a9, 10 sub a2, a9, a2 ret.n ;; after test0: addi.n a2, a2, -1 neg a2, a2 ret.n test1: addi a2, a2, -100 neg a2, a2 ret.n test2: addmi a2, a2, -0x6400 neg a2, a2 ret.n gcc/ChangeLog: * config/xtensa/xtensa-protos.h (xtensa_m1_or_1_thru_15): New prototype. * config/xtensa/xtensa.cc (xtensa_m1_or_1_thru_15): New function. * config/xtensa/constraints.md (O): Change to use the above function. * config/xtensa/xtensa.md (*subsi3_from_const): New insn_and_split pattern.
2023-05-26xtensa: tidy extzvsi-1bit patternsTakayuki 'January June' Suwa1-5/+6
gcc/ChangeLog: * config/xtensa/xtensa.md (*extzvsi-1bit_ashlsi3): Retract excessive line folding, and correct the value of the "length" insn attribute related to TARGET_DENSITY. (*extzvsi-1bit_addsubx): Ditto.
2023-05-26ada: Corrections to premature-references rulesBob Duff1-5/+17
This patch corrects the implementation of RM-8.3(17), which says that a record extension is self-hidden until "record". Previously, such premature references could cause a compiler crash. gcc/ada/ * sem_ch3.adb (Build_Derived_Record_Type): Temporarily set the state of the Derived_Type to "self-hidden" while processing constraints and discriminants of a record extension.
2023-05-26ada: Fix typos "statment" and "condtion"Bob Duff6-7/+7
...caused by moving code here from Atree. gcc/ada/ * einfo.ads: Add comma. * contracts.adb: Fix typos. * exp_attr.adb: Likewise. * exp_ch5.adb: Likewise. * exp_ch6.adb: Likewise. * lib-xref.adb: Likewise.
2023-05-26ada: Use truncation for dynamic conversions from floating point to fixed pointEric Botcazou4-24/+35
This changes the implementation of dynamic conversions from floating-point to ordinary fixed-point types, from rounding (to the nearest number) to truncation (toward zero), so as to make them consistent with both static conversions between these types and also the value of the Machine_Rounds attribute, which is False for all fixed-point types with GNAT. The rounding is still available under the debug switch -gnatd.N for the sake of backward compatibility with the previous implementation. gcc/ada/ * debug.adb (d.N): Document new usage. * exp_ch4.adb (Expand_N_Type_Conversion): Copy the Float_Truncate flag when rewriting a floating-point to fixed-point conversion as a floating-point to integer conversion. * exp_fixd.adb: Add with and use clauses for Debug. (Expand_Convert_Fixed_To_Fixed): Generate a truncation in all cases except if the result is explicitly rounded. (Expand_Convert_Integer_To_Fixed): Likewise. (Expand_Convert_Float_To_Fixed): Generate a truncation for all kind of fixed-point types, except if the result is explicitly rounded, or -gnatd.N is specified and the type is an ordinary fixed-point type. * sinfo.ads (Float_Truncate): Document usage for floating-point to fixed-point conversions.
2023-05-26ada: Crash on function returning allocated object containing tasksJavier Miranda1-0/+19
The frontend crashes when a function returns an object of a limited type that may have task components, has discriminants, and the object is created with an allocator. gcc/ada/ * exp_ch4.adb (Expand_N_Allocator): If an allocator with constraints is called in the return statement of a function returning a general access type, then propagate to the itype the master of the general access type (since it is the master associated with the returned object).
2023-05-26ada: Default initialize entity to avoid CodePeer messageYannick Moy1-0/+6
CodePeer issues a false alarm when reading local entity Component later if not initialized by default. Fix this. gcc/ada/ * sem_aggr.adb (Resolve_Record_Aggregate): Add dummy initialization and assertion that clarifies when we reassigned to a useful value.
2023-05-26ada: Minor doc clarificationYannick Moy3-3/+3
Pattern Matching extension does not apply yet to case expressions. This is worth stating clearly, as this is a natural use of pattern matching to program in more functional style. gcc/ada/ * doc/gnat_rm/gnat_language_extensions.rst: Be more explicit on pattern matching limitation. * gnat_rm.texi: Regenerate. * gnat_ugn.texi: Regenerate.
2023-05-26ada: Complete contracts of SPARK unitsYannick Moy4-58/+80
SPARK units in the standard library (both Ada and GNAT ones) should have subprograms correctly annotated with contracts, so that a SPARK subprogram should always return (not fail or raise an exception) under the conditions expressed in its precondition, unless it is a procedure annotated with Might_Not_Return. gcc/ada/ * libgnat/a-calend.ads: Mark with SPARK_Mode=>Off the functions which may raise Time_Error. * libgnat/a-ngelfu.ads: Mark with SPARK_Mode=>Off the functions which may lead to an overflow (which is not the case of Tan with one parameter for example, or Arctanh or Arcoth, despite their mathematical range covering the reals). * libgnat/a-textio.ads: Remove Always_Return annotation from functions, as this is now compulsory for functions to always return in SPARK. * libgnat/i-cstrin.ads: Add Might_Not_Return annotation to Update procedure which may not return.
2023-05-26ada: Fix crash on 'Img as generic actual functionBob Duff6-33/+33
'Image is allowed as an actual for a generic formal function. This patch fixes a crash when 'Img is used instead of 'Image in that context. Misc cleanups. gcc/ada/ * exp_put_image.adb (Build_Image_Call): Treat 'Img the same as 'Image. * exp_imgv.adb (Expand_Image_Attribute): If Discard_Names, expand to 'Image instead of 'Img. * snames.ads-tmpl, par-ch4.adb, sem_attr.adb, sem_attr.ads: Cleanups: Rename Attribute_Class_Array to be Attribute_Set. Remove unnecessary qualifications. DRY: Don't repeat "True".
2023-05-26ada: Remove redundant guard against empty listsPiotr Trojanek2-4/+1
There is no need to guard against routine Contains being called on No_Elist, because it will return False. Code cleanup related to handling of primitive operations in GNATprove; semantics is unaffected. gcc/ada/ * sem_prag.adb (Record_Possible_Body_Reference): Remove call to Present. * sem_util.adb (Find_Untagged_Type_Of): Likewise.
2023-05-26ada: Fix double free on finalization of Vector in array aggregateEric Botcazou1-18/+9
The handling of finalization is delicate during the expansion of aggregates since the generated assignments must not cause the finalization of the RHS. That's why the No_Ctrl_Actions flag is set on them and the adjustments are generated manually. This was not done in the case of an array of array with controlled component when its subaggregates are not expanded in place but instead are replaced by temporaries, leading to double free or memory corruption. gcc/ada/ * exp_aggr.adb (Initialize_Array_Component): Remove obsolete code. (Expand_Array_Aggregate): In the case where a temporary is created and the parent is an assignment statement with No_Ctrl_Actions set, set Is_Ignored_Transient on the temporary.
2023-05-26ada: Fix internal error on Big_Integer conversion ghost instanceEric Botcazou1-12/+12
The problem is that the ghost mode of the instance is used to analyze the parent of the generic body, whose own ghost mode has nothing to do with it. gcc/ada/ * sem_ch12.adb (Instantiate_Package_Body): Set the ghost mode to that of the instance only after loading the generic's parent. (Instantiate_Subprogram_Body): Likewise.
2023-05-26ada: Simplify expansion of set membershipPiotr Trojanek1-10/+7
Code cleanup; semantics is unaffected. gcc/ada/ * exp_ch4.adb (Expand_Set_Membership): Simplify by using Evolve_Or_Else.
2023-05-26ada: Cleanup expansion of membership operators into attribute ValidPiotr Trojanek1-22/+4
Code cleanup; semantics is unaffected. gcc/ada/ * exp_ch4.adb (Is_OK_Object_Reference): Replace loop with a call to Unqual_Conv; consequently, change object from variable to constant; replace an IF statement with an AND THEN expression.
2023-05-26ada: Remove leftover code for counting protected entriesPiotr Trojanek1-20/+5
We used to count protected entries by iterating over component declarations, but then switched to iterating over entities and left some code that is no longer needed. Cleanup; semantics is unaffected (maybe except fixing an assertion failure in developer builds when there is pragma among entry family declarations). gcc/ada/ * exp_ch9.adb (Build_Entry_Count_Expression): Remove loop over component declaration; consequently remove a parameter that is no longer used; adapt callers. (Make_Task_Create_Call): Refine type of a local variable.
2023-05-26ada: Fix detection of non-static expressions in records with pragmasPiotr Trojanek1-6/+5
When iterating over record components we must ignore pragmas. Minor bug, as pragmas within record components do not appear often. gcc/ada/ * sem_cat.adb (Check_Non_Static_Default_Expr): Detect components inside loop, not in the loop condition itself.
2023-05-26ada: Reorder components in Ada.Containers.Bounded_Doubly_Linked_ListsEric Botcazou1-1/+1
gcc/ada/ * libgnat/a-cbdlli.ads (List): Move Nodes component to the end.
2023-05-26ada: Reorder components in Ada.Containers.Restricted_Doubly_Linked_ListsEric Botcazou1-1/+1
An instantiation of the package compiled with -gnatw.q yields: warning: in instantiation at a-crdlli.ads:317 [-gnatw.q] warning: record layout may cause performance issues [-gnatw.q] warning: in instantiation at a-crdlli.ads:317 [-gnatw.q] warning: component "Nodes" whose length depends on a discriminant [-gnatw.q] warning: in instantiation at a-crdlli.ads:317 [-gnatw.q] warning: comes too early and was moved down [-gnatw.q] gcc/ada/ * libgnat/a-crdlli.ads (List): Move Nodes component to the end.
2023-05-26ada: Reject thin 'Unrestricted_Access value to aliased constrained arrayEric Botcazou1-23/+51
This rejects the Unrestricted_Access attribute applied to an aliased array with a constrained nominal subtype when its type is resolved to be a thin pointer. The reason is that supporting this case would require the aliased array to contain its bounds, and this is the case only for aliased arrays whose nominal subtype is unconstrained. gcc/ada/ * sem_attr.adb (Is_Thin_Pointer_To_Unc_Array): New predicate. (Resolve_Attribute): Apply the static matching legality rule to an Unrestricted_Access attribute applied to an aliased prefix if the type is a thin pointer. Call Is_Thin_Pointer_To_Unc_Array for the aliasing legality rule as well.
2023-05-26ada: Simplify iteration over record component items with possible pragmasPiotr Trojanek1-4/+2
Code cleanup; semantics is unaffected. gcc/ada/ * sem_util.adb (Is_Null_Record_Definition): Use First_Non_Pragma and Next_Non_Pragma to ignore pragmas within component list.
2023-05-26ada: Fix handling of Global contracts inside generic subprogramsPiotr Trojanek1-1/+3
Routine Get_Argument works differently for generic units (as explained in its comment), but it failed to reliably detect such units when their kind is temporarily made non-generic (for resolving recursive calls, as explained in the comment at the end of Is_Generic_Declaration_Or_Body). With this patch the frontend will look at the decorated expression of the Global contract attached to the Global aspect; previously it was looking at the undecorated expression attached to the corresponding pragma. gcc/ada/ * sem_prag.adb (Get_Argument): Improve detection of generic units.
2023-05-26ada: Tune detection of expression functions within a declare expressionPiotr Trojanek2-3/+3
Code cleanup; semantics is unaffected. gcc/ada/ * sem_ch4.adb (Check_Action_OK): Replace low-level test with a high-level routine. * sem_ch13.adb (Is_Predicate_Static): Likewise.
2023-05-26ada: Crash on loop in dispatching conditional entry callJavier Miranda3-125/+30
gcc/ada/ * exp_ch9.adb (Expand_N_Conditional_Entry_Call): Factorize code to avoid duplicating subtrees; required to avoid problems when the copied code has implicit labels. * sem_util.ads (New_Copy_Separate_List): Removed. (New_Copy_Separate_Tree): Removed. * sem_util.adb (New_Copy_Separate_List): Removed. (New_Copy_Separate_Tree): Removed.
2023-05-26ada: Remove redundant protection against empty listsPiotr Trojanek1-122/+116
Calls to Length on No_List intentionally return 0, so explicit guards against No_List are unnecessary. Code cleanup; semantics is unaffected. gcc/ada/ * sem_ch13.adb (Check_Component_List): Local variable Compl is now a constant; a nested block is no longer needed.
2023-05-26ada: Cleanups in handling of aggregatesPiotr Trojanek5-26/+24
Assorted cleanups related to recent fixes of aggregate handling for GNATprove; semantics is unaffected. gcc/ada/ * sem_aggr.adb (Resolve_Record_Aggregate): Remove useless assignment. * sem_aux.adb (Has_Variant_Part): Remove useless guard; this routine is only called on type entities (and now will crash in other cases). * sem_ch3.adb (Create_Constrained_Components): Only assign Assoc_List when necessary; tune whitespace. (Is_Variant_Record): Refactor repeated calls to Parent. * sem_util.adb (Gather_Components): Assert that discriminant association has just one choice in component_association; refactor repeated calls to Next. * sem_util.ads (Gather_Components): Tune whitespace in comment.
2023-05-26ada: Fix iteration over component items with pragmasPiotr Trojanek2-4/+4
Component items in a record declaration might include pragmas, which must be ignored when detecting components with default expressions. More a code cleanup than a bugfix, as it only affects artificial corner cases. Found while fixing missing legality checks for variant component declarations. gcc/ada/ * sem_ch3.adb (Check_CPP_Type_Has_No_Defaults): Iterate with First_Non_Pragma and Next_Non_Pragma. * exp_dist.adb (Append_Record_Traversal): Likewise.
2023-05-26ada: Duplicate declaration of _master entityJavier Miranda3-23/+40
gcc/ada/ * exp_ch9.adb (Build_Class_Wide_Master): Remember internal blocks that have a task master entity declaration. (Build_Master_Entity): Code cleanup. * sem_util.ads (Is_Internal_Block): New subprogram. * sem_util.adb (Is_Internal_Block): New subprogram.
2023-05-26ada: Remove redundant guards from handling of record componentsPiotr Trojanek1-6/+1
Call to First on empty list is intentionally returning Empty. gcc/ada/ * sem_util.adb (Gather_Components): Remove guard for empty list of components.
2023-05-26ada: Remove Is_Descendant_Of_Address flag from Standard_AddressEric Botcazou4-13/+20
It breaks the Allow_Integer_Address special mode. Add new standard_address parameters to gigi and alphabetize others, this is necessary when addresses are not treated like integers. gcc/ada/ * back_end.adb (Call_Back_End): Add gigi_standard_address to the signature of the gigi procedure and alphabetize other parameters. Pass Standard_Address as actual parameter for it. * cstand.adb (Create_Standard): Do not set Is_Descendant_Of_Address on Standard_Address. * gcc-interface/gigi.h (gigi): Add a standard_address parameter and alphabetize others. * gcc-interface/trans.cc (gigi): Likewise. Record a builtin address type and save it as the type for Standard.Address.