diff --git a/.gitignore b/.gitignore index a274f6a..80128da 100644 --- a/.gitignore +++ b/.gitignore @@ -105,3 +105,12 @@ /gcc-13.0.1-20230421.tar.xz /gcc-13.1.1-20230426.tar.xz /gcc-13.1.1-20230511.tar.xz +/gcc-13.1.1-20230519.tar.xz +/gcc-13.1.1-20230614.tar.xz +/gcc-13.2.1-20230728.tar.xz +/gcc-13.2.1-20230906.tar.xz +/nvptx-tools-aa3404ad5a496cda5d79a50bedb1344fd63e8763.tar.xz +/gcc-13.2.1-20230918.tar.xz +/gcc-13.2.1-20231011.tar.xz +/gcc-13.2.1-20231113.tar.xz +/gcc-13.2.1-20231205.tar.xz diff --git a/203f3060dd363361b172f7295f42bb6bf5ac0b3b.patch b/203f3060dd363361b172f7295f42bb6bf5ac0b3b.patch deleted file mode 100644 index 1932582..0000000 --- a/203f3060dd363361b172f7295f42bb6bf5ac0b3b.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 203f3060dd363361b172f7295f42bb6bf5ac0b3b Mon Sep 17 00:00:00 2001 -From: Andreas Schwab -Date: Sat, 23 Apr 2022 15:48:42 +0200 -Subject: [PATCH] riscv/linux: Don't add -latomic with -pthread - -Now that we have support for inline subword atomic operations, it is no -longer necessary to link against libatomic. This also fixes testsuite -failures because the framework does not properly set up the linker flags -for finding libatomic. -The use of atomic operations is also independent of the use of libpthread. - -gcc/ - * config/riscv/linux.h (LIB_SPEC): Don't redefine. ---- - gcc/config/riscv/linux.h | 10 ---------- - 1 file changed, 10 deletions(-) - -diff --git a/gcc/config/riscv/linux.h b/gcc/config/riscv/linux.h -index b9557a75dc7..2fdfd930cf2 100644 ---- a/gcc/config/riscv/linux.h -+++ b/gcc/config/riscv/linux.h -@@ -35,16 +35,6 @@ along with GCC; see the file COPYING3. If not see - #undef MUSL_DYNAMIC_LINKER - #define MUSL_DYNAMIC_LINKER "/lib/ld-musl-riscv" XLEN_SPEC MUSL_ABI_SUFFIX ".so.1" - --/* Because RISC-V only has word-sized atomics, it requries libatomic where -- others do not. So link libatomic by default, as needed. */ --#undef LIB_SPEC --#ifdef LD_AS_NEEDED_OPTION --#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC \ -- " %{pthread:" LD_AS_NEEDED_OPTION " -latomic " LD_NO_AS_NEEDED_OPTION "}" --#else --#define LIB_SPEC GNU_USER_TARGET_LIB_SPEC " -latomic " --#endif -- - #define ICACHE_FLUSH_FUNC "__riscv_flush_icache" - - #define CPP_SPEC "%{pthread:-D_REENTRANT}" --- -2.39.1 - diff --git a/55088cf384d4c43e280ec794217e32fab64070ba.patch b/55088cf384d4c43e280ec794217e32fab64070ba.patch deleted file mode 100644 index 3babada..0000000 --- a/55088cf384d4c43e280ec794217e32fab64070ba.patch +++ /dev/null @@ -1,2068 +0,0 @@ -From 55088cf384d4c43e280ec794217e32fab64070ba Mon Sep 17 00:00:00 2001 -From: Patrick O'Neill -Date: Tue, 18 Apr 2023 14:33:13 -0700 -Subject: [PATCH] RISCV: Inline subword atomic ops - -RISC-V has no support for subword atomic operations; code currently -generates libatomic library calls. - -This patch changes the default behavior to inline subword atomic calls -(using the same logic as the existing library call). -Behavior can be specified using the -minline-atomics and --mno-inline-atomics command line flags. - -gcc/libgcc/config/riscv/atomic.c has the same logic implemented in asm. -This will need to stay for backwards compatibility and the --mno-inline-atomics flag. - -2023-05-03 Patrick O'Neill - -gcc/ChangeLog: - PR target/104338 - * config/riscv/riscv-protos.h: Add helper function stubs. - * config/riscv/riscv.cc: Add helper functions for subword masking. - * config/riscv/riscv.opt: Add command-line flags - -minline-atomics and -mno-inline-atomics. - * config/riscv/sync.md: Add masking logic and inline asm for - fetch_and_op, fetch_and_nand, CAS, and exchange ops. - * doc/invoke.texi: Add blurb regarding new command-line flags - -minline-atomics and -mno-inline-atomics. - -libgcc/ChangeLog: - PR target/104338 - * config/riscv/atomic.c: Add reference to duplicate logic. - -gcc/testsuite/ChangeLog: - PR target/104338 - * gcc.target/riscv/inline-atomics-1.c: New test. - * gcc.target/riscv/inline-atomics-2.c: New test. - * gcc.target/riscv/inline-atomics-3.c: New test. - * gcc.target/riscv/inline-atomics-4.c: New test. - * gcc.target/riscv/inline-atomics-5.c: New test. - * gcc.target/riscv/inline-atomics-6.c: New test. - * gcc.target/riscv/inline-atomics-7.c: New test. - * gcc.target/riscv/inline-atomics-8.c: New test. - -Signed-off-by: Patrick O'Neill -Signed-off-by: Palmer Dabbelt ---- - gcc/config/riscv/riscv-protos.h | 2 + - gcc/config/riscv/riscv.cc | 49 ++ - gcc/config/riscv/riscv.opt | 4 + - gcc/config/riscv/sync.md | 303 +++++++++- - gcc/doc/invoke.texi | 10 +- - .../gcc.target/riscv/inline-atomics-1.c | 18 + - .../gcc.target/riscv/inline-atomics-2.c | 9 + - .../gcc.target/riscv/inline-atomics-3.c | 569 ++++++++++++++++++ - .../gcc.target/riscv/inline-atomics-4.c | 566 +++++++++++++++++ - .../gcc.target/riscv/inline-atomics-5.c | 87 +++ - .../gcc.target/riscv/inline-atomics-6.c | 87 +++ - .../gcc.target/riscv/inline-atomics-7.c | 69 +++ - .../gcc.target/riscv/inline-atomics-8.c | 69 +++ - libgcc/config/riscv/atomic.c | 2 + - 14 files changed, 1842 insertions(+), 2 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-1.c - create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-2.c - create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-3.c - create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-4.c - create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-5.c - create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-6.c - create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-7.c - create mode 100644 gcc/testsuite/gcc.target/riscv/inline-atomics-8.c - -diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h -index 5244e8dcbf0..02b33e02020 100644 ---- a/gcc/config/riscv/riscv-protos.h -+++ b/gcc/config/riscv/riscv-protos.h -@@ -79,6 +79,8 @@ extern void riscv_reinit (void); - extern poly_uint64 riscv_regmode_natural_size (machine_mode); - extern bool riscv_v_ext_vector_mode_p (machine_mode); - extern bool riscv_shamt_matches_mask_p (int, HOST_WIDE_INT); -+extern void riscv_subword_address (rtx, rtx *, rtx *, rtx *, rtx *); -+extern void riscv_lshift_subword (machine_mode, rtx, rtx, rtx *); - - /* Routines implemented in riscv-c.cc. */ - void riscv_cpu_cpp_builtins (cpp_reader *); -diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc -index e88fa2d6337..5f44f6dc5c9 100644 ---- a/gcc/config/riscv/riscv.cc -+++ b/gcc/config/riscv/riscv.cc -@@ -7143,6 +7143,55 @@ riscv_zero_call_used_regs (HARD_REG_SET need_zeroed_hardregs) - & ~zeroed_hardregs); - } - -+/* Given memory reference MEM, expand code to compute the aligned -+ memory address, shift and mask values and store them into -+ *ALIGNED_MEM, *SHIFT, *MASK and *NOT_MASK. */ -+ -+void -+riscv_subword_address (rtx mem, rtx *aligned_mem, rtx *shift, rtx *mask, -+ rtx *not_mask) -+{ -+ /* Align the memory address to a word. */ -+ rtx addr = force_reg (Pmode, XEXP (mem, 0)); -+ -+ rtx addr_mask = gen_int_mode (-4, Pmode); -+ -+ rtx aligned_addr = gen_reg_rtx (Pmode); -+ emit_move_insn (aligned_addr, gen_rtx_AND (Pmode, addr, addr_mask)); -+ -+ *aligned_mem = change_address (mem, SImode, aligned_addr); -+ -+ /* Calculate the shift amount. */ -+ emit_move_insn (*shift, gen_rtx_AND (SImode, gen_lowpart (SImode, addr), -+ gen_int_mode (3, SImode))); -+ emit_move_insn (*shift, gen_rtx_ASHIFT (SImode, *shift, -+ gen_int_mode (3, SImode))); -+ -+ /* Calculate the mask. */ -+ int unshifted_mask = GET_MODE_MASK (GET_MODE (mem)); -+ -+ emit_move_insn (*mask, gen_int_mode (unshifted_mask, SImode)); -+ -+ emit_move_insn (*mask, gen_rtx_ASHIFT (SImode, *mask, -+ gen_lowpart (QImode, *shift))); -+ -+ emit_move_insn (*not_mask, gen_rtx_NOT (SImode, *mask)); -+} -+ -+/* Leftshift a subword within an SImode register. */ -+ -+void -+riscv_lshift_subword (machine_mode mode, rtx value, rtx shift, -+ rtx *shifted_value) -+{ -+ rtx value_reg = gen_reg_rtx (SImode); -+ emit_move_insn (value_reg, simplify_gen_subreg (SImode, value, -+ mode, 0)); -+ -+ emit_move_insn (*shifted_value, gen_rtx_ASHIFT (SImode, value_reg, -+ gen_lowpart (QImode, shift))); -+} -+ - /* Initialize the GCC target structure. */ - #undef TARGET_ASM_ALIGNED_HI_OP - #define TARGET_ASM_ALIGNED_HI_OP "\t.half\t" -diff --git a/gcc/config/riscv/riscv.opt b/gcc/config/riscv/riscv.opt -index ff1dd4ddd4f..bc5e63ab3e6 100644 ---- a/gcc/config/riscv/riscv.opt -+++ b/gcc/config/riscv/riscv.opt -@@ -254,3 +254,7 @@ Enum(isa_spec_class) String(20191213) Value(ISA_SPEC_CLASS_20191213) - misa-spec= - Target RejectNegative Joined Enum(isa_spec_class) Var(riscv_isa_spec) Init(TARGET_DEFAULT_ISA_SPEC) - Set the version of RISC-V ISA spec. -+ -+minline-atomics -+Target Var(TARGET_INLINE_SUBWORD_ATOMIC) Init(1) -+Always inline subword atomic operations. -diff --git a/gcc/config/riscv/sync.md b/gcc/config/riscv/sync.md -index c932ef87b9d..19274528262 100644 ---- a/gcc/config/riscv/sync.md -+++ b/gcc/config/riscv/sync.md -@@ -21,8 +21,11 @@ - - (define_c_enum "unspec" [ - UNSPEC_COMPARE_AND_SWAP -+ UNSPEC_COMPARE_AND_SWAP_SUBWORD - UNSPEC_SYNC_OLD_OP -+ UNSPEC_SYNC_OLD_OP_SUBWORD - UNSPEC_SYNC_EXCHANGE -+ UNSPEC_SYNC_EXCHANGE_SUBWORD - UNSPEC_ATOMIC_STORE - UNSPEC_MEMORY_BARRIER - ]) -@@ -91,6 +94,135 @@ - [(set_attr "type" "atomic") - (set (attr "length") (const_int 8))]) - -+(define_insn "subword_atomic_fetch_strong_" -+ [(set (match_operand:SI 0 "register_operand" "=&r") ;; old value at mem -+ (match_operand:SI 1 "memory_operand" "+A")) ;; mem location -+ (set (match_dup 1) -+ (unspec_volatile:SI -+ [(any_atomic:SI (match_dup 1) -+ (match_operand:SI 2 "register_operand" "rI")) ;; value for op -+ (match_operand:SI 3 "register_operand" "rI")] ;; mask -+ UNSPEC_SYNC_OLD_OP_SUBWORD)) -+ (match_operand:SI 4 "register_operand" "rI") ;; not_mask -+ (clobber (match_scratch:SI 5 "=&r")) ;; tmp_1 -+ (clobber (match_scratch:SI 6 "=&r"))] ;; tmp_2 -+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" -+ { -+ return "1:\;" -+ "lr.w.aq\t%0, %1\;" -+ "\t%5, %0, %2\;" -+ "and\t%5, %5, %3\;" -+ "and\t%6, %0, %4\;" -+ "or\t%6, %6, %5\;" -+ "sc.w.rl\t%5, %6, %1\;" -+ "bnez\t%5, 1b"; -+ } -+ [(set (attr "length") (const_int 28))]) -+ -+(define_expand "atomic_fetch_nand" -+ [(match_operand:SHORT 0 "register_operand") ;; old value at mem -+ (not:SHORT (and:SHORT (match_operand:SHORT 1 "memory_operand") ;; mem location -+ (match_operand:SHORT 2 "reg_or_0_operand"))) ;; value for op -+ (match_operand:SI 3 "const_int_operand")] ;; model -+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" -+{ -+ /* We have no QImode/HImode atomics, so form a mask, then use -+ subword_atomic_fetch_strong_nand to implement a LR/SC version of the -+ operation. */ -+ -+ /* Logic duplicated in gcc/libgcc/config/riscv/atomic.c for use when inlining -+ is disabled. */ -+ -+ rtx old = gen_reg_rtx (SImode); -+ rtx mem = operands[1]; -+ rtx value = operands[2]; -+ rtx aligned_mem = gen_reg_rtx (SImode); -+ rtx shift = gen_reg_rtx (SImode); -+ rtx mask = gen_reg_rtx (SImode); -+ rtx not_mask = gen_reg_rtx (SImode); -+ -+ riscv_subword_address (mem, &aligned_mem, &shift, &mask, ¬_mask); -+ -+ rtx shifted_value = gen_reg_rtx (SImode); -+ riscv_lshift_subword (mode, value, shift, &shifted_value); -+ -+ emit_insn (gen_subword_atomic_fetch_strong_nand (old, aligned_mem, -+ shifted_value, -+ mask, not_mask)); -+ -+ emit_move_insn (old, gen_rtx_ASHIFTRT (SImode, old, -+ gen_lowpart (QImode, shift))); -+ -+ emit_move_insn (operands[0], gen_lowpart (mode, old)); -+ -+ DONE; -+}) -+ -+(define_insn "subword_atomic_fetch_strong_nand" -+ [(set (match_operand:SI 0 "register_operand" "=&r") ;; old value at mem -+ (match_operand:SI 1 "memory_operand" "+A")) ;; mem location -+ (set (match_dup 1) -+ (unspec_volatile:SI -+ [(not:SI (and:SI (match_dup 1) -+ (match_operand:SI 2 "register_operand" "rI"))) ;; value for op -+ (match_operand:SI 3 "register_operand" "rI")] ;; mask -+ UNSPEC_SYNC_OLD_OP_SUBWORD)) -+ (match_operand:SI 4 "register_operand" "rI") ;; not_mask -+ (clobber (match_scratch:SI 5 "=&r")) ;; tmp_1 -+ (clobber (match_scratch:SI 6 "=&r"))] ;; tmp_2 -+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" -+ { -+ return "1:\;" -+ "lr.w.aq\t%0, %1\;" -+ "and\t%5, %0, %2\;" -+ "not\t%5, %5\;" -+ "and\t%5, %5, %3\;" -+ "and\t%6, %0, %4\;" -+ "or\t%6, %6, %5\;" -+ "sc.w.rl\t%5, %6, %1\;" -+ "bnez\t%5, 1b"; -+ } -+ [(set (attr "length") (const_int 32))]) -+ -+(define_expand "atomic_fetch_" -+ [(match_operand:SHORT 0 "register_operand") ;; old value at mem -+ (any_atomic:SHORT (match_operand:SHORT 1 "memory_operand") ;; mem location -+ (match_operand:SHORT 2 "reg_or_0_operand")) ;; value for op -+ (match_operand:SI 3 "const_int_operand")] ;; model -+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" -+{ -+ /* We have no QImode/HImode atomics, so form a mask, then use -+ subword_atomic_fetch_strong_ to implement a LR/SC version of the -+ operation. */ -+ -+ /* Logic duplicated in gcc/libgcc/config/riscv/atomic.c for use when inlining -+ is disabled. */ -+ -+ rtx old = gen_reg_rtx (SImode); -+ rtx mem = operands[1]; -+ rtx value = operands[2]; -+ rtx aligned_mem = gen_reg_rtx (SImode); -+ rtx shift = gen_reg_rtx (SImode); -+ rtx mask = gen_reg_rtx (SImode); -+ rtx not_mask = gen_reg_rtx (SImode); -+ -+ riscv_subword_address (mem, &aligned_mem, &shift, &mask, ¬_mask); -+ -+ rtx shifted_value = gen_reg_rtx (SImode); -+ riscv_lshift_subword (mode, value, shift, &shifted_value); -+ -+ emit_insn (gen_subword_atomic_fetch_strong_ (old, aligned_mem, -+ shifted_value, -+ mask, not_mask)); -+ -+ emit_move_insn (old, gen_rtx_ASHIFTRT (SImode, old, -+ gen_lowpart (QImode, shift))); -+ -+ emit_move_insn (operands[0], gen_lowpart (mode, old)); -+ -+ DONE; -+}) -+ - (define_insn "atomic_exchange" - [(set (match_operand:GPR 0 "register_operand" "=&r") - (unspec_volatile:GPR -@@ -104,6 +236,56 @@ - [(set_attr "type" "atomic") - (set (attr "length") (const_int 8))]) - -+(define_expand "atomic_exchange" -+ [(match_operand:SHORT 0 "register_operand") ;; old value at mem -+ (match_operand:SHORT 1 "memory_operand") ;; mem location -+ (match_operand:SHORT 2 "register_operand") ;; value -+ (match_operand:SI 3 "const_int_operand")] ;; model -+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" -+{ -+ rtx old = gen_reg_rtx (SImode); -+ rtx mem = operands[1]; -+ rtx value = operands[2]; -+ rtx aligned_mem = gen_reg_rtx (SImode); -+ rtx shift = gen_reg_rtx (SImode); -+ rtx mask = gen_reg_rtx (SImode); -+ rtx not_mask = gen_reg_rtx (SImode); -+ -+ riscv_subword_address (mem, &aligned_mem, &shift, &mask, ¬_mask); -+ -+ rtx shifted_value = gen_reg_rtx (SImode); -+ riscv_lshift_subword (mode, value, shift, &shifted_value); -+ -+ emit_insn (gen_subword_atomic_exchange_strong (old, aligned_mem, -+ shifted_value, not_mask)); -+ -+ emit_move_insn (old, gen_rtx_ASHIFTRT (SImode, old, -+ gen_lowpart (QImode, shift))); -+ -+ emit_move_insn (operands[0], gen_lowpart (mode, old)); -+ DONE; -+}) -+ -+(define_insn "subword_atomic_exchange_strong" -+ [(set (match_operand:SI 0 "register_operand" "=&r") ;; old value at mem -+ (match_operand:SI 1 "memory_operand" "+A")) ;; mem location -+ (set (match_dup 1) -+ (unspec_volatile:SI -+ [(match_operand:SI 2 "reg_or_0_operand" "rI") ;; value -+ (match_operand:SI 3 "reg_or_0_operand" "rI")] ;; not_mask -+ UNSPEC_SYNC_EXCHANGE_SUBWORD)) -+ (clobber (match_scratch:SI 4 "=&r"))] ;; tmp_1 -+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" -+ { -+ return "1:\;" -+ "lr.w.aq\t%0, %1\;" -+ "and\t%4, %0, %3\;" -+ "or\t%4, %4, %2\;" -+ "sc.w.rl\t%4, %4, %1\;" -+ "bnez\t%4, 1b"; -+ } -+ [(set (attr "length") (const_int 20))]) -+ - (define_insn "atomic_cas_value_strong" - [(set (match_operand:GPR 0 "register_operand" "=&r") - (match_operand:GPR 1 "memory_operand" "+A")) -@@ -153,6 +335,125 @@ - DONE; - }) - -+(define_expand "atomic_compare_and_swap" -+ [(match_operand:SI 0 "register_operand") ;; bool output -+ (match_operand:SHORT 1 "register_operand") ;; val output -+ (match_operand:SHORT 2 "memory_operand") ;; memory -+ (match_operand:SHORT 3 "reg_or_0_operand") ;; expected value -+ (match_operand:SHORT 4 "reg_or_0_operand") ;; desired value -+ (match_operand:SI 5 "const_int_operand") ;; is_weak -+ (match_operand:SI 6 "const_int_operand") ;; mod_s -+ (match_operand:SI 7 "const_int_operand")] ;; mod_f -+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" -+{ -+ emit_insn (gen_atomic_cas_value_strong (operands[1], operands[2], -+ operands[3], operands[4], -+ operands[6], operands[7])); -+ -+ rtx val = gen_reg_rtx (SImode); -+ if (operands[1] != const0_rtx) -+ emit_move_insn (val, gen_rtx_SIGN_EXTEND (SImode, operands[1])); -+ else -+ emit_move_insn (val, const0_rtx); -+ -+ rtx exp = gen_reg_rtx (SImode); -+ if (operands[3] != const0_rtx) -+ emit_move_insn (exp, gen_rtx_SIGN_EXTEND (SImode, operands[3])); -+ else -+ emit_move_insn (exp, const0_rtx); -+ -+ rtx compare = val; -+ if (exp != const0_rtx) -+ { -+ rtx difference = gen_rtx_MINUS (SImode, val, exp); -+ compare = gen_reg_rtx (SImode); -+ emit_move_insn (compare, difference); -+ } -+ -+ if (word_mode != SImode) -+ { -+ rtx reg = gen_reg_rtx (word_mode); -+ emit_move_insn (reg, gen_rtx_SIGN_EXTEND (word_mode, compare)); -+ compare = reg; -+ } -+ -+ emit_move_insn (operands[0], gen_rtx_EQ (SImode, compare, const0_rtx)); -+ DONE; -+}) -+ -+(define_expand "atomic_cas_value_strong" -+ [(match_operand:SHORT 0 "register_operand") ;; val output -+ (match_operand:SHORT 1 "memory_operand") ;; memory -+ (match_operand:SHORT 2 "reg_or_0_operand") ;; expected value -+ (match_operand:SHORT 3 "reg_or_0_operand") ;; desired value -+ (match_operand:SI 4 "const_int_operand") ;; mod_s -+ (match_operand:SI 5 "const_int_operand") ;; mod_f -+ (match_scratch:SHORT 6)] -+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" -+{ -+ /* We have no QImode/HImode atomics, so form a mask, then use -+ subword_atomic_cas_strong to implement a LR/SC version of the -+ operation. */ -+ -+ /* Logic duplicated in gcc/libgcc/config/riscv/atomic.c for use when inlining -+ is disabled. */ -+ -+ rtx old = gen_reg_rtx (SImode); -+ rtx mem = operands[1]; -+ rtx aligned_mem = gen_reg_rtx (SImode); -+ rtx shift = gen_reg_rtx (SImode); -+ rtx mask = gen_reg_rtx (SImode); -+ rtx not_mask = gen_reg_rtx (SImode); -+ -+ riscv_subword_address (mem, &aligned_mem, &shift, &mask, ¬_mask); -+ -+ rtx o = operands[2]; -+ rtx n = operands[3]; -+ rtx shifted_o = gen_reg_rtx (SImode); -+ rtx shifted_n = gen_reg_rtx (SImode); -+ -+ riscv_lshift_subword (mode, o, shift, &shifted_o); -+ riscv_lshift_subword (mode, n, shift, &shifted_n); -+ -+ emit_move_insn (shifted_o, gen_rtx_AND (SImode, shifted_o, mask)); -+ emit_move_insn (shifted_n, gen_rtx_AND (SImode, shifted_n, mask)); -+ -+ emit_insn (gen_subword_atomic_cas_strong (old, aligned_mem, -+ shifted_o, shifted_n, -+ mask, not_mask)); -+ -+ emit_move_insn (old, gen_rtx_ASHIFTRT (SImode, old, -+ gen_lowpart (QImode, shift))); -+ -+ emit_move_insn (operands[0], gen_lowpart (mode, old)); -+ -+ DONE; -+}) -+ -+(define_insn "subword_atomic_cas_strong" -+ [(set (match_operand:SI 0 "register_operand" "=&r") ;; old value at mem -+ (match_operand:SI 1 "memory_operand" "+A")) ;; mem location -+ (set (match_dup 1) -+ (unspec_volatile:SI [(match_operand:SI 2 "reg_or_0_operand" "rJ") ;; expected value -+ (match_operand:SI 3 "reg_or_0_operand" "rJ")] ;; desired value -+ UNSPEC_COMPARE_AND_SWAP_SUBWORD)) -+ (match_operand:SI 4 "register_operand" "rI") ;; mask -+ (match_operand:SI 5 "register_operand" "rI") ;; not_mask -+ (clobber (match_scratch:SI 6 "=&r"))] ;; tmp_1 -+ "TARGET_ATOMIC && TARGET_INLINE_SUBWORD_ATOMIC" -+ { -+ return "1:\;" -+ "lr.w.aq\t%0, %1\;" -+ "and\t%6, %0, %4\;" -+ "bne\t%6, %z2, 1f\;" -+ "and\t%6, %0, %5\;" -+ "or\t%6, %6, %3\;" -+ "sc.w.rl\t%6, %6, %1\;" -+ "bnez\t%6, 1b\;" -+ "1:"; -+ } -+ [(set (attr "length") (const_int 28))]) -+ - (define_expand "atomic_test_and_set" - [(match_operand:QI 0 "register_operand" "") ;; bool output - (match_operand:QI 1 "memory_operand" "+A") ;; memory -@@ -160,7 +461,7 @@ - "TARGET_ATOMIC" - { - /* We have no QImode atomics, so use the address LSBs to form a mask, -- then use an aligned SImode atomic. */ -+ then use an aligned SImode atomic. */ - rtx result = operands[0]; - rtx mem = operands[1]; - rtx model = operands[2]; -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 36ed1591440..c0c3ad14515 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -1226,7 +1226,8 @@ See RS/6000 and PowerPC Options. - -mbig-endian -mlittle-endian - -mstack-protector-guard=@var{guard} -mstack-protector-guard-reg=@var{reg} - -mstack-protector-guard-offset=@var{offset} ---mcsr-check -mno-csr-check} -+-mcsr-check -mno-csr-check -+-minline-atomics -mno-inline-atomics} - - @emph{RL78 Options} - @gccoptlist{-msim -mmul=none -mmul=g13 -mmul=g14 -mallregs -@@ -29007,6 +29008,13 @@ Do or don't use smaller but slower prologue and epilogue code that uses - library function calls. The default is to use fast inline prologues and - epilogues. - -+@opindex minline-atomics -+@item -minline-atomics -+@itemx -mno-inline-atomics -+Do or don't use smaller but slower subword atomic emulation code that uses -+libatomic function calls. The default is to use fast inline subword atomics -+that do not require libatomic. -+ - @opindex mshorten-memrefs - @item -mshorten-memrefs - @itemx -mno-shorten-memrefs -diff --git a/gcc/testsuite/gcc.target/riscv/inline-atomics-1.c b/gcc/testsuite/gcc.target/riscv/inline-atomics-1.c -new file mode 100644 -index 00000000000..5c5623d9b2f ---- /dev/null -+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-1.c -@@ -0,0 +1,18 @@ -+/* { dg-do compile } */ -+/* { dg-options "-mno-inline-atomics" } */ -+/* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "fetch_and_nand" { target *-*-* } 0 } */ -+/* { dg-final { scan-assembler "\tcall\t__sync_fetch_and_add_1" } } */ -+/* { dg-final { scan-assembler "\tcall\t__sync_fetch_and_nand_1" } } */ -+/* { dg-final { scan-assembler "\tcall\t__sync_bool_compare_and_swap_1" } } */ -+ -+char foo; -+char bar; -+char baz; -+ -+int -+main () -+{ -+ __sync_fetch_and_add(&foo, 1); -+ __sync_fetch_and_nand(&bar, 1); -+ __sync_bool_compare_and_swap (&baz, 1, 2); -+} -diff --git a/gcc/testsuite/gcc.target/riscv/inline-atomics-2.c b/gcc/testsuite/gcc.target/riscv/inline-atomics-2.c -new file mode 100644 -index 00000000000..01b43908692 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-2.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile } */ -+/* Verify that subword atomics do not generate calls. */ -+/* { dg-options "-minline-atomics" } */ -+/* { dg-message "note: '__sync_fetch_and_nand' changed semantics in GCC 4.4" "fetch_and_nand" { target *-*-* } 0 } */ -+/* { dg-final { scan-assembler-not "\tcall\t__sync_fetch_and_add_1" } } */ -+/* { dg-final { scan-assembler-not "\tcall\t__sync_fetch_and_nand_1" } } */ -+/* { dg-final { scan-assembler-not "\tcall\t__sync_bool_compare_and_swap_1" } } */ -+ -+#include "inline-atomics-1.c" -\ No newline at end of file -diff --git a/gcc/testsuite/gcc.target/riscv/inline-atomics-3.c b/gcc/testsuite/gcc.target/riscv/inline-atomics-3.c -new file mode 100644 -index 00000000000..709f3734377 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-3.c -@@ -0,0 +1,569 @@ -+/* Check all char alignments. */ -+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-op-1.c */ -+/* Test __atomic routines for existence and proper execution on 1 byte -+ values with each valid memory model. */ -+/* { dg-do run } */ -+/* { dg-options "-minline-atomics -Wno-address-of-packed-member" } */ -+ -+/* Test the execution of the __atomic_*OP builtin routines for a char. */ -+ -+extern void abort(void); -+ -+char count, res; -+const char init = ~0; -+ -+struct A -+{ -+ char a; -+ char b; -+ char c; -+ char d; -+} __attribute__ ((packed)) A; -+ -+/* The fetch_op routines return the original value before the operation. */ -+ -+void -+test_fetch_add (char* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ if (__atomic_fetch_add (v, count, __ATOMIC_RELAXED) != 0) -+ abort (); -+ -+ if (__atomic_fetch_add (v, 1, __ATOMIC_CONSUME) != 1) -+ abort (); -+ -+ if (__atomic_fetch_add (v, count, __ATOMIC_ACQUIRE) != 2) -+ abort (); -+ -+ if (__atomic_fetch_add (v, 1, __ATOMIC_RELEASE) != 3) -+ abort (); -+ -+ if (__atomic_fetch_add (v, count, __ATOMIC_ACQ_REL) != 4) -+ abort (); -+ -+ if (__atomic_fetch_add (v, 1, __ATOMIC_SEQ_CST) != 5) -+ abort (); -+} -+ -+ -+void -+test_fetch_sub (char* v) -+{ -+ *v = res = 20; -+ count = 0; -+ -+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_RELAXED) != res--) -+ abort (); -+ -+ if (__atomic_fetch_sub (v, 1, __ATOMIC_CONSUME) != res--) -+ abort (); -+ -+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_ACQUIRE) != res--) -+ abort (); -+ -+ if (__atomic_fetch_sub (v, 1, __ATOMIC_RELEASE) != res--) -+ abort (); -+ -+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_ACQ_REL) != res--) -+ abort (); -+ -+ if (__atomic_fetch_sub (v, 1, __ATOMIC_SEQ_CST) != res--) -+ abort (); -+} -+ -+void -+test_fetch_and (char* v) -+{ -+ *v = init; -+ -+ if (__atomic_fetch_and (v, 0, __ATOMIC_RELAXED) != init) -+ abort (); -+ -+ if (__atomic_fetch_and (v, init, __ATOMIC_CONSUME) != 0) -+ abort (); -+ -+ if (__atomic_fetch_and (v, 0, __ATOMIC_ACQUIRE) != 0) -+ abort (); -+ -+ *v = ~*v; -+ if (__atomic_fetch_and (v, init, __ATOMIC_RELEASE) != init) -+ abort (); -+ -+ if (__atomic_fetch_and (v, 0, __ATOMIC_ACQ_REL) != init) -+ abort (); -+ -+ if (__atomic_fetch_and (v, 0, __ATOMIC_SEQ_CST) != 0) -+ abort (); -+} -+ -+void -+test_fetch_nand (char* v) -+{ -+ *v = init; -+ -+ if (__atomic_fetch_nand (v, 0, __ATOMIC_RELAXED) != init) -+ abort (); -+ -+ if (__atomic_fetch_nand (v, init, __ATOMIC_CONSUME) != init) -+ abort (); -+ -+ if (__atomic_fetch_nand (v, 0, __ATOMIC_ACQUIRE) != 0 ) -+ abort (); -+ -+ if (__atomic_fetch_nand (v, init, __ATOMIC_RELEASE) != init) -+ abort (); -+ -+ if (__atomic_fetch_nand (v, init, __ATOMIC_ACQ_REL) != 0) -+ abort (); -+ -+ if (__atomic_fetch_nand (v, 0, __ATOMIC_SEQ_CST) != init) -+ abort (); -+} -+ -+void -+test_fetch_xor (char* v) -+{ -+ *v = init; -+ count = 0; -+ -+ if (__atomic_fetch_xor (v, count, __ATOMIC_RELAXED) != init) -+ abort (); -+ -+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_CONSUME) != init) -+ abort (); -+ -+ if (__atomic_fetch_xor (v, 0, __ATOMIC_ACQUIRE) != 0) -+ abort (); -+ -+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_RELEASE) != 0) -+ abort (); -+ -+ if (__atomic_fetch_xor (v, 0, __ATOMIC_ACQ_REL) != init) -+ abort (); -+ -+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_SEQ_CST) != init) -+ abort (); -+} -+ -+void -+test_fetch_or (char* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ if (__atomic_fetch_or (v, count, __ATOMIC_RELAXED) != 0) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_fetch_or (v, 2, __ATOMIC_CONSUME) != 1) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_fetch_or (v, count, __ATOMIC_ACQUIRE) != 3) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_fetch_or (v, 8, __ATOMIC_RELEASE) != 7) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_fetch_or (v, count, __ATOMIC_ACQ_REL) != 15) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_fetch_or (v, count, __ATOMIC_SEQ_CST) != 31) -+ abort (); -+} -+ -+/* The OP_fetch routines return the new value after the operation. */ -+ -+void -+test_add_fetch (char* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ if (__atomic_add_fetch (v, count, __ATOMIC_RELAXED) != 1) -+ abort (); -+ -+ if (__atomic_add_fetch (v, 1, __ATOMIC_CONSUME) != 2) -+ abort (); -+ -+ if (__atomic_add_fetch (v, count, __ATOMIC_ACQUIRE) != 3) -+ abort (); -+ -+ if (__atomic_add_fetch (v, 1, __ATOMIC_RELEASE) != 4) -+ abort (); -+ -+ if (__atomic_add_fetch (v, count, __ATOMIC_ACQ_REL) != 5) -+ abort (); -+ -+ if (__atomic_add_fetch (v, count, __ATOMIC_SEQ_CST) != 6) -+ abort (); -+} -+ -+ -+void -+test_sub_fetch (char* v) -+{ -+ *v = res = 20; -+ count = 0; -+ -+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_RELAXED) != --res) -+ abort (); -+ -+ if (__atomic_sub_fetch (v, 1, __ATOMIC_CONSUME) != --res) -+ abort (); -+ -+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_ACQUIRE) != --res) -+ abort (); -+ -+ if (__atomic_sub_fetch (v, 1, __ATOMIC_RELEASE) != --res) -+ abort (); -+ -+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_ACQ_REL) != --res) -+ abort (); -+ -+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_SEQ_CST) != --res) -+ abort (); -+} -+ -+void -+test_and_fetch (char* v) -+{ -+ *v = init; -+ -+ if (__atomic_and_fetch (v, 0, __ATOMIC_RELAXED) != 0) -+ abort (); -+ -+ *v = init; -+ if (__atomic_and_fetch (v, init, __ATOMIC_CONSUME) != init) -+ abort (); -+ -+ if (__atomic_and_fetch (v, 0, __ATOMIC_ACQUIRE) != 0) -+ abort (); -+ -+ *v = ~*v; -+ if (__atomic_and_fetch (v, init, __ATOMIC_RELEASE) != init) -+ abort (); -+ -+ if (__atomic_and_fetch (v, 0, __ATOMIC_ACQ_REL) != 0) -+ abort (); -+ -+ *v = ~*v; -+ if (__atomic_and_fetch (v, 0, __ATOMIC_SEQ_CST) != 0) -+ abort (); -+} -+ -+void -+test_nand_fetch (char* v) -+{ -+ *v = init; -+ -+ if (__atomic_nand_fetch (v, 0, __ATOMIC_RELAXED) != init) -+ abort (); -+ -+ if (__atomic_nand_fetch (v, init, __ATOMIC_CONSUME) != 0) -+ abort (); -+ -+ if (__atomic_nand_fetch (v, 0, __ATOMIC_ACQUIRE) != init) -+ abort (); -+ -+ if (__atomic_nand_fetch (v, init, __ATOMIC_RELEASE) != 0) -+ abort (); -+ -+ if (__atomic_nand_fetch (v, init, __ATOMIC_ACQ_REL) != init) -+ abort (); -+ -+ if (__atomic_nand_fetch (v, 0, __ATOMIC_SEQ_CST) != init) -+ abort (); -+} -+ -+ -+ -+void -+test_xor_fetch (char* v) -+{ -+ *v = init; -+ count = 0; -+ -+ if (__atomic_xor_fetch (v, count, __ATOMIC_RELAXED) != init) -+ abort (); -+ -+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_CONSUME) != 0) -+ abort (); -+ -+ if (__atomic_xor_fetch (v, 0, __ATOMIC_ACQUIRE) != 0) -+ abort (); -+ -+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_RELEASE) != init) -+ abort (); -+ -+ if (__atomic_xor_fetch (v, 0, __ATOMIC_ACQ_REL) != init) -+ abort (); -+ -+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_SEQ_CST) != 0) -+ abort (); -+} -+ -+void -+test_or_fetch (char* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ if (__atomic_or_fetch (v, count, __ATOMIC_RELAXED) != 1) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_or_fetch (v, 2, __ATOMIC_CONSUME) != 3) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_or_fetch (v, count, __ATOMIC_ACQUIRE) != 7) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_or_fetch (v, 8, __ATOMIC_RELEASE) != 15) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_or_fetch (v, count, __ATOMIC_ACQ_REL) != 31) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_or_fetch (v, count, __ATOMIC_SEQ_CST) != 63) -+ abort (); -+} -+ -+ -+/* Test the OP routines with a result which isn't used. Use both variations -+ within each function. */ -+ -+void -+test_add (char* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ __atomic_add_fetch (v, count, __ATOMIC_RELAXED); -+ if (*v != 1) -+ abort (); -+ -+ __atomic_fetch_add (v, count, __ATOMIC_CONSUME); -+ if (*v != 2) -+ abort (); -+ -+ __atomic_add_fetch (v, 1 , __ATOMIC_ACQUIRE); -+ if (*v != 3) -+ abort (); -+ -+ __atomic_fetch_add (v, 1, __ATOMIC_RELEASE); -+ if (*v != 4) -+ abort (); -+ -+ __atomic_add_fetch (v, count, __ATOMIC_ACQ_REL); -+ if (*v != 5) -+ abort (); -+ -+ __atomic_fetch_add (v, count, __ATOMIC_SEQ_CST); -+ if (*v != 6) -+ abort (); -+} -+ -+ -+void -+test_sub (char* v) -+{ -+ *v = res = 20; -+ count = 0; -+ -+ __atomic_sub_fetch (v, count + 1, __ATOMIC_RELAXED); -+ if (*v != --res) -+ abort (); -+ -+ __atomic_fetch_sub (v, count + 1, __ATOMIC_CONSUME); -+ if (*v != --res) -+ abort (); -+ -+ __atomic_sub_fetch (v, 1, __ATOMIC_ACQUIRE); -+ if (*v != --res) -+ abort (); -+ -+ __atomic_fetch_sub (v, 1, __ATOMIC_RELEASE); -+ if (*v != --res) -+ abort (); -+ -+ __atomic_sub_fetch (v, count + 1, __ATOMIC_ACQ_REL); -+ if (*v != --res) -+ abort (); -+ -+ __atomic_fetch_sub (v, count + 1, __ATOMIC_SEQ_CST); -+ if (*v != --res) -+ abort (); -+} -+ -+void -+test_and (char* v) -+{ -+ *v = init; -+ -+ __atomic_and_fetch (v, 0, __ATOMIC_RELAXED); -+ if (*v != 0) -+ abort (); -+ -+ *v = init; -+ __atomic_fetch_and (v, init, __ATOMIC_CONSUME); -+ if (*v != init) -+ abort (); -+ -+ __atomic_and_fetch (v, 0, __ATOMIC_ACQUIRE); -+ if (*v != 0) -+ abort (); -+ -+ *v = ~*v; -+ __atomic_fetch_and (v, init, __ATOMIC_RELEASE); -+ if (*v != init) -+ abort (); -+ -+ __atomic_and_fetch (v, 0, __ATOMIC_ACQ_REL); -+ if (*v != 0) -+ abort (); -+ -+ *v = ~*v; -+ __atomic_fetch_and (v, 0, __ATOMIC_SEQ_CST); -+ if (*v != 0) -+ abort (); -+} -+ -+void -+test_nand (char* v) -+{ -+ *v = init; -+ -+ __atomic_fetch_nand (v, 0, __ATOMIC_RELAXED); -+ if (*v != init) -+ abort (); -+ -+ __atomic_fetch_nand (v, init, __ATOMIC_CONSUME); -+ if (*v != 0) -+ abort (); -+ -+ __atomic_nand_fetch (v, 0, __ATOMIC_ACQUIRE); -+ if (*v != init) -+ abort (); -+ -+ __atomic_nand_fetch (v, init, __ATOMIC_RELEASE); -+ if (*v != 0) -+ abort (); -+ -+ __atomic_fetch_nand (v, init, __ATOMIC_ACQ_REL); -+ if (*v != init) -+ abort (); -+ -+ __atomic_nand_fetch (v, 0, __ATOMIC_SEQ_CST); -+ if (*v != init) -+ abort (); -+} -+ -+ -+ -+void -+test_xor (char* v) -+{ -+ *v = init; -+ count = 0; -+ -+ __atomic_xor_fetch (v, count, __ATOMIC_RELAXED); -+ if (*v != init) -+ abort (); -+ -+ __atomic_fetch_xor (v, ~count, __ATOMIC_CONSUME); -+ if (*v != 0) -+ abort (); -+ -+ __atomic_xor_fetch (v, 0, __ATOMIC_ACQUIRE); -+ if (*v != 0) -+ abort (); -+ -+ __atomic_fetch_xor (v, ~count, __ATOMIC_RELEASE); -+ if (*v != init) -+ abort (); -+ -+ __atomic_fetch_xor (v, 0, __ATOMIC_ACQ_REL); -+ if (*v != init) -+ abort (); -+ -+ __atomic_xor_fetch (v, ~count, __ATOMIC_SEQ_CST); -+ if (*v != 0) -+ abort (); -+} -+ -+void -+test_or (char* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ __atomic_or_fetch (v, count, __ATOMIC_RELAXED); -+ if (*v != 1) -+ abort (); -+ -+ count *= 2; -+ __atomic_fetch_or (v, count, __ATOMIC_CONSUME); -+ if (*v != 3) -+ abort (); -+ -+ count *= 2; -+ __atomic_or_fetch (v, 4, __ATOMIC_ACQUIRE); -+ if (*v != 7) -+ abort (); -+ -+ count *= 2; -+ __atomic_fetch_or (v, 8, __ATOMIC_RELEASE); -+ if (*v != 15) -+ abort (); -+ -+ count *= 2; -+ __atomic_or_fetch (v, count, __ATOMIC_ACQ_REL); -+ if (*v != 31) -+ abort (); -+ -+ count *= 2; -+ __atomic_fetch_or (v, count, __ATOMIC_SEQ_CST); -+ if (*v != 63) -+ abort (); -+} -+ -+int -+main () -+{ -+ char* V[] = {&A.a, &A.b, &A.c, &A.d}; -+ -+ for (int i = 0; i < 4; i++) { -+ test_fetch_add (V[i]); -+ test_fetch_sub (V[i]); -+ test_fetch_and (V[i]); -+ test_fetch_nand (V[i]); -+ test_fetch_xor (V[i]); -+ test_fetch_or (V[i]); -+ -+ test_add_fetch (V[i]); -+ test_sub_fetch (V[i]); -+ test_and_fetch (V[i]); -+ test_nand_fetch (V[i]); -+ test_xor_fetch (V[i]); -+ test_or_fetch (V[i]); -+ -+ test_add (V[i]); -+ test_sub (V[i]); -+ test_and (V[i]); -+ test_nand (V[i]); -+ test_xor (V[i]); -+ test_or (V[i]); -+ } -+ -+ return 0; -+} -diff --git a/gcc/testsuite/gcc.target/riscv/inline-atomics-4.c b/gcc/testsuite/gcc.target/riscv/inline-atomics-4.c -new file mode 100644 -index 00000000000..eecfaae5cc6 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-4.c -@@ -0,0 +1,566 @@ -+/* Check all short alignments. */ -+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-op-2.c */ -+/* Test __atomic routines for existence and proper execution on 2 byte -+ values with each valid memory model. */ -+/* { dg-do run } */ -+/* { dg-options "-minline-atomics -Wno-address-of-packed-member" } */ -+ -+/* Test the execution of the __atomic_*OP builtin routines for a short. */ -+ -+extern void abort(void); -+ -+short count, res; -+const short init = ~0; -+ -+struct A -+{ -+ short a; -+ short b; -+} __attribute__ ((packed)) A; -+ -+/* The fetch_op routines return the original value before the operation. */ -+ -+void -+test_fetch_add (short* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ if (__atomic_fetch_add (v, count, __ATOMIC_RELAXED) != 0) -+ abort (); -+ -+ if (__atomic_fetch_add (v, 1, __ATOMIC_CONSUME) != 1) -+ abort (); -+ -+ if (__atomic_fetch_add (v, count, __ATOMIC_ACQUIRE) != 2) -+ abort (); -+ -+ if (__atomic_fetch_add (v, 1, __ATOMIC_RELEASE) != 3) -+ abort (); -+ -+ if (__atomic_fetch_add (v, count, __ATOMIC_ACQ_REL) != 4) -+ abort (); -+ -+ if (__atomic_fetch_add (v, 1, __ATOMIC_SEQ_CST) != 5) -+ abort (); -+} -+ -+ -+void -+test_fetch_sub (short* v) -+{ -+ *v = res = 20; -+ count = 0; -+ -+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_RELAXED) != res--) -+ abort (); -+ -+ if (__atomic_fetch_sub (v, 1, __ATOMIC_CONSUME) != res--) -+ abort (); -+ -+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_ACQUIRE) != res--) -+ abort (); -+ -+ if (__atomic_fetch_sub (v, 1, __ATOMIC_RELEASE) != res--) -+ abort (); -+ -+ if (__atomic_fetch_sub (v, count + 1, __ATOMIC_ACQ_REL) != res--) -+ abort (); -+ -+ if (__atomic_fetch_sub (v, 1, __ATOMIC_SEQ_CST) != res--) -+ abort (); -+} -+ -+void -+test_fetch_and (short* v) -+{ -+ *v = init; -+ -+ if (__atomic_fetch_and (v, 0, __ATOMIC_RELAXED) != init) -+ abort (); -+ -+ if (__atomic_fetch_and (v, init, __ATOMIC_CONSUME) != 0) -+ abort (); -+ -+ if (__atomic_fetch_and (v, 0, __ATOMIC_ACQUIRE) != 0) -+ abort (); -+ -+ *v = ~*v; -+ if (__atomic_fetch_and (v, init, __ATOMIC_RELEASE) != init) -+ abort (); -+ -+ if (__atomic_fetch_and (v, 0, __ATOMIC_ACQ_REL) != init) -+ abort (); -+ -+ if (__atomic_fetch_and (v, 0, __ATOMIC_SEQ_CST) != 0) -+ abort (); -+} -+ -+void -+test_fetch_nand (short* v) -+{ -+ *v = init; -+ -+ if (__atomic_fetch_nand (v, 0, __ATOMIC_RELAXED) != init) -+ abort (); -+ -+ if (__atomic_fetch_nand (v, init, __ATOMIC_CONSUME) != init) -+ abort (); -+ -+ if (__atomic_fetch_nand (v, 0, __ATOMIC_ACQUIRE) != 0 ) -+ abort (); -+ -+ if (__atomic_fetch_nand (v, init, __ATOMIC_RELEASE) != init) -+ abort (); -+ -+ if (__atomic_fetch_nand (v, init, __ATOMIC_ACQ_REL) != 0) -+ abort (); -+ -+ if (__atomic_fetch_nand (v, 0, __ATOMIC_SEQ_CST) != init) -+ abort (); -+} -+ -+void -+test_fetch_xor (short* v) -+{ -+ *v = init; -+ count = 0; -+ -+ if (__atomic_fetch_xor (v, count, __ATOMIC_RELAXED) != init) -+ abort (); -+ -+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_CONSUME) != init) -+ abort (); -+ -+ if (__atomic_fetch_xor (v, 0, __ATOMIC_ACQUIRE) != 0) -+ abort (); -+ -+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_RELEASE) != 0) -+ abort (); -+ -+ if (__atomic_fetch_xor (v, 0, __ATOMIC_ACQ_REL) != init) -+ abort (); -+ -+ if (__atomic_fetch_xor (v, ~count, __ATOMIC_SEQ_CST) != init) -+ abort (); -+} -+ -+void -+test_fetch_or (short* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ if (__atomic_fetch_or (v, count, __ATOMIC_RELAXED) != 0) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_fetch_or (v, 2, __ATOMIC_CONSUME) != 1) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_fetch_or (v, count, __ATOMIC_ACQUIRE) != 3) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_fetch_or (v, 8, __ATOMIC_RELEASE) != 7) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_fetch_or (v, count, __ATOMIC_ACQ_REL) != 15) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_fetch_or (v, count, __ATOMIC_SEQ_CST) != 31) -+ abort (); -+} -+ -+/* The OP_fetch routines return the new value after the operation. */ -+ -+void -+test_add_fetch (short* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ if (__atomic_add_fetch (v, count, __ATOMIC_RELAXED) != 1) -+ abort (); -+ -+ if (__atomic_add_fetch (v, 1, __ATOMIC_CONSUME) != 2) -+ abort (); -+ -+ if (__atomic_add_fetch (v, count, __ATOMIC_ACQUIRE) != 3) -+ abort (); -+ -+ if (__atomic_add_fetch (v, 1, __ATOMIC_RELEASE) != 4) -+ abort (); -+ -+ if (__atomic_add_fetch (v, count, __ATOMIC_ACQ_REL) != 5) -+ abort (); -+ -+ if (__atomic_add_fetch (v, count, __ATOMIC_SEQ_CST) != 6) -+ abort (); -+} -+ -+ -+void -+test_sub_fetch (short* v) -+{ -+ *v = res = 20; -+ count = 0; -+ -+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_RELAXED) != --res) -+ abort (); -+ -+ if (__atomic_sub_fetch (v, 1, __ATOMIC_CONSUME) != --res) -+ abort (); -+ -+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_ACQUIRE) != --res) -+ abort (); -+ -+ if (__atomic_sub_fetch (v, 1, __ATOMIC_RELEASE) != --res) -+ abort (); -+ -+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_ACQ_REL) != --res) -+ abort (); -+ -+ if (__atomic_sub_fetch (v, count + 1, __ATOMIC_SEQ_CST) != --res) -+ abort (); -+} -+ -+void -+test_and_fetch (short* v) -+{ -+ *v = init; -+ -+ if (__atomic_and_fetch (v, 0, __ATOMIC_RELAXED) != 0) -+ abort (); -+ -+ *v = init; -+ if (__atomic_and_fetch (v, init, __ATOMIC_CONSUME) != init) -+ abort (); -+ -+ if (__atomic_and_fetch (v, 0, __ATOMIC_ACQUIRE) != 0) -+ abort (); -+ -+ *v = ~*v; -+ if (__atomic_and_fetch (v, init, __ATOMIC_RELEASE) != init) -+ abort (); -+ -+ if (__atomic_and_fetch (v, 0, __ATOMIC_ACQ_REL) != 0) -+ abort (); -+ -+ *v = ~*v; -+ if (__atomic_and_fetch (v, 0, __ATOMIC_SEQ_CST) != 0) -+ abort (); -+} -+ -+void -+test_nand_fetch (short* v) -+{ -+ *v = init; -+ -+ if (__atomic_nand_fetch (v, 0, __ATOMIC_RELAXED) != init) -+ abort (); -+ -+ if (__atomic_nand_fetch (v, init, __ATOMIC_CONSUME) != 0) -+ abort (); -+ -+ if (__atomic_nand_fetch (v, 0, __ATOMIC_ACQUIRE) != init) -+ abort (); -+ -+ if (__atomic_nand_fetch (v, init, __ATOMIC_RELEASE) != 0) -+ abort (); -+ -+ if (__atomic_nand_fetch (v, init, __ATOMIC_ACQ_REL) != init) -+ abort (); -+ -+ if (__atomic_nand_fetch (v, 0, __ATOMIC_SEQ_CST) != init) -+ abort (); -+} -+ -+ -+ -+void -+test_xor_fetch (short* v) -+{ -+ *v = init; -+ count = 0; -+ -+ if (__atomic_xor_fetch (v, count, __ATOMIC_RELAXED) != init) -+ abort (); -+ -+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_CONSUME) != 0) -+ abort (); -+ -+ if (__atomic_xor_fetch (v, 0, __ATOMIC_ACQUIRE) != 0) -+ abort (); -+ -+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_RELEASE) != init) -+ abort (); -+ -+ if (__atomic_xor_fetch (v, 0, __ATOMIC_ACQ_REL) != init) -+ abort (); -+ -+ if (__atomic_xor_fetch (v, ~count, __ATOMIC_SEQ_CST) != 0) -+ abort (); -+} -+ -+void -+test_or_fetch (short* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ if (__atomic_or_fetch (v, count, __ATOMIC_RELAXED) != 1) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_or_fetch (v, 2, __ATOMIC_CONSUME) != 3) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_or_fetch (v, count, __ATOMIC_ACQUIRE) != 7) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_or_fetch (v, 8, __ATOMIC_RELEASE) != 15) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_or_fetch (v, count, __ATOMIC_ACQ_REL) != 31) -+ abort (); -+ -+ count *= 2; -+ if (__atomic_or_fetch (v, count, __ATOMIC_SEQ_CST) != 63) -+ abort (); -+} -+ -+ -+/* Test the OP routines with a result which isn't used. Use both variations -+ within each function. */ -+ -+void -+test_add (short* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ __atomic_add_fetch (v, count, __ATOMIC_RELAXED); -+ if (*v != 1) -+ abort (); -+ -+ __atomic_fetch_add (v, count, __ATOMIC_CONSUME); -+ if (*v != 2) -+ abort (); -+ -+ __atomic_add_fetch (v, 1 , __ATOMIC_ACQUIRE); -+ if (*v != 3) -+ abort (); -+ -+ __atomic_fetch_add (v, 1, __ATOMIC_RELEASE); -+ if (*v != 4) -+ abort (); -+ -+ __atomic_add_fetch (v, count, __ATOMIC_ACQ_REL); -+ if (*v != 5) -+ abort (); -+ -+ __atomic_fetch_add (v, count, __ATOMIC_SEQ_CST); -+ if (*v != 6) -+ abort (); -+} -+ -+ -+void -+test_sub (short* v) -+{ -+ *v = res = 20; -+ count = 0; -+ -+ __atomic_sub_fetch (v, count + 1, __ATOMIC_RELAXED); -+ if (*v != --res) -+ abort (); -+ -+ __atomic_fetch_sub (v, count + 1, __ATOMIC_CONSUME); -+ if (*v != --res) -+ abort (); -+ -+ __atomic_sub_fetch (v, 1, __ATOMIC_ACQUIRE); -+ if (*v != --res) -+ abort (); -+ -+ __atomic_fetch_sub (v, 1, __ATOMIC_RELEASE); -+ if (*v != --res) -+ abort (); -+ -+ __atomic_sub_fetch (v, count + 1, __ATOMIC_ACQ_REL); -+ if (*v != --res) -+ abort (); -+ -+ __atomic_fetch_sub (v, count + 1, __ATOMIC_SEQ_CST); -+ if (*v != --res) -+ abort (); -+} -+ -+void -+test_and (short* v) -+{ -+ *v = init; -+ -+ __atomic_and_fetch (v, 0, __ATOMIC_RELAXED); -+ if (*v != 0) -+ abort (); -+ -+ *v = init; -+ __atomic_fetch_and (v, init, __ATOMIC_CONSUME); -+ if (*v != init) -+ abort (); -+ -+ __atomic_and_fetch (v, 0, __ATOMIC_ACQUIRE); -+ if (*v != 0) -+ abort (); -+ -+ *v = ~*v; -+ __atomic_fetch_and (v, init, __ATOMIC_RELEASE); -+ if (*v != init) -+ abort (); -+ -+ __atomic_and_fetch (v, 0, __ATOMIC_ACQ_REL); -+ if (*v != 0) -+ abort (); -+ -+ *v = ~*v; -+ __atomic_fetch_and (v, 0, __ATOMIC_SEQ_CST); -+ if (*v != 0) -+ abort (); -+} -+ -+void -+test_nand (short* v) -+{ -+ *v = init; -+ -+ __atomic_fetch_nand (v, 0, __ATOMIC_RELAXED); -+ if (*v != init) -+ abort (); -+ -+ __atomic_fetch_nand (v, init, __ATOMIC_CONSUME); -+ if (*v != 0) -+ abort (); -+ -+ __atomic_nand_fetch (v, 0, __ATOMIC_ACQUIRE); -+ if (*v != init) -+ abort (); -+ -+ __atomic_nand_fetch (v, init, __ATOMIC_RELEASE); -+ if (*v != 0) -+ abort (); -+ -+ __atomic_fetch_nand (v, init, __ATOMIC_ACQ_REL); -+ if (*v != init) -+ abort (); -+ -+ __atomic_nand_fetch (v, 0, __ATOMIC_SEQ_CST); -+ if (*v != init) -+ abort (); -+} -+ -+ -+ -+void -+test_xor (short* v) -+{ -+ *v = init; -+ count = 0; -+ -+ __atomic_xor_fetch (v, count, __ATOMIC_RELAXED); -+ if (*v != init) -+ abort (); -+ -+ __atomic_fetch_xor (v, ~count, __ATOMIC_CONSUME); -+ if (*v != 0) -+ abort (); -+ -+ __atomic_xor_fetch (v, 0, __ATOMIC_ACQUIRE); -+ if (*v != 0) -+ abort (); -+ -+ __atomic_fetch_xor (v, ~count, __ATOMIC_RELEASE); -+ if (*v != init) -+ abort (); -+ -+ __atomic_fetch_xor (v, 0, __ATOMIC_ACQ_REL); -+ if (*v != init) -+ abort (); -+ -+ __atomic_xor_fetch (v, ~count, __ATOMIC_SEQ_CST); -+ if (*v != 0) -+ abort (); -+} -+ -+void -+test_or (short* v) -+{ -+ *v = 0; -+ count = 1; -+ -+ __atomic_or_fetch (v, count, __ATOMIC_RELAXED); -+ if (*v != 1) -+ abort (); -+ -+ count *= 2; -+ __atomic_fetch_or (v, count, __ATOMIC_CONSUME); -+ if (*v != 3) -+ abort (); -+ -+ count *= 2; -+ __atomic_or_fetch (v, 4, __ATOMIC_ACQUIRE); -+ if (*v != 7) -+ abort (); -+ -+ count *= 2; -+ __atomic_fetch_or (v, 8, __ATOMIC_RELEASE); -+ if (*v != 15) -+ abort (); -+ -+ count *= 2; -+ __atomic_or_fetch (v, count, __ATOMIC_ACQ_REL); -+ if (*v != 31) -+ abort (); -+ -+ count *= 2; -+ __atomic_fetch_or (v, count, __ATOMIC_SEQ_CST); -+ if (*v != 63) -+ abort (); -+} -+ -+int -+main () { -+ short* V[] = {&A.a, &A.b}; -+ -+ for (int i = 0; i < 2; i++) { -+ test_fetch_add (V[i]); -+ test_fetch_sub (V[i]); -+ test_fetch_and (V[i]); -+ test_fetch_nand (V[i]); -+ test_fetch_xor (V[i]); -+ test_fetch_or (V[i]); -+ -+ test_add_fetch (V[i]); -+ test_sub_fetch (V[i]); -+ test_and_fetch (V[i]); -+ test_nand_fetch (V[i]); -+ test_xor_fetch (V[i]); -+ test_or_fetch (V[i]); -+ -+ test_add (V[i]); -+ test_sub (V[i]); -+ test_and (V[i]); -+ test_nand (V[i]); -+ test_xor (V[i]); -+ test_or (V[i]); -+ } -+ -+ return 0; -+} -diff --git a/gcc/testsuite/gcc.target/riscv/inline-atomics-5.c b/gcc/testsuite/gcc.target/riscv/inline-atomics-5.c -new file mode 100644 -index 00000000000..52093894a79 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-5.c -@@ -0,0 +1,87 @@ -+/* Test __atomic routines for existence and proper execution on 1 byte -+ values with each valid memory model. */ -+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-compare-exchange-1.c */ -+/* { dg-do run } */ -+/* { dg-options "-minline-atomics" } */ -+ -+/* Test the execution of the __atomic_compare_exchange_n builtin for a char. */ -+ -+extern void abort(void); -+ -+char v = 0; -+char expected = 0; -+char max = ~0; -+char desired = ~0; -+char zero = 0; -+ -+#define STRONG 0 -+#define WEAK 1 -+ -+int -+main () -+{ -+ -+ if (!__atomic_compare_exchange_n (&v, &expected, max, STRONG , __ATOMIC_RELAXED, __ATOMIC_RELAXED)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ -+ if (__atomic_compare_exchange_n (&v, &expected, 0, STRONG , __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) -+ abort (); -+ if (expected != max) -+ abort (); -+ -+ if (!__atomic_compare_exchange_n (&v, &expected, 0, STRONG , __ATOMIC_RELEASE, __ATOMIC_ACQUIRE)) -+ abort (); -+ if (expected != max) -+ abort (); -+ if (v != 0) -+ abort (); -+ -+ if (__atomic_compare_exchange_n (&v, &expected, desired, WEAK, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ -+ if (!__atomic_compare_exchange_n (&v, &expected, desired, STRONG , __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ if (v != max) -+ abort (); -+ -+ /* Now test the generic version. */ -+ -+ v = 0; -+ -+ if (!__atomic_compare_exchange (&v, &expected, &max, STRONG, __ATOMIC_RELAXED, __ATOMIC_RELAXED)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ -+ if (__atomic_compare_exchange (&v, &expected, &zero, STRONG , __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) -+ abort (); -+ if (expected != max) -+ abort (); -+ -+ if (!__atomic_compare_exchange (&v, &expected, &zero, STRONG , __ATOMIC_RELEASE, __ATOMIC_ACQUIRE)) -+ abort (); -+ if (expected != max) -+ abort (); -+ if (v != 0) -+ abort (); -+ -+ if (__atomic_compare_exchange (&v, &expected, &desired, WEAK, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ -+ if (!__atomic_compare_exchange (&v, &expected, &desired, STRONG , __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ if (v != max) -+ abort (); -+ -+ return 0; -+} -diff --git a/gcc/testsuite/gcc.target/riscv/inline-atomics-6.c b/gcc/testsuite/gcc.target/riscv/inline-atomics-6.c -new file mode 100644 -index 00000000000..8fee8c44811 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-6.c -@@ -0,0 +1,87 @@ -+/* Test __atomic routines for existence and proper execution on 2 byte -+ values with each valid memory model. */ -+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-compare-exchange-2.c */ -+/* { dg-do run } */ -+/* { dg-options "-minline-atomics" } */ -+ -+/* Test the execution of the __atomic_compare_exchange_n builtin for a short. */ -+ -+extern void abort(void); -+ -+short v = 0; -+short expected = 0; -+short max = ~0; -+short desired = ~0; -+short zero = 0; -+ -+#define STRONG 0 -+#define WEAK 1 -+ -+int -+main () -+{ -+ -+ if (!__atomic_compare_exchange_n (&v, &expected, max, STRONG , __ATOMIC_RELAXED, __ATOMIC_RELAXED)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ -+ if (__atomic_compare_exchange_n (&v, &expected, 0, STRONG , __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) -+ abort (); -+ if (expected != max) -+ abort (); -+ -+ if (!__atomic_compare_exchange_n (&v, &expected, 0, STRONG , __ATOMIC_RELEASE, __ATOMIC_ACQUIRE)) -+ abort (); -+ if (expected != max) -+ abort (); -+ if (v != 0) -+ abort (); -+ -+ if (__atomic_compare_exchange_n (&v, &expected, desired, WEAK, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ -+ if (!__atomic_compare_exchange_n (&v, &expected, desired, STRONG , __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ if (v != max) -+ abort (); -+ -+ /* Now test the generic version. */ -+ -+ v = 0; -+ -+ if (!__atomic_compare_exchange (&v, &expected, &max, STRONG, __ATOMIC_RELAXED, __ATOMIC_RELAXED)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ -+ if (__atomic_compare_exchange (&v, &expected, &zero, STRONG , __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) -+ abort (); -+ if (expected != max) -+ abort (); -+ -+ if (!__atomic_compare_exchange (&v, &expected, &zero, STRONG , __ATOMIC_RELEASE, __ATOMIC_ACQUIRE)) -+ abort (); -+ if (expected != max) -+ abort (); -+ if (v != 0) -+ abort (); -+ -+ if (__atomic_compare_exchange (&v, &expected, &desired, WEAK, __ATOMIC_ACQ_REL, __ATOMIC_ACQUIRE)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ -+ if (!__atomic_compare_exchange (&v, &expected, &desired, STRONG , __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) -+ abort (); -+ if (expected != 0) -+ abort (); -+ if (v != max) -+ abort (); -+ -+ return 0; -+} -diff --git a/gcc/testsuite/gcc.target/riscv/inline-atomics-7.c b/gcc/testsuite/gcc.target/riscv/inline-atomics-7.c -new file mode 100644 -index 00000000000..24c344c0ce3 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-7.c -@@ -0,0 +1,69 @@ -+/* Test __atomic routines for existence and proper execution on 1 byte -+ values with each valid memory model. */ -+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-exchange-1.c */ -+/* { dg-do run } */ -+/* { dg-options "-minline-atomics" } */ -+ -+/* Test the execution of the __atomic_exchange_n builtin for a char. */ -+ -+extern void abort(void); -+ -+char v, count, ret; -+ -+int -+main () -+{ -+ v = 0; -+ count = 0; -+ -+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELAXED) != count) -+ abort (); -+ count++; -+ -+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQUIRE) != count) -+ abort (); -+ count++; -+ -+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELEASE) != count) -+ abort (); -+ count++; -+ -+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQ_REL) != count) -+ abort (); -+ count++; -+ -+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_SEQ_CST) != count) -+ abort (); -+ count++; -+ -+ /* Now test the generic version. */ -+ -+ count++; -+ -+ __atomic_exchange (&v, &count, &ret, __ATOMIC_RELAXED); -+ if (ret != count - 1 || v != count) -+ abort (); -+ count++; -+ -+ __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQUIRE); -+ if (ret != count - 1 || v != count) -+ abort (); -+ count++; -+ -+ __atomic_exchange (&v, &count, &ret, __ATOMIC_RELEASE); -+ if (ret != count - 1 || v != count) -+ abort (); -+ count++; -+ -+ __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQ_REL); -+ if (ret != count - 1 || v != count) -+ abort (); -+ count++; -+ -+ __atomic_exchange (&v, &count, &ret, __ATOMIC_SEQ_CST); -+ if (ret != count - 1 || v != count) -+ abort (); -+ count++; -+ -+ return 0; -+} -diff --git a/gcc/testsuite/gcc.target/riscv/inline-atomics-8.c b/gcc/testsuite/gcc.target/riscv/inline-atomics-8.c -new file mode 100644 -index 00000000000..edc212df04e ---- /dev/null -+++ b/gcc/testsuite/gcc.target/riscv/inline-atomics-8.c -@@ -0,0 +1,69 @@ -+/* Test __atomic routines for existence and proper execution on 2 byte -+ values with each valid memory model. */ -+/* Duplicate logic as libatomic/testsuite/libatomic.c/atomic-exchange-2.c */ -+/* { dg-do run } */ -+/* { dg-options "-minline-atomics" } */ -+ -+/* Test the execution of the __atomic_X builtin for a short. */ -+ -+extern void abort(void); -+ -+short v, count, ret; -+ -+int -+main () -+{ -+ v = 0; -+ count = 0; -+ -+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELAXED) != count) -+ abort (); -+ count++; -+ -+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQUIRE) != count) -+ abort (); -+ count++; -+ -+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELEASE) != count) -+ abort (); -+ count++; -+ -+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQ_REL) != count) -+ abort (); -+ count++; -+ -+ if (__atomic_exchange_n (&v, count + 1, __ATOMIC_SEQ_CST) != count) -+ abort (); -+ count++; -+ -+ /* Now test the generic version. */ -+ -+ count++; -+ -+ __atomic_exchange (&v, &count, &ret, __ATOMIC_RELAXED); -+ if (ret != count - 1 || v != count) -+ abort (); -+ count++; -+ -+ __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQUIRE); -+ if (ret != count - 1 || v != count) -+ abort (); -+ count++; -+ -+ __atomic_exchange (&v, &count, &ret, __ATOMIC_RELEASE); -+ if (ret != count - 1 || v != count) -+ abort (); -+ count++; -+ -+ __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQ_REL); -+ if (ret != count - 1 || v != count) -+ abort (); -+ count++; -+ -+ __atomic_exchange (&v, &count, &ret, __ATOMIC_SEQ_CST); -+ if (ret != count - 1 || v != count) -+ abort (); -+ count++; -+ -+ return 0; -+} -diff --git a/libgcc/config/riscv/atomic.c b/libgcc/config/riscv/atomic.c -index 69f53623509..573d163ea04 100644 ---- a/libgcc/config/riscv/atomic.c -+++ b/libgcc/config/riscv/atomic.c -@@ -30,6 +30,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - #define INVERT "not %[tmp1], %[tmp1]\n\t" - #define DONT_INVERT "" - -+/* Logic duplicated in gcc/gcc/config/riscv/sync.md for use when inlining is enabled */ -+ - #define GENERATE_FETCH_AND_OP(type, size, opname, insn, invert, cop) \ - type __sync_fetch_and_ ## opname ## _ ## size (type *p, type v) \ - { \ --- -2.39.1 - diff --git a/gcc.spec b/gcc.spec index 2a2ce56..664d00c 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,11 +1,11 @@ -%global DATE 20230511 -%global gitrev 55ca611b161ce96d568ea82ff0e6ea395dc76957 -%global gcc_version 13.1.1 +%global DATE 20231205 +%global gitrev f783814ad6a04ae5ef44595216596a2b75eda15b +%global gcc_version 13.2.1 %global gcc_major 13 # Note, gcc_release must be integer, if you want to add suffixes to # %%{release}, append them after %%{gcc_release} on Release: line. -%global gcc_release 2 -%global nvptx_tools_gitrev 93e00909ceb9cbbc104f0fcba56c0361ffb3ca4b +%global gcc_release 6 +%global nvptx_tools_gitrev aa3404ad5a496cda5d79a50bedb1344fd63e8763 %global newlib_cygwin_gitrev 9e09d6ed83cce4777a5950412647ccc603040409 %global _unpackaged_files_terminate_build 0 %global _performance_build 1 @@ -93,7 +93,7 @@ %else %global build_libatomic 0 %endif -%ifarch %{ix86} x86_64 %{arm} alpha ppc ppc64 ppc64le ppc64p7 s390 s390x aarch64 riscv64 +%ifarch %{ix86} x86_64 %{arm} alpha ppc ppc64 ppc64le ppc64p7 s390 s390x aarch64 %global build_libitm 1 %else %global build_libitm 0 @@ -136,7 +136,7 @@ Summary: Various compilers (C, C++, Objective-C, ...) Name: gcc Version: %{gcc_version} -Release: %{gcc_release}.2.riscv64%{?dist} +Release: %{gcc_release}%{?dist} # libgcc, libgfortran, libgomp, libstdc++ and crtstuff have # GCC Runtime Exception. License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD @@ -286,17 +286,11 @@ Patch8: gcc13-no-add-needed.patch Patch9: gcc13-Wno-format-security.patch Patch10: gcc13-rh1574936.patch Patch11: gcc13-d-shared-libphobos.patch +Patch12: gcc13-pr110792.patch Patch50: isl-rh2155127.patch Patch100: gcc13-fortran-fdec-duplicates.patch -Patch101: gcc13-fortran-flogical-as-integer.patch -Patch102: gcc13-fortran-fdec-override-kind.patch -Patch103: gcc13-fortran-fdec-non-logical-if.patch - -# RISCV (atomic) -Patch150: 55088cf384d4c43e280ec794217e32fab64070ba.patch -Patch151: 203f3060dd363361b172f7295f42bb6bf5ac0b3b.patch # On ARM EABI systems, we do want -gnueabi to be part of the # target triple. @@ -382,7 +376,11 @@ Summary: GNU Standard C++ Library Autoreq: true Requires: glibc >= 2.10.90-7 BuildRequires: tzdata >= 2017c +%if 0%{?fedora} > 38 || 0%{?rhel} > 9 +Recommends: tzdata >= 2017c +%else Requires: tzdata >= 2017c +%endif %description -n libstdc++ The libstdc++ package contains a rewritten standard compliant GCC Standard @@ -866,20 +864,13 @@ so that there cannot be any synchronization problems. %patch -P10 -p0 -b .rh1574936~ %endif %patch -P11 -p0 -b .d-shared-libphobos~ +%patch -P12 -p0 -b .pr110792~ %patch -P50 -p0 -b .rh2155127~ touch -r isl-0.24/m4/ax_prog_cxx_for_build.m4 isl-0.24/m4/ax_prog_cc_for_build.m4 %if 0%{?rhel} >= 9 %patch -P100 -p1 -b .fortran-fdec-duplicates~ -%patch -P101 -p1 -b .fortran-flogical-as-integer~ -%patch -P102 -p1 -b .fortran-fdec-override-kind~ -%patch -P103 -p1 -b .fortran-fdec-non-logical-if~ -%endif - -%ifarch riscv64 -%patch -P150 -p1 -b .riscv-inline-atomics~ -%patch -P151 -p1 -b .riscv-nolibatomic-pthread~ %endif %ifarch %{arm} @@ -997,13 +988,6 @@ ISL_FLAG_PIC=-fPIC ISL_FLAG_PIC=-fpic %endif cd isl-build - -%ifarch riscv64 -# Update config.{sub,guess} scripts for riscv64 (the original ones are too old) -cp -f -v /usr/lib/rpm/redhat/config.guess ../../isl-%{isl_version}/config.guess -cp -f -v /usr/lib/rpm/redhat/config.sub ../../isl-%{isl_version}/config.sub -%endif - sed -i 's|libisl\([^-]\)|libgcc13privateisl\1|g' \ ../../isl-%{isl_version}/Makefile.{am,in} ../../isl-%{isl_version}/configure \ @@ -2559,9 +2543,6 @@ end %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/htmxlintrin.h %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/vecintrin.h %endif -%ifarch riscv64 -%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/riscv_vector.h -%endif %if %{build_libasan} %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/sanitizer %endif @@ -3478,16 +3459,123 @@ end %endif %changelog -* Thu May 18 2023 David Abdurachmanov 13.1.1-2.2.riscv64 -- On riscv64 include these backports to fix libatomic issues: - - 55088cf384d4c43e280ec794217e32fab64070ba (from gcc13 branch) - - 203f3060dd363361b172f7295f42bb6bf5ac0b3b (from master branch) +* Tue Dec 5 2023 Jakub Jelinek 13.2.1-6 +- update from releases/gcc-13 branch + - PRs c++/33799, c++/102191, c++/111703, c++/112269, c++/112301, c++/112633, + c/112339, fortran/111880, fortran/112764, libgomp/111413, + libstdc++/112348, libstdc++/112491, libstdc++/112607, + middle-end/111497, target/53372, target/110411, target/111408, + target/111815, target/111828, target/112672, tree-optimization/111137, + tree-optimization/111465, tree-optimization/111967, + tree-optimization/112496 -* Sat May 13 2023 David Abdurachmanov 13.1.1-2.0.riscv64 -- Update config.{sub,guess} scripts for ISL -- Fix annobin plugin Fedora version check -- Package riscv_vector.h (vector intrinsics) header -- Enable libitm for riscv64 +* Mon Nov 13 2023 Jakub Jelinek 13.2.1-5 +- update from releases/gcc-13 branch + - PRs c++/89038, c/111884, d/110712, d/112270, fortran/67740, fortran/97245, + fortran/111837, fortran/112316, libbacktrace/111315, + libbacktrace/112263, libstdc++/110944, libstdc++/111172, + libstdc++/111936, libstdc++/112089, libstdc++/112314, + middle-end/111253, middle-end/111818, modula2/111756, modula2/112110, + target/101177, target/110170, target/111001, target/111366, + target/111367, target/111380, target/111935, target/112443, + tree-optimization/111397, tree-optimization/111445, + tree-optimization/111489, tree-optimization/111583, + tree-optimization/111614, tree-optimization/111622, + tree-optimization/111694, tree-optimization/111764, + tree-optimization/111820, tree-optimization/111833, + tree-optimization/111917 + - fix aarch64 RA ICE (#2241139, PR target/111528) +- fix ia32 doubleword rotates (#2238781, PR target/110792) + +* Wed Oct 11 2023 Jakub Jelinek 13.2.1-4 +- update from releases/gcc-13 branch + - PRs ada/110488, ada/111434, c++/99631, c++/111471, c++/111485, c++/111493, + c++/111512, fortran/68155, fortran/92586, fortran/111674, + libstdc++/108046, libstdc++/111050, libstdc++/111102, + libstdc++/111511, middle-end/111699, modula2/111510, target/111121, + target/111411, tree-optimization/110315, tree-optimization/110386, + tree-optimization/111331, tree-optimization/111519 + +* Mon Sep 18 2023 Jakub Jelinek 13.2.1-3 +- update from releases/gcc-13 branch + - PRs c++/111357, modula2/111330, target/96762, target/111306, + target/111335, target/111340, target/111412 + +* Fri Sep 8 2023 Jakub Jelinek 13.2.1-2 +- update from releases/gcc-13 branch + - PRs c++/92407, c++/106310, c++/106652, c++/109678, c++/109751, c++/110197, + c++/110566, c++/110927, debug/111080, fortran/99326, fortran/102109, + fortran/102112, fortran/102190, fortran/102532, fortran/108961, + fortran/109684, fortran/109948, fortran/110825, libgcc/110956, + libstdc++/110593, libstdc++/110708, libstdc++/110719, + libstdc++/110807, libstdc++/110860, libstdc++/110862, + libstdc++/110917, libstdc++/110968, libstdc++/110970, + libstdc++/110974, libstdc++/110990, middle-end/111017, modula2/108119, + modula2/108344, modula2/109779, modula2/109810, modula2/109830, + modula2/109879, modula2/109908, modula2/109952, modula2/110003, + modula2/110019, modula2/110125, modula2/110126, modula2/110161, + modula2/110174, modula2/110189, modula2/110284, modula2/110631, + modula2/110779, modula2/110865, target/89835, target/109713, + target/109725, target/110220, target/110484, target/110741, + target/111010, target/111127, tree-optimization/110280, + tree-optimization/110702, tree-optimization/110914, + tree-optimization/111015, tree-optimization/111019, + tree-optimization/111039, tree-optimization/111070, + tree-optimization/111109 + +* Mon Jul 31 2023 Patsy Griffin +- allow for the optional removal of tzdata + - see https://fedoraproject.org/wiki/Changes/AllowRemovalOfTzdata + +* Fri Jul 28 2023 Jakub Jelinek 13.2.1-1 +- update from releases/gcc-13 branch + - GCC 13.2 release + - PRs c++/109247, c++/110102, c++/110122, c++/110463, c++/110468, + c++/110524, c++/110535, c++/110595, c++/110809, d/103944, d/106977, + d/108842, d/108962, d/110113, d/110359, d/110471, d/110514, d/110516, + debug/110295, fortran/86277, fortran/95947, fortran/100297, + fortran/110288, fortran/110585, fortran/110658, ipa/109983, + ipa/110276, libgcc/109712, libgcc/110179, libstdc++/95048, + libstdc++/100285, libstdc++/104299, libstdc++/109741, + libstdc++/109921, libstdc++/110149, libstdc++/110239, + libstdc++/110432, libstdc++/110542, libstdc++/110574, + middle-end/98619, middle-end/103979, middle-end/110055, + middle-end/110420, modula2/108121, modula2/109586, modula2/109675, + modula2/109729, modula2/110246, rtl-optimization/110237, + target/101469, target/105325, target/106966, target/108743, + target/109932, target/110011, target/110100, target/110132, + target/110136, target/110206, target/110264, target/110309, + target/110406, target/110560, target/110624, testsuite/66005, + testsuite/83904, testsuite/110230, tree-optimization/109143, + tree-optimization/110228, tree-optimization/110298, + tree-optimization/110381, tree-optimization/110392, + tree-optimization/110515, tree-optimization/110556, + tree-optimization/110557, tree-optimization/110669, + tree-optimization/110731, tree-optimization/110755, + tree-optimization/110766, tree-optimization/110799, + tree-optimization/110829 + +* Wed Jul 19 2023 Fedora Release Engineering - 13.1.1-4.1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Wed Jun 14 2023 Jakub Jelinek 13.1.1-4 +- update from releases/gcc-13 branch + - PRs bootstrap/110085, c++/109871, fortran/100607, libgcc/109670, + libgcc/109685, libstdc++/108178, libstdc++/109261, libstdc++/109758, + libstdc++/109822, libstdc++/109949, libstdc++/110139, + middle-end/110200, target/82931, target/92729, target/104327, + target/105753, target/106907, target/109547, target/109650, + target/109800, target/109939, target/109954, target/110036, + target/110044, target/110088, target/110108, target/110227, + tree-optimization/109505, tree-optimization/110165, + tree-optimization/110166 + +* Fri May 19 2023 Jakub Jelinek 13.1.1-3 +- update from releases/gcc-13 branch + - PRs c++/80488, c++/83258, c++/97700, c++/103807, c++/109651, c++/109745, + c++/109761, c++/109774, c++/109868, c++/109884, fortran/109641, + fortran/109846, libstdc++/109816, libstdc++/109883, target/104338, + target/109697 * Thu May 11 2023 Jakub Jelinek 13.1.1-2 - update from releases/gcc-13 branch diff --git a/gcc13-fortran-fdec-non-logical-if.patch b/gcc13-fortran-fdec-non-logical-if.patch deleted file mode 100644 index a3a830c..0000000 --- a/gcc13-fortran-fdec-non-logical-if.patch +++ /dev/null @@ -1,378 +0,0 @@ -From cc87ddb841017bb0976b05091733609ee17d7f05 Mon Sep 17 00:00:00 2001 -From: Mark Eggleston -Date: Fri, 22 Jan 2021 13:15:17 +0000 -Subject: [PATCH 07/10] Allow non-logical expressions in IF statements - -Use -fdec-non-logical-if to enable feature. Also enabled using -fdec. ---- - gcc/fortran/lang.opt | 4 ++ - gcc/fortran/options.cc | 1 + - gcc/fortran/resolve.cc | 60 ++++++++++++++++--- - ...gical_expressions_if_statements_blocks_1.f | 25 ++++++++ - ...gical_expressions_if_statements_blocks_2.f | 25 ++++++++ - ...gical_expressions_if_statements_blocks_3.f | 25 ++++++++ - ...gical_expressions_if_statements_blocks_4.f | 45 ++++++++++++++ - ...gical_expressions_if_statements_blocks_5.f | 45 ++++++++++++++ - ...gical_expressions_if_statements_blocks_6.f | 45 ++++++++++++++ - 9 files changed, 266 insertions(+), 9 deletions(-) - create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f - -diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt -index 4a269ebb22d..d886c2f33ed 100644 ---- a/gcc/fortran/lang.opt -+++ b/gcc/fortran/lang.opt -@@ -506,6 +506,10 @@ fdec-override-kind - Fortran Var(flag_dec_override_kind) - Enable support for per variable kind specification. - -+fdec-non-logical-if -+Fortran Var(flag_dec_non_logical_if) -+Enable support for non-logical expressions in if statements. -+ - fdec-structure - Fortran Var(flag_dec_structure) - Enable support for DEC STRUCTURE/RECORD. -diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc -index edbab483b36..a946c86790a 100644 ---- a/gcc/fortran/options.cc -+++ b/gcc/fortran/options.cc -@@ -79,6 +79,7 @@ set_dec_flags (int value) - SET_BITFLAG (flag_dec_char_conversions, value, value); - SET_BITFLAG (flag_dec_duplicates, value, value); - SET_BITFLAG (flag_dec_override_kind, value, value); -+ SET_BITFLAG (flag_dec_non_logical_if, value, value); - } - - /* Finalize DEC flags. */ -diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc -index bc0df0fdb99..07dd039f3bf 100644 ---- a/gcc/fortran/resolve.cc -+++ b/gcc/fortran/resolve.cc -@@ -10789,10 +10789,31 @@ gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns) - switch (b->op) - { - case EXEC_IF: -- if (t && b->expr1 != NULL -- && (b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0)) -- gfc_error ("IF clause at %L requires a scalar LOGICAL expression", -- &b->expr1->where); -+ if (t && b->expr1 != NULL) -+ { -+ if (flag_dec_non_logical_if && b->expr1->ts.type != BT_LOGICAL) -+ { -+ gfc_expr* cast; -+ cast = gfc_ne (b->expr1, -+ gfc_get_int_expr (1, &gfc_current_locus, 0), -+ INTRINSIC_NE); -+ if (cast == NULL) -+ gfc_internal_error ("gfc_resolve_blocks(): Failed to cast " -+ "to LOGICAL in IF"); -+ b->expr1 = cast; -+ if (warn_conversion_extra) -+ { -+ gfc_warning (OPT_Wconversion_extra, "Non-LOGICAL type in" -+ " IF statement condition %L will be true if" -+ " it evaluates to nonzero", -+ &b->expr1->where); -+ } -+ } -+ -+ if ((b->expr1->ts.type != BT_LOGICAL || b->expr1->rank != 0)) -+ gfc_error ("IF clause at %L requires a scalar LOGICAL " -+ "expression", &b->expr1->where); -+ } - break; - - case EXEC_WHERE: -@@ -12093,11 +12114,32 @@ start: - break; - - case EXEC_IF: -- if (t && code->expr1 != NULL -- && (code->expr1->ts.type != BT_LOGICAL -- || code->expr1->rank != 0)) -- gfc_error ("IF clause at %L requires a scalar LOGICAL expression", -- &code->expr1->where); -+ if (t && code->expr1 != NULL) -+ { -+ if (flag_dec_non_logical_if -+ && code->expr1->ts.type != BT_LOGICAL) -+ { -+ gfc_expr* cast; -+ cast = gfc_ne (code->expr1, -+ gfc_get_int_expr (1, &gfc_current_locus, 0), -+ INTRINSIC_NE); -+ if (cast == NULL) -+ gfc_internal_error ("gfc_resolve_code(): Failed to cast " -+ "to LOGICAL in IF"); -+ code->expr1 = cast; -+ if (warn_conversion_extra) -+ { -+ gfc_warning (OPT_Wconversion_extra, "Non-LOGICAL type in" -+ " IF statement condition %L will be true if" -+ " it evaluates to nonzero", -+ &code->expr1->where); -+ } -+ } -+ -+ if (code->expr1->ts.type != BT_LOGICAL || code->expr1->rank != 0) -+ gfc_error ("IF clause at %L requires a scalar LOGICAL " -+ "expression", &code->expr1->where); -+ } - break; - - case EXEC_CALL: -diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f -new file mode 100644 -index 00000000000..0101db893ca ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_1.f -@@ -0,0 +1,25 @@ -+! { dg-do run } -+! { dg-options "-fdec -Wconversion-extra" } -+! -+! Allow logical expressions in if statements and blocks -+! -+! Contributed by Francisco Redondo Marchena -+! and Jeff Law -+! Modified by Mark Eggleston -+! -+ PROGRAM logical_exp_if_st_bl -+ INTEGER ipos/1/ -+ INTEGER ineg/0/ -+ -+ ! Test non logical variables -+ if (ineg) STOP 1 ! { dg-warning "if it evaluates to nonzero" } -+ if (0) STOP 2 ! { dg-warning "if it evaluates to nonzero" } -+ -+ ! Test non logical expressions in if statements -+ if (MOD(ipos, 1)) STOP 3 ! { dg-warning "if it evaluates to nonzero" } -+ -+ ! Test non logical expressions in if blocks -+ if (MOD(2 * ipos, 2)) then ! { dg-warning "if it evaluates to nonzero" } -+ STOP 4 -+ endif -+ END -diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f -new file mode 100644 -index 00000000000..876f4e09508 ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_2.f -@@ -0,0 +1,25 @@ -+! { dg-do run } -+! { dg-options "-fdec-non-logical-if -Wconversion-extra" } -+! -+! Allow logical expressions in if statements and blocks -+! -+! Contributed by Francisco Redondo Marchena -+! and Jeff Law -+! Modified by Mark Eggleston -+! -+ PROGRAM logical_exp_if_st_bl -+ INTEGER ipos/1/ -+ INTEGER ineg/0/ -+ -+ ! Test non logical variables -+ if (ineg) STOP 1 ! { dg-warning "if it evaluates to nonzero" } -+ if (0) STOP 2 ! { dg-warning "if it evaluates to nonzero" } -+ -+ ! Test non logical expressions in if statements -+ if (MOD(ipos, 1)) STOP 3 ! { dg-warning "if it evaluates to nonzero" } -+ -+ ! Test non logical expressions in if blocks -+ if (MOD(2 * ipos, 2)) then ! { dg-warning "if it evaluates to nonzero" } -+ STOP 4 -+ endif -+ END -diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f -new file mode 100644 -index 00000000000..35cb4c51b8d ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_3.f -@@ -0,0 +1,25 @@ -+! { dg-do compile } -+! { dg-options "-fdec -fno-dec-non-logical-if" } -+! -+! Allow logical expressions in if statements and blocks -+! -+! Contributed by Francisco Redondo Marchena -+! and Jeff Law -+! Modified by Mark Eggleston -+! -+ PROGRAM logical_exp_if_st_bl -+ INTEGER ipos/1/ -+ INTEGER ineg/0/ -+ -+ ! Test non logical variables -+ if (ineg) STOP 1 ! { dg-error "IF clause at" } -+ if (0) STOP 2 ! { dg-error "IF clause at" } -+ -+ ! Test non logical expressions in if statements -+ if (MOD(ipos, 1)) STOP 3 ! { dg-error "IF clause at" } -+ -+ ! Test non logical expressions in if blocks -+ if (MOD(2 * ipos, 2)) then ! { dg-error "IF clause at" } -+ STOP 4 -+ endif -+ END -diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f -new file mode 100644 -index 00000000000..7b60b60827f ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_4.f -@@ -0,0 +1,45 @@ -+! { dg-do run } -+! { dg-options "-fdec -Wconversion-extra" } -+! -+! Contributed by Francisco Redondo Marchena -+! and Jeff Law -+! Modified by Mark Eggleston -+! -+ function othersub1() -+ integer*4 othersub1 -+ othersub1 = 9 -+ end -+ -+ function othersub2() -+ integer*4 othersub2 -+ othersub2 = 0 -+ end -+ -+ program MAIN -+ integer*4 othersub1 -+ integer*4 othersub2 -+ integer a /1/ -+ integer b /2/ -+ -+ if (othersub1()) then ! { dg-warning "if it evaluates to nonzero" } -+ write(*,*) "OK" -+ else -+ stop 1 -+ end if -+ if (othersub2()) then ! { dg-warning "if it evaluates to nonzero" } -+ stop 2 -+ else -+ write(*,*) "OK" -+ end if -+ if (a-b) then ! { dg-warning "if it evaluates to nonzero" } -+ write(*,*) "OK" -+ else -+ stop 3 -+ end if -+ if (b-(a+1)) then ! { dg-warning "if it evaluates to nonzero" } -+ stop 3 -+ else -+ write(*,*) "OK" -+ end if -+ end -+ -diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f -new file mode 100644 -index 00000000000..80336f48ca1 ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_5.f -@@ -0,0 +1,45 @@ -+! { dg-do run } -+! { dg-options "-fdec-non-logical-if -Wconversion-extra" } -+! -+! Contributed by Francisco Redondo Marchena -+! and Jeff Law -+! Modified by Mark Eggleston -+! -+ function othersub1() -+ integer*4 othersub1 -+ othersub1 = 9 -+ end -+ -+ function othersub2() -+ integer*4 othersub2 -+ othersub2 = 0 -+ end -+ -+ program MAIN -+ integer*4 othersub1 -+ integer*4 othersub2 -+ integer a /1/ -+ integer b /2/ -+ -+ if (othersub1()) then ! { dg-warning "Non-LOGICAL type in IF statement" } -+ write(*,*) "OK" -+ else -+ stop 1 -+ end if -+ if (othersub2()) then ! { dg-warning "Non-LOGICAL type in IF statement" } -+ stop 2 -+ else -+ write(*,*) "OK" -+ end if -+ if (a-b) then ! { dg-warning "Non-LOGICAL type in IF statement" } -+ write(*,*) "OK" -+ else -+ stop 3 -+ end if -+ if (b-(a+1)) then ! { dg-warning "Non-LOGICAL type in IF statement" } -+ stop 3 -+ else -+ write(*,*) "OK" -+ end if -+ end -+ -diff --git a/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f -new file mode 100644 -index 00000000000..e1125ca717a ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_logical_expressions_if_statements_blocks_6.f -@@ -0,0 +1,45 @@ -+! { dg-do compile } -+! { dg-options "-fdec -fno-dec-non-logical-if" } -+! -+! Contributed by Francisco Redondo Marchena -+! and Jeff Law -+! Modified by Mark Eggleston -+! -+ function othersub1() -+ integer*4 othersub1 -+ othersub1 = 9 -+ end -+ -+ function othersub2() -+ integer*4 othersub2 -+ othersub2 = 0 -+ end -+ -+ program MAIN -+ integer*4 othersub1 -+ integer*4 othersub2 -+ integer a /1/ -+ integer b /2/ -+ -+ if (othersub1()) then ! { dg-error "IF clause at" } -+ write(*,*) "OK" -+ else -+ stop 1 -+ end if -+ if (othersub2()) then ! { dg-error "IF clause at" } -+ stop 2 -+ else -+ write(*,*) "OK" -+ end if -+ if (a-b) then ! { dg-error "IF clause at" } -+ write(*,*) "OK" -+ else -+ stop 3 -+ end if -+ if (b-(a+1)) then ! { dg-error "IF clause at" } -+ stop 3 -+ else -+ write(*,*) "OK" -+ end if -+ end -+ --- -2.27.0 - diff --git a/gcc13-fortran-fdec-override-kind.patch b/gcc13-fortran-fdec-override-kind.patch deleted file mode 100644 index 370fa56..0000000 --- a/gcc13-fortran-fdec-override-kind.patch +++ /dev/null @@ -1,588 +0,0 @@ -From 786869fd62813e80da9b6545a295d53c36275c19 Mon Sep 17 00:00:00 2001 -From: Mark Eggleston -Date: Fri, 22 Jan 2021 13:12:14 +0000 -Subject: [PATCH 06/10] Allow string length and kind to be specified on a per - variable basis. - -This allows kind/length to be mixed with array specification in -declarations. - -e.g. - - INTEGER*4 x*2, y*8 - CHARACTER names*20(10) - REAL v(100)*8, vv*4(50) - -The per-variable size overrides the kind or length specified for the type. - -Use -fdec-override-kind to enable. Also enabled by -fdec. - -Note: this feature is a merger of two previously separate features. - -Now accepts named constants as kind parameters: - - INTEGER A - PARAMETER (A=2) - INTEGER B*(A) - -Contributed by Mark Eggleston - -Now rejects invalid kind parameters and prints error messages: - - INTEGER X*3 - -caused an internal compiler error. - -Contributed by Mark Eggleston ---- - gcc/fortran/decl.cc | 156 ++++++++++++++---- - gcc/fortran/lang.opt | 4 + - gcc/fortran/options.cc | 1 + - .../dec_mixed_char_array_declaration_1.f | 13 ++ - .../dec_mixed_char_array_declaration_2.f | 13 ++ - .../dec_mixed_char_array_declaration_3.f | 13 ++ - .../gfortran.dg/dec_spec_in_variable_1.f | 31 ++++ - .../gfortran.dg/dec_spec_in_variable_2.f | 31 ++++ - .../gfortran.dg/dec_spec_in_variable_3.f | 31 ++++ - .../gfortran.dg/dec_spec_in_variable_4.f | 14 ++ - .../gfortran.dg/dec_spec_in_variable_5.f | 19 +++ - .../gfortran.dg/dec_spec_in_variable_6.f | 19 +++ - .../gfortran.dg/dec_spec_in_variable_7.f | 15 ++ - .../gfortran.dg/dec_spec_in_variable_8.f | 14 ++ - 14 files changed, 340 insertions(+), 34 deletions(-) - create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f - create mode 100644 gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f - -diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc -index 5c8c1b7981b..f7dc9d8263d 100644 ---- a/gcc/fortran/decl.cc -+++ b/gcc/fortran/decl.cc -@@ -1213,6 +1213,54 @@ syntax: - return MATCH_ERROR; - } - -+/* This matches the nonstandard kind given after a variable name, like: -+ INTEGER x*2, y*4 -+ The per-variable kind will override any kind given in the type -+ declaration. -+*/ -+ -+static match -+match_per_symbol_kind (int *length) -+{ -+ match m; -+ gfc_expr *expr = NULL; -+ -+ m = gfc_match_char ('*'); -+ if (m != MATCH_YES) -+ return m; -+ -+ m = gfc_match_small_literal_int (length, NULL); -+ if (m == MATCH_YES || m == MATCH_ERROR) -+ return m; -+ -+ if (gfc_match_char ('(') == MATCH_NO) -+ return MATCH_ERROR; -+ -+ m = gfc_match_expr (&expr); -+ if (m == MATCH_YES) -+ { -+ m = MATCH_ERROR; // Assume error -+ if (gfc_expr_check_typed (expr, gfc_current_ns, false)) -+ { -+ if ((expr->expr_type == EXPR_CONSTANT) -+ && (expr->ts.type == BT_INTEGER)) -+ { -+ *length = mpz_get_si(expr->value.integer); -+ m = MATCH_YES; -+ } -+ } -+ -+ if (m == MATCH_YES) -+ { -+ if (gfc_match_char (')') == MATCH_NO) -+ m = MATCH_ERROR; -+ } -+ } -+ -+ if (expr != NULL) -+ gfc_free_expr (expr); -+ return m; -+} - - /* Special subroutine for finding a symbol. Check if the name is found - in the current name space. If not, and we're compiling a function or -@@ -2443,6 +2491,35 @@ check_function_name (char *name) - } - - -+static match -+match_character_length_clause (gfc_charlen **cl, bool *cl_deferred, int elem) -+{ -+ gfc_expr* char_len; -+ char_len = NULL; -+ -+ match m = match_char_length (&char_len, cl_deferred, false); -+ if (m == MATCH_YES) -+ { -+ *cl = gfc_new_charlen (gfc_current_ns, NULL); -+ (*cl)->length = char_len; -+ } -+ else if (m == MATCH_NO) -+ { -+ if (elem > 1 -+ && (current_ts.u.cl->length == NULL -+ || current_ts.u.cl->length->expr_type != EXPR_CONSTANT)) -+ { -+ *cl = gfc_new_charlen (gfc_current_ns, NULL); -+ (*cl)->length = gfc_copy_expr (current_ts.u.cl->length); -+ } -+ else -+ *cl = current_ts.u.cl; -+ -+ *cl_deferred = current_ts.deferred; -+ } -+ return m; -+} -+ - /* Match a variable name with an optional initializer. When this - subroutine is called, a variable is expected to be parsed next. - Depending on what is happening at the moment, updates either the -@@ -2453,7 +2530,7 @@ variable_decl (int elem) - { - char name[GFC_MAX_SYMBOL_LEN + 1]; - static unsigned int fill_id = 0; -- gfc_expr *initializer, *char_len; -+ gfc_expr *initializer; - gfc_array_spec *as; - gfc_array_spec *cp_as; /* Extra copy for Cray Pointees. */ - gfc_charlen *cl; -@@ -2462,11 +2539,15 @@ variable_decl (int elem) - match m; - bool t; - gfc_symbol *sym; -+ match cl_match; -+ match kind_match; -+ int overridden_kind; - char c; - - initializer = NULL; - as = NULL; - cp_as = NULL; -+ kind_match = MATCH_NO; - - /* When we get here, we've just matched a list of attributes and - maybe a type and a double colon. The next thing we expect to see -@@ -2519,6 +2600,28 @@ variable_decl (int elem) - - var_locus = gfc_current_locus; - -+ -+ cl = NULL; -+ cl_deferred = false; -+ cl_match = MATCH_NO; -+ -+ /* Check for a character length clause before an array clause */ -+ if (flag_dec_override_kind) -+ { -+ if (current_ts.type == BT_CHARACTER) -+ { -+ cl_match = match_character_length_clause (&cl, &cl_deferred, elem); -+ if (cl_match == MATCH_ERROR) -+ goto cleanup; -+ } -+ else -+ { -+ kind_match = match_per_symbol_kind (&overridden_kind); -+ if (kind_match == MATCH_ERROR) -+ goto cleanup; -+ } -+ } -+ - /* Now we could see the optional array spec. or character length. */ - m = gfc_match_array_spec (&as, true, true); - if (m == MATCH_ERROR) -@@ -2667,40 +2770,12 @@ variable_decl (int elem) - } - } - -- char_len = NULL; -- cl = NULL; -- cl_deferred = false; -- -- if (current_ts.type == BT_CHARACTER) -+ /* Second chance for a character length clause */ -+ if (cl_match == MATCH_NO && current_ts.type == BT_CHARACTER) - { -- switch (match_char_length (&char_len, &cl_deferred, false)) -- { -- case MATCH_YES: -- cl = gfc_new_charlen (gfc_current_ns, NULL); -- -- cl->length = char_len; -- break; -- -- /* Non-constant lengths need to be copied after the first -- element. Also copy assumed lengths. */ -- case MATCH_NO: -- if (elem > 1 -- && (current_ts.u.cl->length == NULL -- || current_ts.u.cl->length->expr_type != EXPR_CONSTANT)) -- { -- cl = gfc_new_charlen (gfc_current_ns, NULL); -- cl->length = gfc_copy_expr (current_ts.u.cl->length); -- } -- else -- cl = current_ts.u.cl; -- -- cl_deferred = current_ts.deferred; -- -- break; -- -- case MATCH_ERROR: -- goto cleanup; -- } -+ m = match_character_length_clause (&cl, &cl_deferred, elem); -+ if (m == MATCH_ERROR) -+ goto cleanup; - } - - /* The dummy arguments and result of the abreviated form of MODULE -@@ -2802,6 +2877,19 @@ variable_decl (int elem) - goto cleanup; - } - -+ if (kind_match == MATCH_YES) -+ { -+ gfc_find_symbol (name, gfc_current_ns, 1, &sym); -+ /* sym *must* be found at this point */ -+ sym->ts.kind = overridden_kind; -+ if (gfc_validate_kind (sym->ts.type, sym->ts.kind, true) < 0) -+ { -+ gfc_error ("Kind %d not supported for type %s at %C", -+ sym->ts.kind, gfc_basic_typename (sym->ts.type)); -+ return MATCH_ERROR; -+ } -+ } -+ - if (!check_function_name (name)) - { - m = MATCH_ERROR; -diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt -index 25cc948699b..4a269ebb22d 100644 ---- a/gcc/fortran/lang.opt -+++ b/gcc/fortran/lang.opt -@@ -502,6 +502,10 @@ fdec-math - Fortran Var(flag_dec_math) - Enable legacy math intrinsics for compatibility. - -+fdec-override-kind -+Fortran Var(flag_dec_override_kind) -+Enable support for per variable kind specification. -+ - fdec-structure - Fortran Var(flag_dec_structure) - Enable support for DEC STRUCTURE/RECORD. -diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc -index d6bd36c3a8a..edbab483b36 100644 ---- a/gcc/fortran/options.cc -+++ b/gcc/fortran/options.cc -@@ -78,6 +78,7 @@ set_dec_flags (int value) - SET_BITFLAG (flag_dec_blank_format_item, value, value); - SET_BITFLAG (flag_dec_char_conversions, value, value); - SET_BITFLAG (flag_dec_duplicates, value, value); -+ SET_BITFLAG (flag_dec_override_kind, value, value); - } - - /* Finalize DEC flags. */ -diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f -new file mode 100644 -index 00000000000..706ea4112a4 ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_1.f -@@ -0,0 +1,13 @@ -+! { dg-do run } -+! { dg-options "-fdec" } -+! -+! Test character declaration with mixed string length and array specification -+! -+! Contributed by Jim MacArthur -+! Modified by Mark Eggleston -+! -+ PROGRAM character_declaration -+ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/ -+ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/ -+ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1 -+ END -diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f -new file mode 100644 -index 00000000000..26d2acf01de ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_2.f -@@ -0,0 +1,13 @@ -+! { dg-do run } -+! { dg-options "-fdec-override-kind" } -+! -+! Test character declaration with mixed string length and array specification -+! -+! Contributed by Jim MacArthur -+! Modified by Mark Eggleston -+! -+ PROGRAM character_declaration -+ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/ -+ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/ -+ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1 -+ END -diff --git a/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f -new file mode 100644 -index 00000000000..76e4f0bdb93 ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_mixed_char_array_declaration_3.f -@@ -0,0 +1,13 @@ -+! { dg-do compile } -+! { dg-options "-fdec-override-kind -fno-dec-override-kind" } -+! -+! Test character declaration with mixed string length and array specification -+! -+! Contributed by Jim MacArthur -+! Modified by Mark Eggleston -+! -+ PROGRAM character_declaration -+ CHARACTER ASPEC_SLENGTH*2 (5) /'01','02','03','04','05'/ ! { dg-error "Syntax error" } -+ CHARACTER SLENGTH_ASPEC(5)*2 /'01','02','03','04','05'/ -+ if (ASPEC_SLENGTH(3).NE.SLENGTH_ASPEC(3)) STOP 1 ! { dg-error " Operands of comparison operator" } -+ END -diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f -new file mode 100644 -index 00000000000..edd0f5874b7 ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_1.f -@@ -0,0 +1,31 @@ -+! { dg-do run } -+! { dg-options "-fdec" } -+! -+! Test kind specification in variable not in type -+! -+! Contributed by Mark Eggleston -+! -+ program spec_in_var -+ integer*8 ai*1, bi*4, ci -+ real*4 ar*4, br*8, cr -+ -+ ai = 1 -+ ar = 1.0 -+ bi = 2 -+ br = 2.0 -+ ci = 3 -+ cr = 3.0 -+ -+ if (ai .ne. 1) stop 1 -+ if (abs(ar - 1.0) > 1.0D-6) stop 2 -+ if (bi .ne. 2) stop 3 -+ if (abs(br - 2.0) > 1.0D-6) stop 4 -+ if (ci .ne. 3) stop 5 -+ if (abs(cr - 3.0) > 1.0D-6) stop 6 -+ if (kind(ai) .ne. 1) stop 7 -+ if (kind(ar) .ne. 4) stop 8 -+ if (kind(bi) .ne. 4) stop 9 -+ if (kind(br) .ne. 8) stop 10 -+ if (kind(ci) .ne. 8) stop 11 -+ if (kind(cr) .ne. 4) stop 12 -+ end -diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f -new file mode 100644 -index 00000000000..bfaba584dbb ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_2.f -@@ -0,0 +1,31 @@ -+! { dg-do run } -+! { dg-options "-fdec-override-kind" } -+! -+! Test kind specification in variable not in type -+! -+! Contributed by Mark Eggleston -+! -+ program spec_in_var -+ integer*8 ai*1, bi*4, ci -+ real*4 ar*4, br*8, cr -+ -+ ai = 1 -+ ar = 1.0 -+ bi = 2 -+ br = 2.0 -+ ci = 3 -+ cr = 3.0 -+ -+ if (ai .ne. 1) stop 1 -+ if (abs(ar - 1.0) > 1.0D-6) stop 2 -+ if (bi .ne. 2) stop 3 -+ if (abs(br - 2.0) > 1.0D-6) stop 4 -+ if (ci .ne. 3) stop 5 -+ if (abs(cr - 3.0) > 1.0D-6) stop 6 -+ if (kind(ai) .ne. 1) stop 7 -+ if (kind(ar) .ne. 4) stop 8 -+ if (kind(bi) .ne. 4) stop 9 -+ if (kind(br) .ne. 8) stop 10 -+ if (kind(ci) .ne. 8) stop 11 -+ if (kind(cr) .ne. 4) stop 12 -+ end -diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f -new file mode 100644 -index 00000000000..5ff434e7466 ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_3.f -@@ -0,0 +1,31 @@ -+! { dg-do compile } -+! { dg-options "-fdec -fno-dec-override-kind" } -+! -+! Test kind specification in variable not in type -+! -+! Contributed by Mark Eggleston -+! -+ program spec_in_var -+ integer*8 ai*1, bi*4, ci ! { dg-error "Syntax error" } -+ real*4 ar*4, br*8, cr ! { dg-error "Syntax error" } -+ -+ ai = 1 -+ ar = 1.0 -+ bi = 2 -+ br = 2.0 -+ ci = 3 -+ cr = 3.0 -+ -+ if (ai .ne. 1) stop 1 -+ if (abs(ar - 1.0) > 1.0D-6) stop 2 -+ if (bi .ne. 2) stop 3 -+ if (abs(br - 2.0) > 1.0D-6) stop 4 -+ if (ci .ne. 3) stop 5 -+ if (abs(cr - 3.0) > 1.0D-6) stop 6 -+ if (kind(ai) .ne. 1) stop 7 -+ if (kind(ar) .ne. 4) stop 8 -+ if (kind(bi) .ne. 4) stop 9 -+ if (kind(br) .ne. 8) stop 10 -+ if (kind(ci) .ne. 8) stop 11 -+ if (kind(cr) .ne. 4) stop 12 -+ end -diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f -new file mode 100644 -index 00000000000..c01980e8b9d ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_4.f -@@ -0,0 +1,14 @@ -+! { dg-do compile } -+! -+! Test kind specification in variable not in type. The per variable -+! kind specification is not enabled so these should fail -+! -+! Contributed by Mark Eggleston -+! -+ program spec_in_var -+ integer a -+ parameter(a=2) -+ integer b*(a) ! { dg-error "Syntax error" } -+ real c*(8) ! { dg-error "Syntax error" } -+ logical d*1_1 ! { dg-error "Syntax error" } -+ end -diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f -new file mode 100644 -index 00000000000..e2f39da3f4f ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_5.f -@@ -0,0 +1,19 @@ -+! { dg-do run } -+! { dg-options "-fdec-override-kind" } -+! -+! Test kind specification in variable not in type -+! -+! Contributed by Mark Eggleston -+! -+ program spec_in_var -+ integer a -+ parameter(a=2) -+ integer b*(a) -+ real c*(8) -+ logical d*(1_1) -+ character e*(a) -+ if (kind(b).ne.2) stop 1 -+ if (kind(c).ne.8) stop 2 -+ if (kind(d).ne.1) stop 3 -+ if (len(e).ne.2) stop 4 -+ end -diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f -new file mode 100644 -index 00000000000..569747874e3 ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_6.f -@@ -0,0 +1,19 @@ -+! { dg-do run } -+! { dg-options "-fdec" } -+! -+! Test kind specification in variable not in type -+! -+! Contributed by Mark Eggleston -+! -+ program spec_in_var -+ integer a -+ parameter(a=2) -+ integer b*(a) -+ real c*(8) -+ logical d*(1_1) -+ character e*(a) -+ if (kind(b).ne.2) stop 1 -+ if (kind(c).ne.8) stop 2 -+ if (kind(d).ne.1) stop 3 -+ if (len(e).ne.2) stop 4 -+ end -diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f -new file mode 100644 -index 00000000000..b975bfd15c5 ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_7.f -@@ -0,0 +1,15 @@ -+! { dg-do compile } -+! { dg-options "-fdec -fno-dec-override-kind" } -+! -+! Test kind specification in variable not in type as the per variable -+! kind specification is not enables these should fail -+! -+! Contributed by Mark Eggleston -+! -+ program spec_in_var -+ integer a -+ parameter(a=2) -+ integer b*(a) ! { dg-error "Syntax error" } -+ real c*(8) ! { dg-error "Syntax error" } -+ logical d*1_1 ! { dg-error "Syntax error" } -+ end -diff --git a/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f -new file mode 100644 -index 00000000000..85732e0bd85 ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/dec_spec_in_variable_8.f -@@ -0,0 +1,14 @@ -+! { dg-do compile } -+! { dg-options "-fdec" } -+! -+! Check that invalid kind values are rejected. -+! -+! Contributed by Mark Eggleston -+! -+ program spec_in_var -+ integer a -+ parameter(a=3) -+ integer b*(a) ! { dg-error "Kind 3 not supported" } -+ real c*(78) ! { dg-error "Kind 78 not supported" } -+ logical d*(*) ! { dg-error "Invalid character" } -+ end --- -2.27.0 - diff --git a/gcc13-fortran-flogical-as-integer.patch b/gcc13-fortran-flogical-as-integer.patch deleted file mode 100644 index 28df5e1..0000000 --- a/gcc13-fortran-flogical-as-integer.patch +++ /dev/null @@ -1,305 +0,0 @@ -From 9b45f3063dfd2b893e7963a4828c1b0afecdc68a Mon Sep 17 00:00:00 2001 -From: Mark Eggleston -Date: Fri, 22 Jan 2021 12:41:46 +0000 -Subject: [PATCH 02/10] Convert LOGICAL to INTEGER for arithmetic ops, and vice - versa - -We allow converting LOGICAL types to INTEGER when doing arithmetic -operations, and converting INTEGER types to LOGICAL for use in -boolean operations. - -This feature is enabled with the -flogical-as-integer flag. - -Note: using this feature will disable bitwise logical operations enabled by --fdec. ---- - gcc/fortran/lang.opt | 4 ++ - gcc/fortran/resolve.cc | 55 ++++++++++++++++++- - .../logical_to_integer_and_vice_versa_1.f | 31 +++++++++++ - .../logical_to_integer_and_vice_versa_2.f | 31 +++++++++++ - .../logical_to_integer_and_vice_versa_3.f | 33 +++++++++++ - .../logical_to_integer_and_vice_versa_4.f | 33 +++++++++++ - 6 files changed, 186 insertions(+), 1 deletion(-) - create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f - create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f - create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f - create mode 100644 gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f - -diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt -index 52bd522051e..c4da248f07c 100644 ---- a/gcc/fortran/lang.opt -+++ b/gcc/fortran/lang.opt -@@ -497,6 +497,10 @@ fdec-static - Fortran Var(flag_dec_static) - Enable DEC-style STATIC and AUTOMATIC attributes. - -+flogical-as-integer -+Fortran Var(flag_logical_as_integer) -+Convert from integer to logical or logical to integer for arithmetic operations. -+ - fdefault-double-8 - Fortran Var(flag_default_double) - Set the default double precision kind to an 8 byte wide type. -diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc -index c075d0fa0c4..4b90cb59902 100644 ---- a/gcc/fortran/resolve.cc -+++ b/gcc/fortran/resolve.cc -@@ -3915,7 +3915,6 @@ lookup_uop_fuzzy (const char *op, gfc_symtree *uop) - return gfc_closest_fuzzy_match (op, candidates); - } - -- - /* Callback finding an impure function as an operand to an .and. or - .or. expression. Remember the last function warned about to - avoid double warnings when recursing. */ -@@ -3975,6 +3974,22 @@ convert_hollerith_to_character (gfc_expr *e) - } - } - -+/* If E is a logical, convert it to an integer and issue a warning -+ for the conversion. */ -+ -+static void -+convert_integer_to_logical (gfc_expr *e) -+{ -+ if (e->ts.type == BT_INTEGER) -+ { -+ /* Convert to LOGICAL */ -+ gfc_typespec t; -+ t.type = BT_LOGICAL; -+ t.kind = 1; -+ gfc_convert_type_warn (e, &t, 2, 1); -+ } -+} -+ - /* Convert to numeric and issue a warning for the conversion. */ - - static void -@@ -3987,6 +4002,22 @@ convert_to_numeric (gfc_expr *a, gfc_expr *b) - gfc_convert_type_warn (a, &t, 2, 1); - } - -+/* If E is a logical, convert it to an integer and issue a warning -+ for the conversion. */ -+ -+static void -+convert_logical_to_integer (gfc_expr *e) -+{ -+ if (e->ts.type == BT_LOGICAL) -+ { -+ /* Convert to INTEGER */ -+ gfc_typespec t; -+ t.type = BT_INTEGER; -+ t.kind = 1; -+ gfc_convert_type_warn (e, &t, 2, 1); -+ } -+} -+ - /* Resolve an operator expression node. This can involve replacing the - operation with a user defined function call. */ - -@@ -4072,6 +4103,12 @@ resolve_operator (gfc_expr *e) - case INTRINSIC_TIMES: - case INTRINSIC_DIVIDE: - case INTRINSIC_POWER: -+ if (flag_logical_as_integer) -+ { -+ convert_logical_to_integer (op1); -+ convert_logical_to_integer (op2); -+ } -+ - if (gfc_numeric_ts (&op1->ts) && gfc_numeric_ts (&op2->ts)) - { - gfc_type_convert_binary (e, 1); -@@ -4108,6 +4145,13 @@ resolve_operator (gfc_expr *e) - case INTRINSIC_OR: - case INTRINSIC_EQV: - case INTRINSIC_NEQV: -+ -+ if (flag_logical_as_integer) -+ { -+ convert_integer_to_logical (op1); -+ convert_integer_to_logical (op2); -+ } -+ - if (op1->ts.type == BT_LOGICAL && op2->ts.type == BT_LOGICAL) - { - e->ts.type = BT_LOGICAL; -@@ -4158,6 +4202,9 @@ resolve_operator (gfc_expr *e) - goto simplify_op; - } - -+ if (flag_logical_as_integer) -+ convert_integer_to_logical (op1); -+ - if (op1->ts.type == BT_LOGICAL) - { - e->ts.type = BT_LOGICAL; -@@ -4198,6 +4245,12 @@ resolve_operator (gfc_expr *e) - convert_hollerith_to_character (op2); - } - -+ if (flag_logical_as_integer) -+ { -+ convert_logical_to_integer (op1); -+ convert_logical_to_integer (op2); -+ } -+ - if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER - && op1->ts.kind == op2->ts.kind) - { -diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f -new file mode 100644 -index 00000000000..938a91d9e9a ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_1.f -@@ -0,0 +1,31 @@ -+! { dg-do run } -+! { dg-options "-std=legacy -flogical-as-integer" } -+! -+! Test conversion between logical and integer for logical operators -+! -+! Test case contributed by Jim MacArthur -+! Modified for -flogical-as-integer by Mark Eggleston -+! -+! -+ PROGRAM logical_integer_conversion -+ LOGICAL lpos /.true./ -+ INTEGER ineg/0/ -+ INTEGER ires -+ LOGICAL lres -+ -+ ! Test Logicals converted to Integers -+ if ((lpos.AND.ineg).EQ.1) STOP 3 -+ if ((ineg.AND.lpos).NE.0) STOP 4 -+ ires = (.true..AND.0) -+ if (ires.NE.0) STOP 5 -+ ires = (1.AND..false.) -+ if (ires.EQ.1) STOP 6 -+ -+ ! Test Integers converted to Logicals -+ if (lpos.EQ.ineg) STOP 7 -+ if (ineg.EQ.lpos) STOP 8 -+ lres = (.true..EQ.0) -+ if (lres) STOP 9 -+ lres = (1.EQ..false.) -+ if (lres) STOP 10 -+ END -diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f -new file mode 100644 -index 00000000000..9f146202ba5 ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_2.f -@@ -0,0 +1,31 @@ -+! { dg-do compile } -+! { dg-options "-std=legacy -flogical-as-integer -fno-logical-as-integer" } -+! -+! Based on logical_to_integer_and_vice_versa_1.f but with option disabled -+! to test for error messages. -+! -+! Test case contributed by by Mark Eggleston -+! -+! -+ PROGRAM logical_integer_conversion -+ LOGICAL lpos /.true./ -+ INTEGER ineg/0/ -+ INTEGER ires -+ LOGICAL lres -+ -+ ! Test Logicals converted to Integers -+ if ((lpos.AND.ineg).EQ.1) STOP 3 ! { dg-error "Operands of logical operator" } -+ if ((ineg.AND.lpos).NE.0) STOP 4 ! { dg-error "Operands of logical operator" } -+ ires = (.true..AND.0) ! { dg-error "Operands of logical operator" } -+ if (ires.NE.0) STOP 5 -+ ires = (1.AND..false.) ! { dg-error "Operands of logical operator" } -+ if (ires.EQ.1) STOP 6 -+ -+ ! Test Integers converted to Logicals -+ if (lpos.EQ.ineg) STOP 7 ! { dg-error "Operands of comparison operator" } -+ if (ineg.EQ.lpos) STOP 8 ! { dg-error "Operands of comparison operator" } -+ lres = (.true..EQ.0) ! { dg-error "Operands of comparison operator" } -+ if (lres) STOP 9 -+ lres = (1.EQ..false.) ! { dg-error "Operands of comparison operator" } -+ if (lres) STOP 10 -+ END -diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f -new file mode 100644 -index 00000000000..446873eb2dc ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_3.f -@@ -0,0 +1,33 @@ -+! { dg-do compile } -+! { dg-options "-std=legacy -flogical-as-integer" } -+! -+! Test conversion between logical and integer for logical operators -+! -+ program test -+ logical f /.false./ -+ logical t /.true./ -+ real x -+ -+ x = 7.7 -+ x = x + t*3.0 -+ if (abs(x - 10.7).gt.0.00001) stop 1 -+ x = x + .false.*5.0 -+ if (abs(x - 10.7).gt.0.00001) stop 2 -+ x = x - .true.*5.0 -+ if (abs(x - 5.7).gt.0.00001) stop 3 -+ x = x + t -+ if (abs(x - 6.7).gt.0.00001) stop 4 -+ x = x + f -+ if (abs(x - 6.7).gt.0.00001) stop 5 -+ x = x - t -+ if (abs(x - 5.7).gt.0.00001) stop 6 -+ x = x - f -+ if (abs(x - 5.7).gt.0.00001) stop 7 -+ x = x**.true. -+ if (abs(x - 5.7).gt.0.00001) stop 8 -+ x = x**.false. -+ if (abs(x - 1.0).gt.0.00001) stop 9 -+ x = x/t -+ if (abs(x - 1.0).gt.0.00001) stop 10 -+ if ((x/.false.).le.huge(x)) stop 11 -+ end -diff --git a/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f -new file mode 100644 -index 00000000000..4301a4988d8 ---- /dev/null -+++ b/gcc/testsuite/gfortran.dg/logical_to_integer_and_vice_versa_4.f -@@ -0,0 +1,33 @@ -+! { dg-do compile } -+! { dg-options "-std=legacy -flogical-as-integer -fno-logical-as-integer" } -+! -+! Test conversion between logical and integer for logical operators -+! -+ program test -+ logical f /.false./ -+ logical t /.true./ -+ real x -+ -+ x = 7.7 -+ x = x + t*3.0 ! { dg-error "Operands of binary numeric" } -+ if (abs(x - 10.7).gt.0.00001) stop 1 -+ x = x + .false.*5.0 ! { dg-error "Operands of binary numeric" } -+ if (abs(x - 10.7).gt.0.00001) stop 2 -+ x = x - .true.*5.0 ! { dg-error "Operands of binary numeric" } -+ if (abs(x - 5.7).gt.0.00001) stop 3 -+ x = x + t ! { dg-error "Operands of binary numeric" } -+ if (abs(x - 6.7).gt.0.00001) stop 4 -+ x = x + f ! { dg-error "Operands of binary numeric" } -+ if (abs(x - 6.7).gt.0.00001) stop 5 -+ x = x - t ! { dg-error "Operands of binary numeric" } -+ if (abs(x - 5.7).gt.0.00001) stop 6 -+ x = x - f ! { dg-error "Operands of binary numeric" } -+ if (abs(x - 5.7).gt.0.00001) stop 7 -+ x = x**.true. ! { dg-error "Operands of binary numeric" } -+ if (abs(x - 5.7).gt.0.00001) stop 8 -+ x = x**.false. ! { dg-error "Operands of binary numeric" } -+ if (abs(x - 1.0).gt.0.00001) stop 9 -+ x = x/t ! { dg-error "Operands of binary numeric" } -+ if (abs(x - 1.0).gt.0.00001) stop 10 -+ if ((x/.false.).le.huge(x)) stop 11 ! { dg-error "Operands of binary numeric" } -+ end --- -2.27.0 - diff --git a/gcc13-libstdc++-docs.patch b/gcc13-libstdc++-docs.patch index 6dffae6..ce94f5d 100644 --- a/gcc13-libstdc++-docs.patch +++ b/gcc13-libstdc++-docs.patch @@ -4,7 +4,7 @@ FSF

-+ Release 13.1.1 ++ Release 13.2.1 +

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation @@ -17,7 +17,7 @@

- The API documentation, rendered into HTML, can be viewed online + The API documentation, rendered into HTML, can be viewed locally -+ for the 13.1.1 release, ++ for the 13.2.1 release, + online for each GCC release and diff --git a/gcc13-libtool-no-rpath.patch b/gcc13-libtool-no-rpath.patch index 8429a4c..466c661 100644 --- a/gcc13-libtool-no-rpath.patch +++ b/gcc13-libtool-no-rpath.patch @@ -5,7 +5,7 @@ libtool sucks. rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64|/usr/lib/../lib64/lp64d) continue;; esac ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then @@ -13,7 +13,7 @@ libtool sucks. rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64|/usr/lib/../lib64/lp64d) continue;; esac ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then @@ -21,7 +21,7 @@ libtool sucks. rpath= hardcode_libdirs= for libdir in $finalize_rpath; do -+ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64|/usr/lib/../lib64/lp64d) continue;; esac ++ case "$libdir" in /usr/lib|/usr/lib64|/usr/lib/../lib|/usr/lib/../lib64) continue;; esac if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then diff --git a/gcc13-pr110792.patch b/gcc13-pr110792.patch new file mode 100644 index 0000000..ce129f9 --- /dev/null +++ b/gcc13-pr110792.patch @@ -0,0 +1,163 @@ +PR target/110792: Early clobber issues with rot32di2_doubleword on i386. + +This patch is a conservative fix for PR target/110792, a wrong-code +regression affecting doubleword rotations by BITS_PER_WORD, which +effectively swaps the highpart and lowpart words, when the source to be +rotated resides in memory. The issue is that if the register used to +hold the lowpart of the destination is mentioned in the address of +the memory operand, the current define_insn_and_split unintentionally +clobbers it before reading the highpart. + +Hence, for the testcase, the incorrectly generated code looks like: + + salq $4, %rdi // calculate address + movq WHIRL_S+8(%rdi), %rdi // accidentally clobber addr + movq WHIRL_S(%rdi), %rbp // load (wrong) lowpart + +Traditionally, the textbook way to fix this would be to add an +explicit early clobber to the instruction's constraints. + + (define_insn_and_split "32di2_doubleword" +- [(set (match_operand:DI 0 "register_operand" "=r,r,r") ++ [(set (match_operand:DI 0 "register_operand" "=r,r,&r") + (any_rotate:DI (match_operand:DI 1 "nonimmediate_operand" "0,r,o") + (const_int 32)))] + +but unfortunately this currently generates significantly worse code, +due to a strange choice of reloads (effectively memcpy), which ends up +looking like: + + salq $4, %rdi // calculate address + movdqa WHIRL_S(%rdi), %xmm0 // load the double word in SSE reg. + movaps %xmm0, -16(%rsp) // store the SSE reg back to the stack + movq -8(%rsp), %rdi // load highpart + movq -16(%rsp), %rbp // load lowpart + +Note that reload's "&" doesn't distinguish between the memory being +early clobbered, vs the registers used in an addressing mode being +early clobbered. + +The fix proposed in this patch is to remove the third alternative, that +allowed offsetable memory as an operand, forcing reload to place the +operand into a register before the rotation. This results in: + + salq $4, %rdi + movq WHIRL_S(%rdi), %rax + movq WHIRL_S+8(%rdi), %rdi + movq %rax, %rbp + +I believe there's a more advanced solution, by swapping the order of +the loads (if first destination register is mentioned in the address), +or inserting a lea insn (if both destination registers are mentioned +in the address), but this fix is a minimal "safe" solution, that +should hopefully be suitable for backporting. + +2023-08-06 Roger Sayle + +gcc/testsuite/ChangeLog + PR target/110792 + * gcc.target/i386/pr110792.c: Remove dg-final scan-assembler-not. + +2023-08-03 Roger Sayle + +gcc/ChangeLog + PR target/110792 + * config/i386/i386.md (ti3): For rotations by 64 bits + place operand in a register before gen_64ti2_doubleword. + (di3): Likewise, for rotations by 32 bits, place + operand in a register before gen_32di2_doubleword. + (32di2_doubleword): Constrain operand to be in register. + (64ti2_doubleword): Likewise. + +gcc/testsuite/ChangeLog + PR target/110792 + * g++.target/i386/pr110792.C: New 32-bit C++ test case. + * gcc.target/i386/pr110792.c: New 64-bit C test case. + +--- gcc/config/i386/i386.md ++++ gcc/config/i386/i386.md +@@ -15341,7 +15341,10 @@ (define_expand "ti3" + emit_insn (gen_ix86_ti3_doubleword + (operands[0], operands[1], operands[2])); + else if (CONST_INT_P (operands[2]) && INTVAL (operands[2]) == 64) +- emit_insn (gen_64ti2_doubleword (operands[0], operands[1])); ++ { ++ operands[1] = force_reg (TImode, operands[1]); ++ emit_insn (gen_64ti2_doubleword (operands[0], operands[1])); ++ } + else + { + rtx amount = force_reg (QImode, operands[2]); +@@ -15376,7 +15379,10 @@ (define_expand "di3" + emit_insn (gen_ix86_di3_doubleword + (operands[0], operands[1], operands[2])); + else if (CONST_INT_P (operands[2]) && INTVAL (operands[2]) == 32) +- emit_insn (gen_32di2_doubleword (operands[0], operands[1])); ++ { ++ operands[1] = force_reg (DImode, operands[1]); ++ emit_insn (gen_32di2_doubleword (operands[0], operands[1])); ++ } + else + FAIL; + +@@ -15544,8 +15550,8 @@ (define_insn_and_split "ix86_rotr3_doubleword" + }) + + (define_insn_and_split "32di2_doubleword" +- [(set (match_operand:DI 0 "register_operand" "=r,r,r") +- (any_rotate:DI (match_operand:DI 1 "nonimmediate_operand" "0,r,o") ++ [(set (match_operand:DI 0 "register_operand" "=r,r") ++ (any_rotate:DI (match_operand:DI 1 "register_operand" "0,r") + (const_int 32)))] + "!TARGET_64BIT" + "#" +@@ -15562,8 +15568,8 @@ (define_insn_and_split "32di2_doubleword" + }) + + (define_insn_and_split "64ti2_doubleword" +- [(set (match_operand:TI 0 "register_operand" "=r,r,r") +- (any_rotate:TI (match_operand:TI 1 "nonimmediate_operand" "0,r,o") ++ [(set (match_operand:TI 0 "register_operand" "=r,r") ++ (any_rotate:TI (match_operand:TI 1 "register_operand" "0,r") + (const_int 64)))] + "TARGET_64BIT" + "#" +--- gcc/testsuite/g++.target/i386/pr110792.C ++++ gcc/testsuite/g++.target/i386/pr110792.C +@@ -0,0 +1,16 @@ ++/* { dg-do compile { target ia32 } } */ ++/* { dg-options "-O2" } */ ++ ++template ++inline T rotr(T input) ++{ ++ return static_cast((input >> ROT) | (input << (8 * sizeof(T) - ROT))); ++} ++ ++unsigned long long WHIRL_S[256] = {0x18186018C07830D8}; ++unsigned long long whirl(unsigned char x0) ++{ ++ const unsigned long long s4 = WHIRL_S[x0&0xFF]; ++ return rotr<32>(s4); ++} ++/* { dg-final { scan-assembler-not "movl\tWHIRL_S\\+4\\(,%eax,8\\), %eax" } } */ +--- gcc/testsuite/gcc.target/i386/pr110792.c ++++ gcc/testsuite/gcc.target/i386/pr110792.c +@@ -0,0 +1,17 @@ ++/* { dg-do compile { target int128 } } */ ++/* { dg-options "-O2" } */ ++ ++static inline unsigned __int128 rotr(unsigned __int128 input) ++{ ++ return ((input >> 64) | (input << (64))); ++} ++ ++unsigned __int128 WHIRL_S[256] = {((__int128)0x18186018C07830D8) << 64 |0x18186018C07830D8}; ++unsigned __int128 whirl(unsigned char x0) ++{ ++ register int t __asm("rdi") = x0&0xFF; ++ const unsigned __int128 s4 = WHIRL_S[t]; ++ register unsigned __int128 tt __asm("rdi") = rotr(s4); ++ asm("":::"memory"); ++ return tt; ++} diff --git a/plans/ci.fmf b/plans/ci.fmf index 13b60db..b6a344d 100644 --- a/plans/ci.fmf +++ b/plans/ci.fmf @@ -1,10 +1,13 @@ summary: CI Gating Plan discover: how: fmf - directory: tests -prepare: - - name: prepare - how: shell - script: ./plans/prepare.sh + url: https://src.fedoraproject.org/tests/gcc.git + filter: 'tag: Fedora-CI-gating' execute: how: tmt +adjust: + - prepare+: + - name: Add secondary architecture RPMs + how: shell + script: ./plans/provide_secondary_arch_rpms.sh + when: arch == x86_64 diff --git a/plans/prepare.sh b/plans/prepare.sh deleted file mode 100755 index 8ffb6ef..0000000 --- a/plans/prepare.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -# -# Setup task for Fedora CI system. Install the x86_64 GCC build under test -# along with its respective i686 (compat arch) bits needed for the testing. -# KOJI_TASK_ID per https://github.com/fedora-ci/dist-git-pipeline/pull/50 . -# - -set -x - -true "V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V" - -echo "KOJI_TASK_ID=$KOJI_TASK_ID" - -. /etc/os-release - -if [ "$ID" == "fedora" ] && [ "$(arch)" == "x86_64" ]; then - - if [ -z "${KOJI_TASK_ID}" ]; then - echo "Missing koji task ID, skipping ..." - exit 0 - fi - - tmpd=`mktemp -d` - pushd $tmpd - koji download-task $KOJI_TASK_ID --noprogress --arch=src - ls - VR=$(rpm -qp gcc* --queryformat='%{version}-%{release}') - popd - rm -rf $tmpd - - tmpd=`mktemp -d` - pushd $tmpd - koji download-task $KOJI_TASK_ID --noprogress --arch=x86_64 --arch=noarch - rm -f *debuginfo* - ls - dnf -y install *.rpm - popd - rm -rf $tmpd - - tmpd=`mktemp -d` - pushd $tmpd - koji download-task $KOJI_TASK_ID --noprogress --arch=i686 - rm -f *debuginfo* - ls - yum -y install libgcc-$VR* libgfortran-$VR* libgomp-$VR* libitm-$VR* \ - libstdc++-devel-$VR* libstdc++-$VR* libstdc++-static-$VR* - popd - rm -rf $tmpd -else - echo "Not Fedora x86_64, skipping..." -fi - -true "^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^" diff --git a/plans/provide_secondary_arch_rpms.sh b/plans/provide_secondary_arch_rpms.sh new file mode 100755 index 0000000..f26a5ab --- /dev/null +++ b/plans/provide_secondary_arch_rpms.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash + +# Fedora CI testing systems don't provide a repository with the i686 +# RPMs of the build being tested. As a consequence, most +# dnf install -y .i686 +# commands (whether being run by a test or by TMT's prepare) will probably +# fail on a version mismatch with the present x86_64 gcc RPMs. To prevent +# such failures we provide this script which we recommend to include in every +# Fedora CI test plan. +# +# Implementation notes: +# +# * The gcc build being tested in Fedora CI is given via KOJI_TASK_ID. See +# https://github.com/fedora-ci/dist-git-pipeline/pull/50 for details. +# +# * Currently this script just downloads and installs the i686 RPMs. It +# would not be sufficient for tests that uninstall and reinstall those +# RPMs. If such a test appears, this script should create a repository. +# +# * Fedora CI testing systems seem to have extremely small RAM-based /tmp, +# unable to host all the downloaded RPMs, and no other "real" filesystem +# than "/". That's the reason for using +# mktemp -d --tmpdir=/ + +set -x + +true "V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V-V" + +echo "KOJI_TASK_ID=$KOJI_TASK_ID" + +. /etc/os-release + +echo "ID=$ID" +echo "arch=$(arch)" +echo "KOJI_TASK_ID=$KOJI_TASK_ID" + +if [[ "$ID" = fedora ]] && [[ "$(arch)" = x86_64 ]] && [[ -n "$KOJI_TASK_ID" ]]; then + + if tmpd=$(mktemp -d --tmpdir=/) && pushd "$tmpd"; then + + # Download + rpm -q koji || dnf -y install koji + koji download-task "$KOJI_TASK_ID" --noprogress --arch={x86_64,i686,noarch} + + # Remove conflicting RPMs + rm -f ./*debuginfo* ./*debugsource* + rm -f gcc-[0-9]*.i686.* + rm -f ./*docs*.i686.* + + # Install + ls + dnf -y install ./*.rpm + + # Clean up + # shellcheck disable=SC2164 + popd + rm -rf "$tmpd" + fi + +else + echo "Not applicable" +fi + +true "^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^" diff --git a/sources b/sources index 7a82c78..9509f03 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ -SHA512 (gcc-13.1.1-20230511.tar.xz) = 0ba5b1db652992b1abd356ac36a48c9db4ecd01c751ae3488dd8680199e678845d59bfb4b8d747b91bca258ea8d5a2c274f3bbb2039dd4de2f65942dd902a616 +SHA512 (gcc-13.2.1-20231205.tar.xz) = f132a2d35d6ea0b0d82043870f1c9f60dda119e63df6833b16d20e2c93e2978f62698d4cc72a6e2eefbaeded0683107de9ebeb93923b96c57dcd612504aa6a1b SHA512 (isl-0.24.tar.bz2) = aab3bddbda96b801d0f56d2869f943157aad52a6f6e6a61745edd740234c635c38231af20bc3f1a08d416a5e973a90e18249078ed8e4ae2f1d5de57658738e95 SHA512 (newlib-cygwin-9e09d6ed83cce4777a5950412647ccc603040409.tar.xz) = bef3fa04f7b1a915fc1356ebed114698b5cc835e9fa04b0becff05a9efc76c59fb376482990873d222d7acdcfee3c4f30f5a4cb7f3be1f291f1fa5f1c7a9d983 -SHA512 (nvptx-tools-93e00909ceb9cbbc104f0fcba56c0361ffb3ca4b.tar.xz) = c719fad8689b2b6f3c888d0308604ddef884037d71ec3e755c68052d30075a181c29358fda516833ace437921b17602b147be7886317be94ec9736faa8cb52be +SHA512 (nvptx-tools-aa3404ad5a496cda5d79a50bedb1344fd63e8763.tar.xz) = 33a024326426375533cb5dd9b68b2508f37540be418d2506bfa19a5f5866485e9af150469064e9059b68136ad8cb080b3b12e7eb5c6b7d1288cf6bfb3f6bb5d0 diff --git a/tests/Regression/394271-gcc-optimization-error-for-neg-number-abs/abs.c b/tests/Regression/394271-gcc-optimization-error-for-neg-number-abs/abs.c deleted file mode 100644 index 801bda0..0000000 --- a/tests/Regression/394271-gcc-optimization-error-for-neg-number-abs/abs.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include - -int -main () -{ - int i = 2; - if (-10 * abs (i - 1) == 10 * abs (i - 1)) - return 1; - - return 0; -} diff --git a/tests/Regression/394271-gcc-optimization-error-for-neg-number-abs/main.fmf b/tests/Regression/394271-gcc-optimization-error-for-neg-number-abs/main.fmf deleted file mode 100644 index 81a2b4a..0000000 --- a/tests/Regression/394271-gcc-optimization-error-for-neg-number-abs/main.fmf +++ /dev/null @@ -1,26 +0,0 @@ -summary: gcc optimization error for neg number * abs() [extract_muldiv] -description: | - abs() from gcc was broken so it gave wrong results. -contact: mcermak@redhat.com -component: - - gcc -test: bash ./runtest.sh -path: /tests/Regression/394271-gcc-optimization-error-for-neg-number-abs -framework: beakerlib -require: - - gcc -duration: 5m -enabled: true -tier: '1' -link: - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=394271 -tag: - - CI-Tier-1 - - DTS8-INTEROP-CI - - DTS9-INTEROP-CI - - Tier1 - - dts_smoke - - dts_stable -extra-nitrate: TC#0062143 -extra-summary: /tools/gcc/Regression/gcc/394271-gcc-optimization-error-for-neg-number-abs -extra-task: /tools/gcc/Regression/gcc/394271-gcc-optimization-error-for-neg-number-abs diff --git a/tests/Regression/394271-gcc-optimization-error-for-neg-number-abs/runtest.sh b/tests/Regression/394271-gcc-optimization-error-for-neg-number-abs/runtest.sh deleted file mode 100755 index 695c9fc..0000000 --- a/tests/Regression/394271-gcc-optimization-error-for-neg-number-abs/runtest.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2008, 2012 Red Hat, Inc. All rights reserved. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -# Author: Michal Nowak -# Marek Polacek - -# Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -GCC="${GCC:-$(type -P gcc)}" -PACKAGE=$(rpm --qf '%{name}' -qf $GCC) - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - rlRun "TmpDir=\`mktemp -d\`" - rlRun "cp -v abs.c $TmpDir" - rlRun "pushd $TmpDir" - gcc -dumpversion | grep -q '^4\.4' && export OLDGCC="true" - rlPhaseEnd - - rlPhaseStartTest "Testing the executable" - OPTS="-O0 -O1 -O2 -O3 -Os -Ofast -Og" - if [ "$OLDGCC" = "true" ]; then - OPTS=${OPTS/ -Ofast -Og/} - fi - for opt in "" $OPTS; do - rlRun "$GCC -g $opt -o abs$opt abs.c" 0 "Compiling the test case [ $opt ]" - rlRun "./abs$opt" 0 "Checking whether we have an working executable [ $opt ]" - done - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/462397-unzip-problem-with-CRC-error-for-src-4.1.0.zip-file/main.fmf b/tests/Regression/462397-unzip-problem-with-CRC-error-for-src-4.1.0.zip-file/main.fmf deleted file mode 100644 index 558554d..0000000 --- a/tests/Regression/462397-unzip-problem-with-CRC-error-for-src-4.1.0.zip-file/main.fmf +++ /dev/null @@ -1,29 +0,0 @@ -summary: unzip problem with CRC error for src-4.1.0.zip file on s390x -description: | - A customer has been trying to unzip the file src-4.1.0.zip - which is contained libgcj4-src-4.1.0-18.EL4.s390x.rpm. However, - unzip command can't run correctly with the CRC errors - It seems that the src-4.1.0.zip is broken. -contact: mcermak@redhat.com -component: - - gcc -test: bash ./runtest.sh -framework: beakerlib -require: - - gcc - - libgcj-src -duration: 5m -enabled: true -tag: - - CI-Tier-1 - - Tier1 -tier: '1' -link: - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=462397 -adjust: - - enabled: false - when: distro != rhel-5 and distro != rhel-6 - continue: false -extra-nitrate: TC#0147365 -extra-summary: /tools/gcc/Sanity/462397-unzip-problem-with-CRC-error-for-src-4.1.0.zip-file -extra-task: /tools/gcc/Sanity/462397-unzip-problem-with-CRC-error-for-src-4.1.0.zip-file diff --git a/tests/Regression/462397-unzip-problem-with-CRC-error-for-src-4.1.0.zip-file/runtest.sh b/tests/Regression/462397-unzip-problem-with-CRC-error-for-src-4.1.0.zip-file/runtest.sh deleted file mode 100755 index 62d03df..0000000 --- a/tests/Regression/462397-unzip-problem-with-CRC-error-for-src-4.1.0.zip-file/runtest.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2008, 2012 Red Hat, Inc. All rights reserved. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -# Author: Michal Nowak -# Marek Polacek - -# Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGES=(gcc libgcj-src) - -rlJournalStart - rlPhaseStartSetup - for p in "${PACKAGES[@]}"; do - rlAssertRpm "$p" - done; unset p - rlRun "TmpDir=\`mktemp -d\`" - rlRun "pushd $TmpDir" - rlPhaseEnd - -srclist="/usr/share/java/src-*" -for src in ${srclist}; do - - rlPhaseStartTest "Try to unzip src file" - rm -rf tmp/; mkdir tmp/ - rlRun "cp -fv ${src} tmp/" 0 "[${src}]: Copy the zip file to tmp/" - cd tmp/ - rlRun "unzip ${src}" 0 "[${src}] Verify that is possible to unzip ${src}" - cd .. - rlPhaseEnd - -done - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/465974-DW_TAG_common_block-has-incorrect-placement-scope/abc.f90 b/tests/Regression/465974-DW_TAG_common_block-has-incorrect-placement-scope/abc.f90 deleted file mode 100644 index c9af75f..0000000 --- a/tests/Regression/465974-DW_TAG_common_block-has-incorrect-placement-scope/abc.f90 +++ /dev/null @@ -1,22 +0,0 @@ - subroutine a - INTEGER*4 a_i - common /block/a_i - a_i = 1 - end subroutine a - subroutine b - INTEGER*4 b_i - common /block/b_i - a_i = 3 - b_i = 2 - end subroutine b - subroutine c - INTEGER*4 a_i - common /block/a_i - if (a_i .ne. 2) call abort - end subroutine c - program abc - call a - call b - call c - end program abc - diff --git a/tests/Regression/465974-DW_TAG_common_block-has-incorrect-placement-scope/main.fmf b/tests/Regression/465974-DW_TAG_common_block-has-incorrect-placement-scope/main.fmf deleted file mode 100644 index 5f9ce34..0000000 --- a/tests/Regression/465974-DW_TAG_common_block-has-incorrect-placement-scope/main.fmf +++ /dev/null @@ -1,38 +0,0 @@ -summary: Fortran DW_TAG_common_block has incorrect placement/scope -description: |+ - Problem: gcc-4.3.2 / gfortran-4.3.2 (in the forthcoming tech-preview for - RHEL5.3) appears to also have the "DW_TAG_common_block has incorrect - placement/scope" issues listed in the following gcc upstream bug: - - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37738 - - What gfortran is doing currently is: - - (1) Merges all common blocks into a single one. - (2) Places this single common block into the first subroutine where it was - used. - -contact: mcermak@redhat.com -component: - - gcc -test: bash ./runtest.sh -path: /tests/Regression/465974-DW_TAG_common_block-has-incorrect-placement-scope -framework: beakerlib -require: - - gcc - - gcc-gfortran -duration: 5m -tier: '1' -enabled: true -link: - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=465974 -tag: - - CI-Tier-1 - - DTS8-INTEROP-CI - - DTS9-INTEROP-CI - - Tier1 - - dts_smoke - - dts_stable -extra-nitrate: TC#0062268 -extra-summary: /tools/gcc/g77/465974-DW_TAG_common_block-has-incorrect-placement-scope -extra-task: /tools/gcc/g77/465974-DW_TAG_common_block-has-incorrect-placement-scope diff --git a/tests/Regression/465974-DW_TAG_common_block-has-incorrect-placement-scope/runtest.sh b/tests/Regression/465974-DW_TAG_common_block-has-incorrect-placement-scope/runtest.sh deleted file mode 100755 index 741279d..0000000 --- a/tests/Regression/465974-DW_TAG_common_block-has-incorrect-placement-scope/runtest.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -# Copyright (c) 2008, 2012 Red Hat, Inc. All rights reserved. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -# Author: Michal Nowak -# Marek Polacek - -# Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGES=(gcc gcc-gfortran) - -GFORTRAN=${GFORTRAN:-gfortran} - -rlJournalStart - rlPhaseStartSetup - if type gcc | grep -q -v toolset; then - # assert only of not devtoolset/gcc-toolset - for p in "${PACKAGES[@]}"; do - rlAssertRpm "$p" - done; unset p - fi - rlRun "TmpDir=\`mktemp -d\`" - rlRun "cp -v abc.f90 $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest "Testing the executable via readelf -w" - # Compile - rlRun "$GFORTRAN -g -o abc abc.f90" 0 "Compiling the test case: abc.f90" - rlRun "./abc" 0 "Checking whether we have an working executable" - rlWatchdog "readelf -w abc 2>&1 | tee gcc-readelf.log" 10 - rlAssert0 "Checking if 'readelf' ends itself" $? - # Test - cb=$(grep Abbrev gcc-readelf.log | grep DW_TAG_common_block -c) - rlRun "if [ ${cb} -eq 3 ]; then true; else false; fi" 0 "Expected amount of common blocks is 3; got ${cb}" - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/515799-RHEL5-gcc-if-more-than-one-fno-builtin/builtin.c b/tests/Regression/515799-RHEL5-gcc-if-more-than-one-fno-builtin/builtin.c deleted file mode 100644 index 64449ae..0000000 --- a/tests/Regression/515799-RHEL5-gcc-if-more-than-one-fno-builtin/builtin.c +++ /dev/null @@ -1,29 +0,0 @@ -#include - -/* Compile flags: - * gcc -fno-builtin-isascii -fno-builtin-isalnum -o builtin builtin.c - * - * Expected output: - * Using custom isascii() function - * ret = 0 - * - * Expected return value: - * 0 - */ - -int isascii(int c) -{ - printf("Using custom isascii() function\n"); - return 0; -} - -main() -{ - int c = 65; - int ret; - - ret = isascii(c); - printf("ret = %d\n", ret); - - return ret; -} diff --git a/tests/Regression/515799-RHEL5-gcc-if-more-than-one-fno-builtin/main.fmf b/tests/Regression/515799-RHEL5-gcc-if-more-than-one-fno-builtin/main.fmf deleted file mode 100644 index 8f47b12..0000000 --- a/tests/Regression/515799-RHEL5-gcc-if-more-than-one-fno-builtin/main.fmf +++ /dev/null @@ -1,33 +0,0 @@ -summary: 'Test for bz515799 ([RHEL5] gcc: if more than one -fno-builtin-*)' -description: | - Bug summary: [RHEL5] gcc: if more than one -fno-builtin-* options are specified, only the last one is effective - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=515799 - - This test compiles builtin.c with the flags '-fno-builtin-isascii - -fno-builtin-isalnum'. This program contains a custom isascii() function - that always returns 0. If gcc honors the -fno-builtin-isascii flag, it - will return 0. If not, it will use the built-in isascii() function which - will return 1. -contact: mcermak@redhat.com -component: - - gcc -test: bash ./runtest.sh -path: /tests/Regression/515799-RHEL5-gcc-if-more-than-one-fno-builtin -framework: beakerlib -require: - - gcc -duration: 5m -enabled: true -tier: '1' -link: - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=515799 -tag: - - CI-Tier-1 - - DTS8-INTEROP-CI - - DTS9-INTEROP-CI - - Tier1 - - dts_smoke - - dts_stable -extra-nitrate: TC#0063259 -extra-summary: /tools/gcc/Regression/gcc/515799-RHEL5-gcc-if-more-than-one-fno-builtin -extra-task: /tools/gcc/Regression/gcc/515799-RHEL5-gcc-if-more-than-one-fno-builtin diff --git a/tests/Regression/515799-RHEL5-gcc-if-more-than-one-fno-builtin/runtest.sh b/tests/Regression/515799-RHEL5-gcc-if-more-than-one-fno-builtin/runtest.sh deleted file mode 100755 index 8b38afd..0000000 --- a/tests/Regression/515799-RHEL5-gcc-if-more-than-one-fno-builtin/runtest.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/rhts-library/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/gcc/515799-RHEL5-gcc-if-more-than-one-fno-builtin -# Description: Test for bz515799 ([RHEL5] gcc: if more than one -fno-builtin-*) -# Author: Jeffrey Bastian -# Marek Polacek -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2009, 2012 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGES=(gcc) - -GCC=${GCC:-gcc} - -rlJournalStart - rlPhaseStartSetup - for p in "${PACKAGES[@]}"; do - rlAssertRpm "$p" - done; unset p - rlRun "TmpDir=\`mktemp -d\`" - rlRun "cp -v builtin.c $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun "$GCC -fno-builtin-isascii -fno-builtin-isalnum -o builtin builtin.c" - rlAssertExists "builtin" - rlRun "./builtin" - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/537941-libltdl-may-load-library-in-current-directory/foo.java b/tests/Regression/537941-libltdl-may-load-library-in-current-directory/foo.java deleted file mode 100644 index bc72835..0000000 --- a/tests/Regression/537941-libltdl-may-load-library-in-current-directory/foo.java +++ /dev/null @@ -1,5 +0,0 @@ -public class foo { - public static void main(String[] args) { - System.loadLibrary("foolib"); - } -} diff --git a/tests/Regression/537941-libltdl-may-load-library-in-current-directory/main.fmf b/tests/Regression/537941-libltdl-may-load-library-in-current-directory/main.fmf deleted file mode 100644 index b121552..0000000 --- a/tests/Regression/537941-libltdl-may-load-library-in-current-directory/main.fmf +++ /dev/null @@ -1,39 +0,0 @@ -summary: 'CVE-2009-3736 libtool: libltdl may load and execute code from a library - in the current directory' -description: | - cat > ~/foo.java <\EOF public class foo { public static void main(String[] args) { System.loadLibrary("foolib"); } } EOF - cd - gcj -C foo.java - cd /tmp - strace -f -v -s1024 gij -cp ~/ foo 2>&1 | grep foolib - - (resp. s/gcj/gcj4/g;s/gij/gij4/ for gcc4 testing). - - If any relative path is seen, it is wrong. Bad examples are - - {lib,}foolib.la - {hwcap,0,nosegneg}/{lib,}foolib.{so,la} -contact: mcermak@redhat.com -component: - - gcc -test: ./runtest.sh -framework: beakerlib -require: - - gcc - - gcc-java - - libgcj - - strace -duration: 5m -enabled: false -tag: - - CI-Tier-1 - - Tier1 -tier: '1' -link: - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=537941 -adjust: - - enabled: true - when: distro == rhel-6 or distro == rhel-5 -extra-nitrate: TC#0062145 -extra-summary: /tools/gcc/Regression/gcj/537941-libltdl-may-load-library-in-current-directory -extra-task: /tools/gcc/Regression/gcj/537941-libltdl-may-load-library-in-current-directory diff --git a/tests/Regression/537941-libltdl-may-load-library-in-current-directory/runtest.sh b/tests/Regression/537941-libltdl-may-load-library-in-current-directory/runtest.sh deleted file mode 100755 index 73e914d..0000000 --- a/tests/Regression/537941-libltdl-may-load-library-in-current-directory/runtest.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2008, 2012 Red Hat, Inc. All rights reserved. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -# Author: Michal Nowak -# Marek Polacek - -# Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGES=(gcc libgcj strace gcc-java) - -rlJournalStart - rlPhaseStartSetup - for p in "${PACKAGES[@]}"; do - rlAssertRpm "$p" - done; unset p - rlRun "TmpDir=\`mktemp -d\`" - rlRun "cp -v foo.java $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - -# I weeded out the if (isRHEL 3) support. -for gj in "" "4"; do - gcj_name="/usr/bin/gcj${gj}" - gij_name="/usr/bin/gij${gj}" - if [ -x ${gcj_name} ] && [ -x ${gij_name} ]; then - gcj_basename=$(basename ${gcj_name}) - gij_basename=$(basename ${gij_name}) - - rlPhaseStartTest "[${gij_basename}] Interpreting and compiling via java" - rlRun "${gcj_name} -C foo.java" 0 "[${gcj_basename}] Creating bytecode" - mv foo.class ~ - pushd /tmp - - echo "Dry run w/o strace" - ${gij_basename} -cp ~/ foo - - echo "=== Dry run end ===" - strace -f -v -s1024 ${gij_basename} -cp ~/ foo 2>&1 | tee out.${gij_basename} - echo - grep foolib out.${gij_basename} - foolib_cnt="$(grep foolib out.${gij_basename} -c)" - echo - rlRun "if [ ${foolib_cnt} -ne 0 ]; then egrep '\"libfoolib.la|\"foolib.la' out.${gij_basename}; else echo \"Zero lines w/ foolib\"; true; fi" 1 "[${gij_basename}] Interpreting test case" # use 'true' (sic!) - popd - rm -f ~/foo.class - rlPhaseEnd - - fi -done - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz1611637-immintrin_h_include_list_does_not_match_release/main.fmf b/tests/Regression/bz1611637-immintrin_h_include_list_does_not_match_release/main.fmf deleted file mode 100644 index f44417a..0000000 --- a/tests/Regression/bz1611637-immintrin_h_include_list_does_not_match_release/main.fmf +++ /dev/null @@ -1,32 +0,0 @@ -summary: Test for BZ#1611637 (devtoolset-8-gcc includes avx512vbmi2intrin.h but) -description: | - Bug summary: devtoolset-8-gcc includes avx512vbmi2intrin.h but does not contain it - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1611637 - - The list of intrinsic headers keeps changing every release, sometimes - even on the release branch, and %files needs to be in sync with what has - been changed in gcc/config.gcc. immintrin.h is one of those headers and - this test makes sure that we can #include it. -contact: Vaclav Kadlcik -component: - - gcc -test: bash ./runtest.sh -framework: beakerlib -require: - - gcc -duration: 5m -enabled: true -tag: - - CI-Tier-1 -link: - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=1611637 -adjust: - - enabled: false - when: arch != x86_64 - continue: false - - enabled: false - when: distro == rhel-5 - continue: false -extra-nitrate: TC#0575308 -extra-summary: /tools/gcc/Regression/bz1611637-immintrin_h_include_list_does_not_match_release -extra-task: /tools/gcc/Regression/bz1611637-immintrin_h_include_list_does_not_match_release diff --git a/tests/Regression/bz1611637-immintrin_h_include_list_does_not_match_release/runtest.sh b/tests/Regression/bz1611637-immintrin_h_include_list_does_not_match_release/runtest.sh deleted file mode 100755 index 8ff645e..0000000 --- a/tests/Regression/bz1611637-immintrin_h_include_list_does_not_match_release/runtest.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz1611637-immintrin_h_include_list_does_not_match_release -# Description: Test for BZ#1611637 (devtoolset-8-gcc includes avx512vbmi2intrin.h but) -# Author: Michael Petlan -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2018 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -GCC=${GCC:-gcc} - -rlJournalStart - rlPhaseStartSetup - cat > a.c < -int main(void) -{ - return 0; -} -EOF - rlAssertExists "a.c" - rlPhaseEnd - - rlPhaseStartTest - rlRun "$GCC -o a a.c" - rlAssertExists "a" - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "rm -f a a.c" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz1815504-Regression-in-the-line-information-debug/main.fmf b/tests/Regression/bz1815504-Regression-in-the-line-information-debug/main.fmf deleted file mode 100644 index 82cdc4e..0000000 --- a/tests/Regression/bz1815504-Regression-in-the-line-information-debug/main.fmf +++ /dev/null @@ -1,12 +0,0 @@ -summary: Test for BZ#1815504 (Regression in the line information debug) -description: | - Bug summary: Regression in the line information debug information generated by gcc - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1815504 -recommend: -- gcc -- valgrind -duration: 5m -link: -- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1815504 -extra-summary: /tools/gcc/Regression/bz1815504-Regression-in-the-line-information-debug -extra-task: /tools/gcc/Regression/bz1815504-Regression-in-the-line-information-debug diff --git a/tests/Regression/bz1815504-Regression-in-the-line-information-debug/runtest.sh b/tests/Regression/bz1815504-Regression-in-the-line-information-debug/runtest.sh deleted file mode 100755 index 585e76c..0000000 --- a/tests/Regression/bz1815504-Regression-in-the-line-information-debug/runtest.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz1815504-Regression-in-the-line-information-debug -# Description: Test for BZ#1815504 (Regression in the line information debug) -# Author: Alexandra Hájková -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2021 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGE="gcc" - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun "valgrind -q date &> log" 0 - rlAssertNotGrep "Can't handle inlined call info entry with line number" log - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support/main.fmf b/tests/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support/main.fmf deleted file mode 100644 index 1c87a12..0000000 --- a/tests/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support/main.fmf +++ /dev/null @@ -1,17 +0,0 @@ -summary: Test for BZ#1852781 (Compiling with -flto and -g removes CET support) -description: | - Bug summary: Compiling with -flto and -g removes CET support - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1852781 -contact: Alexandra Hájková -component: -- gcc -test: ./runtest.sh -framework: beakerlib -recommend: -- gcc -- binutils -duration: 15m -link: -- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1852781 -extra-summary: /tools/gcc/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support -extra-task: /tools/gcc/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support diff --git a/tests/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support/runtest.sh b/tests/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support/runtest.sh deleted file mode 100755 index 84cae8f..0000000 --- a/tests/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support/runtest.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support -# Description: Test for BZ#1852781 (Compiling with -flto and -g removes CET support) -# Author: Alexandra Hájková -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2020 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGE="gcc" -TESTPROG="x" - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - rlRun "cp $TESTPROG.c $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun "gcc -flto -c -fcf-protection -g $TESTPROG.c" - rlRun "gcc -flto -Wl,-z,cet-report=error -fcf-protection -g $TESTPROG.o &> log" - rlAssertNotGrep " missing IBT and SHSTK properties" log - rlRun "readelf --wide --notes a.out | grep IBT &> log" - rlAsserGrep "IBT, SHSTK" log - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support/x.c b/tests/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support/x.c deleted file mode 100644 index 64fffec..0000000 --- a/tests/Regression/bz1852781-Compiling-with-flto-and-g-removes-CET-support/x.c +++ /dev/null @@ -1,8 +0,0 @@ -#include - -int -main () -{ - printf ("hello\n"); - return 0; -} diff --git a/tests/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul/main.fmf b/tests/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul/main.fmf deleted file mode 100644 index 1540389..0000000 --- a/tests/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul/main.fmf +++ /dev/null @@ -1,17 +0,0 @@ -summary: Test for BZ#1853900 (typeinfo for stdcodecvt_utf8 not found - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1853900 -contact: Alexandra Hájková -component: -- gcc -test: ./runtest.sh -framework: beakerlib -recommend: -- gcc -- gcc-c++ -duration: 10m -link: -- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1853900 -extra-summary: /tools/gcc/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul -extra-task: /tools/gcc/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul diff --git a/tests/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul/runtest.sh b/tests/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul/runtest.sh deleted file mode 100755 index a6eb4ed..0000000 --- a/tests/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul/runtest.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul -# Description: Test for BZ#1853900 (typeinfo for stdcodecvt_utf8 -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2020 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGE="gcc" -TESTPROG="test.cc" - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - rlRun "cp $TESTPROG $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun "g++ -std=c++17 $TESTPROG &> log" - rlAssertNotGrep "hidden symbol " log - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul/test.cc b/tests/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul/test.cc deleted file mode 100644 index 075633f..0000000 --- a/tests/Regression/bz1853900-typeinfo-for-std-codecvt-utf8-wchar-t-1114111ul/test.cc +++ /dev/null @@ -1,7 +0,0 @@ -#include - -namespace fs = std::filesystem; -int main() { - fs::create_directory("sandbox"); - fs::remove_all("sandbox"); -} diff --git a/tests/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and/main.fmf b/tests/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and/main.fmf deleted file mode 100644 index 8167f92..0000000 --- a/tests/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and/main.fmf +++ /dev/null @@ -1,16 +0,0 @@ -summary: Test for BZ#1878841 (GOMP_parallel_loop_nonmonotonic_dynamic and) -description: | - Bug summary: GOMP_parallel_loop_nonmonotonic_dynamic and GOMP_loop_nonmonotonic_dynamic_next missing - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1878841 -contact: Alexandra Hájková -component: -- gcc -test: ./runtest.sh -framework: beakerlib -recommend: -- gcc -duration: 5m -link: -- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1878841 -extra-summary: /tools/gcc/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and -extra-task: /tools/gcc/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and diff --git a/tests/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and/runtest.sh b/tests/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and/runtest.sh deleted file mode 100755 index 83c42ef..0000000 --- a/tests/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and/runtest.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and -# Description: Test for BZ#1878841 (GOMP_parallel_loop_nonmonotonic_dynamic and) -# Author: Alexandra Hájková -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2020 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGE="gcc" -TESTPROG="tst" - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - rlRun "cp $TESTPROG.c $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun "gcc -fopenmp $TESTPROG.c &> log" - rlAssertNotGrep "undefined reference to `GOMP_parallel_loop_nonmonotonic_dynamic`" log - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and/tst.c b/tests/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and/tst.c deleted file mode 100644 index 741559e..0000000 --- a/tests/Regression/bz1878841-GOMP-parallel-loop-nonmonotonic-dynamic-and/tst.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -int main () -{ - #pragma omp parallel for schedule(dynamic) - for (int i = 0; i < 10; i++); -} diff --git a/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/b.gdb b/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/b.gdb deleted file mode 100644 index 341301d..0000000 --- a/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/b.gdb +++ /dev/null @@ -1,2 +0,0 @@ -info functions foo -q diff --git a/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/main.fmf b/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/main.fmf deleted file mode 100644 index 7054cbd..0000000 --- a/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/main.fmf +++ /dev/null @@ -1,17 +0,0 @@ -summary: Test for BZ#1893340 (Variadic arguments are missing from debugging data) -description: | - Bug summary: Variadic arguments are missing from debugging data when building with -flto - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1893340 -contact: Alexandra Hájková -component: -- gcc -test: ./runtest.sh -framework: beakerlib -recommend: -- gcc -- gdb -duration: 5m -link: -- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1893340 -extra-summary: /tools/gcc/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data -extra-task: /tools/gcc/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data diff --git a/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/runtest.sh b/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/runtest.sh deleted file mode 100755 index f2dd2ca..0000000 --- a/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/runtest.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data -# Description: Test for BZ#1893340 (Variadic arguments are missing from debugging data) -# Author: Alexandra Hájková -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2021 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGE="gcc" - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - rlRun "cp test.c b.gdb $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun "gcc -fPIC -shared -o libtest.so -O0 -g test.c" - rlRun "gdb -x b.gdb libtest.so > gdb.log" - rlAssertGrep "void foo(int, ...);" gdb.log - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/test.c b/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/test.c deleted file mode 100644 index 3de5962..0000000 --- a/tests/Regression/bz1893340-Variadic-arguments-are-missing-from-debugging-data/test.c +++ /dev/null @@ -1,6 +0,0 @@ -#include -void foo(int args, ...) { - va_list ap; - va_start(ap, args); - va_end(ap); -} diff --git a/tests/Regression/bz1896093-Compiling-with-flto-auto-fails-if-make-is-not/main.fmf b/tests/Regression/bz1896093-Compiling-with-flto-auto-fails-if-make-is-not/main.fmf deleted file mode 100644 index c1da31b..0000000 --- a/tests/Regression/bz1896093-Compiling-with-flto-auto-fails-if-make-is-not/main.fmf +++ /dev/null @@ -1,16 +0,0 @@ -summary: Test for BZ#1896093 (Compiling with -flto=auto fails if make is not) -description: | - Bug summary: Compiling with -flto=auto fails if make is not installed - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1896093 -contact: Alexandra Hájková -component: -- gcc -test: ./runtest.sh -framework: beakerlib -recommend: -- gcc -duration: 5m -link: -- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1896093 -extra-summary: /tools/gcc/Regression/bz1896093-Compiling-with-flto-auto-fails-if-make-is-not -extra-task: /tools/gcc/Regression/bz1896093-Compiling-with-flto-auto-fails-if-make-is-not diff --git a/tests/Regression/bz1896093-Compiling-with-flto-auto-fails-if-make-is-not/runtest.sh b/tests/Regression/bz1896093-Compiling-with-flto-auto-fails-if-make-is-not/runtest.sh deleted file mode 100755 index a23ce5c..0000000 --- a/tests/Regression/bz1896093-Compiling-with-flto-auto-fails-if-make-is-not/runtest.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz1896093-Compiling-with-flto-auto-fails-if-make-is-not -# Description: Test for BZ#1896093 (Compiling with -flto=auto fails if make is not) -# Author: Alexandra Hájková -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2020 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGE="gcc" - -rlJournalStart - rlPhaseStartSetup - MAKE_WAS_PRESENT=false - rpm -q make &>/dev/null && MAKE_WAS_PRESENT=true - rlAssertRpm $PACKAGE - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - rlRun "pushd $TmpDir" - rlRun "rpm -e --nodeps make" 0,1 - rlPhaseEnd - - rlPhaseStartTest - echo "void main() { }" | gcc -x c -flto=auto - &> log - rlAssertNotGrep "lto-wrapper: fatal error: execvp: No such file or directory" log - rlPhaseEnd - - rlPhaseStartCleanup - if $MAKE_WAS_PRESENT; then - rpm -q make &>/dev/null || rlRun "yum -y install make" - fi - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz1927579-libgfortran-seems-to-be-missing/alloc1.f90 b/tests/Regression/bz1927579-libgfortran-seems-to-be-missing/alloc1.f90 deleted file mode 100644 index 8765255..0000000 --- a/tests/Regression/bz1927579-libgfortran-seems-to-be-missing/alloc1.f90 +++ /dev/null @@ -1,5 +0,0 @@ -program test_allocated - integer :: i = 4 - real(4), allocatable :: x(:) - if (.not. allocated(x)) allocate(x(i)) -end program test_allocated diff --git a/tests/Regression/bz1927579-libgfortran-seems-to-be-missing/main.fmf b/tests/Regression/bz1927579-libgfortran-seems-to-be-missing/main.fmf deleted file mode 100644 index d6b5ead..0000000 --- a/tests/Regression/bz1927579-libgfortran-seems-to-be-missing/main.fmf +++ /dev/null @@ -1,17 +0,0 @@ -summary: Test for BZ#1927579 (libgfortran seems to be missing) -description: | - Bug summary: libgfortran seems to be missing _gfortran_os_error_at - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1927579 -contact: Alexandra Hájková -component: -- gcc -test: ./runtest.sh -framework: beakerlib -recommend: -- gcc -- gcc-gfortran -duration: 5m -link: -- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1927579 -extra-summary: /tools/gcc/Regression/bz1927579-libgfortran-seems-to-be-missing -extra-task: /tools/gcc/Regression/bz1927579-libgfortran-seems-to-be-missing diff --git a/tests/Regression/bz1927579-libgfortran-seems-to-be-missing/runtest.sh b/tests/Regression/bz1927579-libgfortran-seems-to-be-missing/runtest.sh deleted file mode 100755 index e635213..0000000 --- a/tests/Regression/bz1927579-libgfortran-seems-to-be-missing/runtest.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz1927579-libgfortran-seems-to-be-missing -# Description: Test for BZ#1927579 (libgfortran seems to be missing) -# Author: Alexandra Hájková -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2021 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGE="gcc" - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - rlRun "cp alloc1.f90 $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun "gfortran alloc1.f90" &> log - rlAssertNotGrep "alloc1.f90:(.text+0x131): undefined reference" log - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz1939638-gcc-toolset-10-libasan-devel-depends-on-the-wrong/main.fmf b/tests/Regression/bz1939638-gcc-toolset-10-libasan-devel-depends-on-the-wrong/main.fmf deleted file mode 100644 index 4cfef47..0000000 --- a/tests/Regression/bz1939638-gcc-toolset-10-libasan-devel-depends-on-the-wrong/main.fmf +++ /dev/null @@ -1,17 +0,0 @@ -summary: Test for BZ#1939638 (gcc-toolset-10-libasan-devel depends on the wrong) -description: | - Bug summary: gcc-toolset-10-libasan-devel depends on the wrong libasan - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1939638 -contact: Alexandra Hájková -component: -- gcc -test: ./runtest.sh -framework: beakerlib -recommend: -- gcc -- libasan -duration: 5m -link: -- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1939638 -extra-summary: /tools/gcc/Regression/bz1939638-gcc-toolset-10-libasan-devel-depends-on-the-wrong -extra-task: /tools/gcc/Regression/bz1939638-gcc-toolset-10-libasan-devel-depends-on-the-wrong diff --git a/tests/Regression/bz1939638-gcc-toolset-10-libasan-devel-depends-on-the-wrong/runtest.sh b/tests/Regression/bz1939638-gcc-toolset-10-libasan-devel-depends-on-the-wrong/runtest.sh deleted file mode 100755 index 1d29c6c..0000000 --- a/tests/Regression/bz1939638-gcc-toolset-10-libasan-devel-depends-on-the-wrong/runtest.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz1939638-gcc-toolset-10-libasan-devel-depends-on-the-wrong -# Description: Test for BZ#1939638 (gcc-toolset-10-libasan-devel depends on the wrong) -# Author: Alexandra Hájková -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2021 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGE="gcc" - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun "echo 'int main () { return 0; }' | gcc -xc -fsanitize=address -" &> log - rlAssertNotGrep "cannot find /usr/lib64/libasan" log - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2/main.fmf b/tests/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2/main.fmf deleted file mode 100644 index fac6ddb..0000000 --- a/tests/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2/main.fmf +++ /dev/null @@ -1,27 +0,0 @@ -summary: Test for BZ#1960701 (Wrong-code regression starting with gcc 8.2) -description: | - Bug summary: Wrong-code regression starting with gcc 8.2 - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1960701 -contact: Vaclav Kadlcik -component: -- gcc -test: bash ./runtest.sh -framework: beakerlib -require: -- gcc-c++ -duration: 15m -enabled: true -tag: - - CI-Tier-1 -link: -- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1960701 -adjust: - - enabled: false - when: distro < rhel-8 and collection is not defined - continue: false - - enabled: false - when: distro ~< rhel-8.5 and collection is not defined - continue: false -extra-nitrate: TC#0610780 -extra-summary: /tools/gcc/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2 -extra-task: /tools/gcc/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2 diff --git a/tests/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2/reproducer.cc b/tests/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2/reproducer.cc deleted file mode 100644 index 6ebd8e0..0000000 --- a/tests/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2/reproducer.cc +++ /dev/null @@ -1,14 +0,0 @@ -#include - -struct T { - unsigned a; - float b {8.}; -}; - -int main() -{ - T t = {1}; - std::vector tt = {{1}, {2}}; - if (t.a != 1 || t.b != 8.0f || tt[0].a != 1 || tt[0].b != 8.0f || tt[1].a != 2 || tt[1].b != 8.0f) - __builtin_abort (); -} diff --git a/tests/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2/runtest.sh b/tests/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2/runtest.sh deleted file mode 100755 index 9dd4ea3..0000000 --- a/tests/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2/runtest.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz1960701-Wrong-code-regression-starting-with-gcc-8-2 -# Description: Test for BZ#1960701 (Wrong-code regression starting with gcc 8.2) -# Author: Vaclav Kadlcik -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2021 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -# Notes on relevancy -# -# The test is applicable to GCCs supporting -std=c++17. In practice, -# * any supported toolset GCC -# * system GCC of RHEL 8+; however the respective fix landed in 8.5 -# and isn't planned for backporting. -# -# Suggested TCMS relevancy: -# distro < rhel-8 && collection !defined: False -# distro < rhel-8.5 && collection !defined: False - -GCC="${GCC:-$(type -P gcc)}" -PACKAGE=$(rpm --qf '%{name}\n' -qf $GCC | head -1) -PACKAGES="${PACKAGE} ${PACKAGE}-c++" - -rlJournalStart - rlPhaseStartSetup - rlLogInfo "PACKAGES=$PACKAGES" - rlLogInfo "COLLECTIONS=$COLLECTIONS" - rlAssertRpm --all - rlRun "TmpDir=\$(mktemp -d)" - rlRun "cp reproducer.cc $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun 'g++ -o reproducer -Wall -Wextra -std=c++17 reproducer.cc' - rlRun './reproducer' - rlPhaseEnd - - rlPhaseStartCleanup - rlRun 'popd' - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5/main.fmf b/tests/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5/main.fmf deleted file mode 100644 index c699de0..0000000 --- a/tests/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5/main.fmf +++ /dev/null @@ -1,16 +0,0 @@ -summary: Test for BZ#1965951 (Wrong-code regression starting with gcc 8.5) -description: | - Bug summary: Wrong-code regression starting with gcc 8.5 - Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1965951 -contact: Vaclav Kadlcik -component: -- gcc -test: ./runtest.sh -framework: beakerlib -recommend: -- gcc-c++ -duration: 15m -link: -- relates: https://bugzilla.redhat.com/show_bug.cgi?id=1965951 -extra-summary: /tools/gcc/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5 -extra-task: /tools/gcc/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5 diff --git a/tests/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5/reproducer.cc b/tests/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5/reproducer.cc deleted file mode 100644 index 40b0c81..0000000 --- a/tests/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5/reproducer.cc +++ /dev/null @@ -1,12 +0,0 @@ -#include -struct S1 { virtual ~S1() = default; }; -struct S2 { virtual void f1() = 0; }; -struct S3: S1, S2 { - void f1() { f2(); } - virtual void f2() = 0; -}; -struct S4: S3 { - void f2() { std::cout << "called\n"; } - using S2::f1; -}; -int main() { S4().f1(); } diff --git a/tests/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5/runtest.sh b/tests/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5/runtest.sh deleted file mode 100755 index d8d69d0..0000000 --- a/tests/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5/runtest.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz1965951-Wrong-code-regression-starting-with-gcc-8-5 -# Description: Test for BZ#1965951 (Wrong-code regression starting with gcc 8.5) -# Author: Vaclav Kadlcik -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2021 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -GCC="${GCC:-$(type -P gcc)}" -PACKAGE=$(rpm --qf '%{name}\n' -qf $GCC | head -1) -PACKAGES="${PACKAGE} ${PACKAGE}-c++" - -rlJournalStart - rlPhaseStartSetup - rlLogInfo "PACKAGES=$PACKAGES" - rlRun "dnf -y install $PACKAGES" 0-255 - rlAssertRpm --all - rlRun "TmpDir=\$(mktemp -d)" - rlRun "cp reproducer.cc $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun 'g++ -o reproducer reproducer.cc' - rlRun './reproducer' - rlPhaseEnd - - rlPhaseStartCleanup - rlRun 'popd' - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz576287-SystemTap-fails-to-retrieve-location-attribute-for-local-variable/main.fmf b/tests/Regression/bz576287-SystemTap-fails-to-retrieve-location-attribute-for-local-variable/main.fmf deleted file mode 100644 index 8f8346f..0000000 --- a/tests/Regression/bz576287-SystemTap-fails-to-retrieve-location-attribute-for-local-variable/main.fmf +++ /dev/null @@ -1,26 +0,0 @@ -summary: SystemTap fails to retrieve location attribute for local variable -description: '' -contact: mcermak@redhat.com -component: - - gcc - - systemtap -test: bash ./runtest.sh -framework: beakerlib -require: - - gcc - - systemtap - - kernel-devel - - kernel-headers -duration: 50m -enabled: true -tag: - - CI-Tier-1 - - STAP-EWA - - mcu_stap - - mcu_stap_6g - - mcu_stap_7g -link: - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=576287 -extra-nitrate: TC#0062256 -extra-summary: /tools/gcc/Regression/gcc/bz576287-SystemTap-fails-to-retrieve-location-attribute-for-local-variable -extra-task: /tools/gcc/Regression/gcc/bz576287-SystemTap-fails-to-retrieve-location-attribute-for-local-variable diff --git a/tests/Regression/bz576287-SystemTap-fails-to-retrieve-location-attribute-for-local-variable/runtest.sh b/tests/Regression/bz576287-SystemTap-fails-to-retrieve-location-attribute-for-local-variable/runtest.sh deleted file mode 100755 index 0003300..0000000 --- a/tests/Regression/bz576287-SystemTap-fails-to-retrieve-location-attribute-for-local-variable/runtest.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2010 Red Hat, Inc. All rights reserved. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGE="gcc" - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - kernel_uname="$(uname -a | awk '{ print $3 }')" - kernel_arch="$(uname -a | awk '{ print $12 }')" - echo kernel_arch: $kernel_arch - kernel_version="$(echo ${kernel_uname} | sed 's/-/ /' | awk '{ print $1 }')" - echo kernel_version: $kernel_version - kernel_release="$(echo ${kernel_uname} | sed 's/-/ /' | awk '{ print $2 }' | sed 's/\./ /g' | awk '{ print $1,".",$2 }' | sed 's/ //g')" - echo kernel_release_1: $kernel_release - if $(echo ${kernel_release} | grep -iq PAE); then - kernel_release="$(echo ${kernel_release} | sed 's/PAE//g' | sed 's/pae//g')" - PAE="PAE-" - fi - echo kernel_release_2: $kernel_release - if rlIsRHEL 6; then - arch="${kernel_arch}-" - fi - kernel_debug="http://download.devel.redhat.com/brewroot/packages/kernel/${kernel_version}/${kernel_release}/${kernel_arch}/kernel-${PAE}debuginfo-${kernel_version}-${kernel_release}.${kernel_arch}.rpm" - kernel_debug_common="http://download.devel.redhat.com/brewroot/packages/kernel/${kernel_version}/${kernel_release}/${kernel_arch}/kernel-debuginfo-common-${arch}${kernel_version}-${kernel_release}.${kernel_arch}.rpm" - echo ">>> $kernel_debug $kernel_debug_common" - debuginfo-install -y kernel - rpmquery kernel-debuginfo || rpm -ivh ${kernel_debug} ${kernel_debug_common} - rlPhaseEnd - - rlPhaseStartTest opt-O$opt - rlRun "stap -vvvv -p2 -e 'probe kernel.function(\"sig_ignored\") {println($$parms)}' 2>&1 | grep 'variable location problem'" 1 "gcc produced good enough debuginfo w/o 'variable location problem'" - rlPhaseEnd - - rlPhaseStartCleanup - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template/f.cc b/tests/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template/f.cc deleted file mode 100644 index 7b815cd..0000000 --- a/tests/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template/f.cc +++ /dev/null @@ -1,15 +0,0 @@ -template int func (void); - -template struct Foo -{ - static const unsigned int a = sizeof (T); - - //enum { b = a }; - - enum - { - c = sizeof (func < (a == 0) > ()) - }; -}; - -Foo x; diff --git a/tests/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template/main.fmf b/tests/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template/main.fmf deleted file mode 100644 index 4ad6875..0000000 --- a/tests/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template/main.fmf +++ /dev/null @@ -1,28 +0,0 @@ -summary: Try to compile a program that has a template parameter with a boolean expression - involving a templated static constant -description: '' -contact: mcermak@redhat.com -component: - - gcc -test: bash ./runtest.sh -path: /tests/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template -framework: beakerlib -require: - - gcc - - gcc-c++ - - file -duration: 5m -enabled: true -tier: '1' -link: - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=703059 -tag: - - CI-Tier-1 - - DTS8-INTEROP-CI - - DTS9-INTEROP-CI - - Tier1 - - dts_smoke - - dts_stable -extra-nitrate: TC#0111110 -extra-summary: /tools/gcc/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template -extra-task: /tools/gcc/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template diff --git a/tests/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template/runtest.sh b/tests/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template/runtest.sh deleted file mode 100755 index 8f50b77..0000000 --- a/tests/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template/runtest.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Regression/bz703059-g-fails-to-compile-a-program-that-has-a-template -# Description: Try to compile a program that has a template parameter with a boolean expression involving a templated static constant -# Author: Marek Polacek -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2011, 2012 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -GXX=${GXX:-g++} - -rlJournalStart - rlPhaseStartSetup - rlLog "GXX = $GXX" - rlLog "Installed within `rpmquery -f $(which $GXX)`" - rlRun "TmpDir=\`mktemp -d\`" - rlRun "cp -v f.cc $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun "$GXX -c f.cc" - rlAssertExists "f.o" - rlRun "file f.o | grep ELF" # Basic obj file sanity check - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/unused_parameter_warning/main.fmf b/tests/Regression/unused_parameter_warning/main.fmf deleted file mode 100644 index b589e98..0000000 --- a/tests/Regression/unused_parameter_warning/main.fmf +++ /dev/null @@ -1,31 +0,0 @@ -summary: Check to see if g++ throws unused parameter warnings with standard libraries - with option -Wall -contact: mcermak@redhat.com -component: - - gcc -test: bash ./runtest.sh -path: /tests/Regression/unused_parameter_warning -framework: beakerlib -require: - - gcc-c++ - - glibc-devel - - libstdc++-devel -recommend: - - gcc44-c++ - - glibc-devel.ppc64 - - glibc-devel.ppc - - libstdc++43-devel.ppc - - libstdc++44-devel.ppc - - libstdc++-devel.ppc -duration: 10m -enabled: true -tier: '1' -link: - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=201342 -tag: - - CI-Tier-1 - - Tier1 - - dts_stable -extra-nitrate: TC#0062265 -extra-summary: /tools/gcc/c++/unused_parameter_warning -extra-task: /tools/gcc/c++/unused_parameter_warning diff --git a/tests/Regression/unused_parameter_warning/runtest.sh b/tests/Regression/unused_parameter_warning/runtest.sh deleted file mode 100755 index 4a5d2fb..0000000 --- a/tests/Regression/unused_parameter_warning/runtest.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/rhts-library/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2009, 2012 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# g++ - check for unused parameter warning -# expected exit code is 0 -# -# Author: Sachin Prabhu -# Maintainer: Marek Polacek - - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGES=(gcc gcc-c++ grep) - -GXX=${GXX:-g++} - -rlJournalStart - rlPhaseStartSetup - for p in "${PACKAGES[@]}"; do - rlAssertRpm "$p" - done; unset p - rlLog "GXX = $GXX" - rlLog "Installed within `rpmquery -f $(which $GXX)`" - rlRun "TmpDir=\`mktemp -d\`" - rlRun "cp -v test.cpp $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest - rlRun "$GXX -W -Wall -o test.bin test.cpp &> output" - cat output - rlRun "grep -E 'warning:\W+unused\W+parameter' -q output" 1 "'warning: unused parameter' not present" - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Regression/unused_parameter_warning/test.cpp b/tests/Regression/unused_parameter_warning/test.cpp deleted file mode 100644 index 15d375b..0000000 --- a/tests/Regression/unused_parameter_warning/test.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#include -int main() {} diff --git a/tests/Sanity/compile-rpm/main.fmf b/tests/Sanity/compile-rpm/main.fmf deleted file mode 100644 index 4685e4a..0000000 --- a/tests/Sanity/compile-rpm/main.fmf +++ /dev/null @@ -1,45 +0,0 @@ -summary: Compile a Red Hat RPM package. -description: '' -contact: mcermak@redhat.com -component: - - gcc -test: bash ./runtest.sh -path: /tests/Sanity/compile-rpm -framework: beakerlib -require: - - autoconf - - bison - - dejagnu - - elfutils-libelf-devel - - expat-devel - - flex - - gcc - - gdb - - glibc-devel - - grep - - libselinux-devel - - make - - mpfr-devel - - ncurses-devel - - python-devel - - readline-devel - - rpm-build - - rpm-devel - - texinfo - - xz-devel - - yum-utils - - zlib-devel -duration: 240m -adjust: - - require+: - - ncurses-devel.i686 - - ncurses-devel.x86_64 - when: arch == x86_64 - - enabled: false - # Too "heavy" for Fedora CI (for now) - when: distro == fedora and trigger is defined - continue: false -enabled: true -extra-nitrate: TC#0142522 -extra-summary: /tools/gcc/Sanity/compile-rpm -extra-task: /tools/gcc/Sanity/compile-rpm diff --git a/tests/Sanity/compile-rpm/runtest.sh b/tests/Sanity/compile-rpm/runtest.sh deleted file mode 100755 index 5f68e75..0000000 --- a/tests/Sanity/compile-rpm/runtest.sh +++ /dev/null @@ -1,99 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Sanity/compile-rpm -# Description: Compile a Red Hat RPM package. -# Author: Marek Polacek -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2012 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -GCC=${GCC:-gcc} - -# Set the variabile UNDER_DTS on non-empty string, when run under devtoolset. -if $( echo `which gcc` | grep -qE '/opt/rh/' ); then - UNDER_DTS="true" - # Set the actual version of DTS - DTS=`which gcc | awk 'BEGIN { FS="/" } { print $4 }'` -fi - -rlJournalStart - rlPhaseStartSetup - # Work around troubles with buildroot packages being out-of-sync - if rlIsRHEL; then - rlMountRedhat - for i in libipt source-highlight libbabeltrace; do - rpm -q $i &>/dev/null || rlRun "yum -y install $i" 0-255 - rpm -q ${i}-devel &>/dev/null || rlRun "yum -y install ${i}-devel" 0-255 - d=/mnt/redhat/brewroot/packages/$i - if rpm -q $i &>/dev/null && ! rpm -q ${i}-devel &>/dev/null; then - if [[ -e /mnt/redhat/brewroot/packages/$i ]]; then - d=/mnt/redhat/brewroot/packages/$i - else - d=/mnt/redhat/brewroot/packages/${i#lib} - fi - rlRun "yum -y install $d/$(rpm -q --qf='%{VERSION}/%{RELEASE}/%{ARCH}' $i)/${i}-devel-$(rpm -q --qf='%{VERSION}-%{RELEASE}.%{ARCH}' $i).rpm" - fi - done - fi - - rlRun "TmpDir=\$(mktemp -d)" - rlRun "pushd $TmpDir" - - if [ -z ${UNDER_DTS} ]; then - rlFetchSrcForInstalled gdb || yumdownloader --source gdb - else - rlFetchSrcForInstalled $DTS-gdb || yumdownloader --source $DTS-gdb - fi - - if [ -z ${UNDER_DTS} ]; then - srpm=$(rpmquery gdb --queryformat=%{NAME}-%{VERSION}-%{RELEASE})".src.rpm" - else - srpm=$(rpmquery $DTS-gdb --queryformat=%{NAME}-%{VERSION}-%{RELEASE})".src.rpm" - fi - rlRun "rpm -Uvh $srpm" - spec_dir=$(rpm --eval=%_specdir) - build_dir=$(rpm --eval=%_builddir) - - if [ -z ${UNDER_DTS} ]; then - pkg_dir=$(rpmquery gdb} --queryformat=%{NAME}-%{VERSION}) - else - pkg_dir=$(rpmquery $DTS-gdb} --queryformat=%{NAME}-%{VERSION}) - fi - - yum-builddep -y $spec_dir/gdb.spec - rlPhaseEnd - - rlPhaseStartTest - rlRun "CC=$GCC rpmbuild -bb $spec_dir/gdb.spec &> BUILD_LOG" - test $? -eq 0 || tail -n 20 BUILD_LOG - rlPhaseEnd - - rlPhaseStartCleanup - rlBundleLogs "Build-log" BUILD_LOG - rlRun "popd" - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Sanity/libitm-smoke/bins_aarch64.tar.gz b/tests/Sanity/libitm-smoke/bins_aarch64.tar.gz deleted file mode 100644 index d528f03..0000000 Binary files a/tests/Sanity/libitm-smoke/bins_aarch64.tar.gz and /dev/null differ diff --git a/tests/Sanity/libitm-smoke/bins_i686.tar.gz b/tests/Sanity/libitm-smoke/bins_i686.tar.gz deleted file mode 100644 index ce0e948..0000000 Binary files a/tests/Sanity/libitm-smoke/bins_i686.tar.gz and /dev/null differ diff --git a/tests/Sanity/libitm-smoke/bins_ppc64.tar.gz b/tests/Sanity/libitm-smoke/bins_ppc64.tar.gz deleted file mode 100644 index 0589c6a..0000000 Binary files a/tests/Sanity/libitm-smoke/bins_ppc64.tar.gz and /dev/null differ diff --git a/tests/Sanity/libitm-smoke/bins_ppc64le.tar.gz b/tests/Sanity/libitm-smoke/bins_ppc64le.tar.gz deleted file mode 100644 index b8e9215..0000000 Binary files a/tests/Sanity/libitm-smoke/bins_ppc64le.tar.gz and /dev/null differ diff --git a/tests/Sanity/libitm-smoke/bins_s390x.tar.gz b/tests/Sanity/libitm-smoke/bins_s390x.tar.gz deleted file mode 100644 index 742a917..0000000 Binary files a/tests/Sanity/libitm-smoke/bins_s390x.tar.gz and /dev/null differ diff --git a/tests/Sanity/libitm-smoke/bins_x86_64.tar.gz b/tests/Sanity/libitm-smoke/bins_x86_64.tar.gz deleted file mode 100644 index e884185..0000000 Binary files a/tests/Sanity/libitm-smoke/bins_x86_64.tar.gz and /dev/null differ diff --git a/tests/Sanity/libitm-smoke/main.fmf b/tests/Sanity/libitm-smoke/main.fmf deleted file mode 100644 index 06bf77d..0000000 --- a/tests/Sanity/libitm-smoke/main.fmf +++ /dev/null @@ -1,34 +0,0 @@ -summary: Just runs prebuilt binaries -description: | - Just running prebuilt binaries that require libitm. - This test is designed to run in gcc-libraries CI. we - cannot build anything on our own, since we don't have - devtoolset's gcc and -devel libraries. - - This should run OK on RHEL-6 and RHEL-7, currently all - arches. - - The sources of the tests are in Sanity/libitm-sanity. - !!! THIS TEST IS INTENTIONALLY NOT IN gcc General PLAN !!! -contact: Michael Petlan -component: - - gcc - - gcc-libraries -test: bash ./runtest.sh -framework: beakerlib -require: - - gcc - - libitm -recommend: - - gcc-libraries -duration: 5m -enabled: true -tag: - - CI-Tier-1 -adjust: - - enabled: false - when: distro == rhel-6 and arch == s390x - continue: false -extra-nitrate: TC#0539542 -extra-summary: /tools/gcc/Sanity/libitm-smoke -extra-task: /tools/gcc/Sanity/libitm-smoke diff --git a/tests/Sanity/libitm-smoke/runtest.sh b/tests/Sanity/libitm-smoke/runtest.sh deleted file mode 100755 index 8c78f78..0000000 --- a/tests/Sanity/libitm-smoke/runtest.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/bash -# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Sanity/libitm-smoke -# Description: Just runs prebuilt binaries -# Author: Michael Petlan -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2016 Red Hat, Inc. -# -# This program is free software: you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation, either version 2 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see http://www.gnu.org/licenses/. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -# Relevant for any system with libitm binary compatible with the attached -# binaries. -# Suggested TCMS relevancy: -# distro = rhel-6 && arch = s390x: False - -PACKAGE="gcc" -REALLY_WANT_TO_RUN="true" - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - if [ "$BASEOS_CI" = "true" ]; then - # in CI, we need to be able to skip this testcase - # in case libitm is not a part of gcc-libraries - rlCheckRpm "libitm" || REALLY_WANT_TO_RUN="false" - else - rlCheckRpm "libitm" || rlRun "yum install -y libitm" 0 "Installing missing libitm" - rlAssertRpm "libitm" - fi - TARBALL="bins_`arch`.tar.gz" - if [ ! -f $TARBALL ]; then - rlDie "We do not have binaries for your arch (`arch`)" - fi - rlRun "zcat $TARBALL | tar x" - rlRun "pushd bins" - rlPhaseEnd - - if [ "$REALLY_WANT_TO_RUN" = "true" ]; then - rlPhaseStartTest - for i in T_*; do - rlRun "./$i" - done - rlPhaseEnd - else - rlPhaseStartTest - rlPass "SKIPPING THIS TEST -- libitm is probably not shipped within current gcc-libraries" - rlPhaseEnd - fi - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -rf bins" 0 "Removing the stuff we created" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Sanity/rebuild-binutils/main.fmf b/tests/Sanity/rebuild-binutils/main.fmf deleted file mode 100644 index 8c05e0a..0000000 --- a/tests/Sanity/rebuild-binutils/main.fmf +++ /dev/null @@ -1,70 +0,0 @@ -summary: Rebuild binutils. -description: '' -contact: mcermak@redhat.com -component: - - gcc -test: bash ./runtest.sh -path: /tests/Sanity/rebuild-binutils -framework: beakerlib -require: - - autoconf - - automake - - binutils - - gcc - - glibc - - glibc-devel - - glibc-static - - libstdc++ - - libstdc++-devel - - libstdc++-static - - perl - - rpm-build - - sharutils - - texinfo - - yum-utils - - zlib-devel - - zlib-static -recommend: - - glibc-devel.ppc - - glibc-devel.s390 - - glibc-static.ppc - - glibc-static.s390 - - libgcc.ppc - - libgcc.s390 - - libstdc++-devel.ppc - - libstdc++-devel.s390 - - libstdc++.ppc - - libstdc++.s390 - - libstdc++-static.ppc - - libstdc++-static.s390 - - zlib-devel.ppc - - zlib-static.ppc - - dnf-utils - - yum-utils -duration: 3h -enabled: true -adjust: - - require+: - - glibc-devel.i686 - - glibc-devel.x86_64 - - glibc-static.i686 - - glibc-static.x86_64 - - libgcc.i686 - - libgcc.x86_64 - - libstdc++-devel.i686 - - libstdc++-devel.x86_64 - - libstdc++.i686 - - libstdc++.x86_64 - - libstdc++-static.i686 - - libstdc++-static.x86_64 - when: arch == x86_64 - - enabled: false - when: distro == rhel-6 and collection is defined - continue: false - - enabled: false - # Too "heavy" for Fedora CI (for now) - when: distro == fedora and trigger is defined - continue: false -extra-nitrate: TC#0147459 -extra-summary: /tools/gcc/Sanity/rebuild-binutils -extra-task: /tools/gcc/Sanity/rebuild-binutils diff --git a/tests/Sanity/rebuild-binutils/runtest.sh b/tests/Sanity/rebuild-binutils/runtest.sh deleted file mode 100755 index 714ac4d..0000000 --- a/tests/Sanity/rebuild-binutils/runtest.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Sanity/rebuild-binutils -# Description: Rebuild binutils. -# Author: Marek Polacek -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2012 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -# The test is expected to fail in devtoolset-* on RHEL-6 because of -# the "Unresolvable `R_X86_64_NONE` relocation" family of bugs, e.g. -# https://bugzilla.redhat.com/show_bug.cgi?id=1545386 -# They have been fixed for both the base and devtoolset binutils -# on RHEL-7 but on RHEL-6, it was just the base binutils. - -GCC=${GCC:-gcc} - -# Set the variabile UNDER_DTS on non-empty string, when run under devtoolset. -if $( echo `which gcc` | grep -qE '/opt/rh/' ); then - UNDER_DTS="true" - # Set the actual version of DTS - DTS=`which gcc | awk 'BEGIN { FS="/" } { print $4 }'` -fi - -rlJournalStart - rlPhaseStartSetup - rlLog "Using GCC: `rpmquery -f $(which $GCC)`" - rlRun "rpmquery -a | grep -e yum-utils -e dnf-utils" 0 "YUM or DNF utils are installed" - rlRun "TmpDir=\$(mktemp -d)" - rlRun "pushd $TmpDir" - - if [ -z ${UNDER_DTS} ]; then - rlFetchSrcForInstalled binutils || yumdownloader --source binutils - srpm=$(find binutils*.src.rpm | tail -n1) - else - rlFetchSrcForInstalled $DTS-binutils || yumdownloader --source $DTS-binutils - srpm=$(find $DTS-binutils*.src.rpm | tail -n1) - fi - rlRun "rpm -Uvh $srpm" - spec_dir=$(rpm --eval=%_specdir) - yum-builddep -y $spec_dir/binutils.spec - rlPhaseEnd - - rlPhaseStartTest - if [ "$(uname -i)" == "ppc64" ]; then - if rlIsRHEL 6; then - target='--target=ppc64' - else - target='--target=ppc' - fi - fi - if [ "$(uname -i)" == "i386" ]; then - target='--target=i686' - fi - - rlRun "setsebool allow_execmod 1" - rlRun "CC=$GCC rpmbuild -bb $target --clean $spec_dir/binutils.spec &> BUILD_LOG" || ( echo "========== BUILD_LOG tail ==========" ; tail -n 20 BUILD_LOG ) - rlRun "setsebool allow_execmod 0" - rlPhaseEnd - - rlPhaseStartCleanup - rlBundleLogs "Build-log" BUILD_LOG - rlRun "popd" - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Sanity/rebuild-glibc/main.fmf b/tests/Sanity/rebuild-glibc/main.fmf deleted file mode 100644 index ea649f0..0000000 --- a/tests/Sanity/rebuild-glibc/main.fmf +++ /dev/null @@ -1,84 +0,0 @@ -description: | - Rebuild current glibc. -summary: Rebuild glibc -contact: mcermak@redhat.com -component: - - gcc -test: bash ./runtest.sh -path: /tests/Sanity/rebuild-glibc -framework: beakerlib -require: - - audit-libs-devel - - binutils - - bison - - gcc - - gcc-c++ - - gd-devel - - glibc-devel - - glibc-static - - glibc-utils - - libcap-devel - - libgcc - - libpng-devel - - libstdc++ - - libstdc++-devel - - libstdc++-static - - libXpm-devel - - nspr-devel - - nss-devel - - nss-softokn-devel - - nss-util-devel - - python3-devel - - rpm-build - - systemtap-sdt-devel - - texinfo - - valgrind - - yum-utils -recommend: - - glibc-devel.ppc - - glibc-devel.s390 - - glibc-static.ppc - - glibc-static.s390 - - libgcc.ppc - - libgcc.s390 - - libstdc++-devel.ppc - - libstdc++-devel.s390 - - libstdc++.ppc - - libstdc++.s390 - - libstdc++-static.ppc - - libstdc++-static.s390 - - dnf-utils - - yum-utils -duration: 18h -enabled: true -tag: - - NoDTS - - rhel8-buildroot -adjust: - - require+: - - glibc-devel.i686 - - glibc-devel.x86_64 - - glibc-static.i686 - - glibc-static.x86_64 - - libgcc.i686 - - libgcc.x86_64 - - libstdc++-devel.i686 - - libstdc++-devel.x86_64 - - libstdc++.i686 - - libstdc++.x86_64 - - libstdc++-static.i686 - - libstdc++-static.x86_64 - when: arch == x86_64 - - require-: - - python3-devel - when: distro < rhel-8 - - enabled: false - when: collection is defined - continue: false - - enabled: false - # Too "heavy" for Fedora CI (for now) - when: distro == fedora and trigger is defined - continue: false -extra-nitrate: TC#0035677 -extra-summary: /tools/gcc/Sanity/rebuild-glibc -extra-task: /tools/gcc/Sanity/rebuild-glibc diff --git a/tests/Sanity/rebuild-glibc/runtest.sh b/tests/Sanity/rebuild-glibc/runtest.sh deleted file mode 100755 index 52255c5..0000000 --- a/tests/Sanity/rebuild-glibc/runtest.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2009, 2012 Red Hat, Inc. All rights reserved. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -# Author: Michal Nowak -# Rewrite: Marek Polacek - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -cpu_good_for_make_check () { - # glibc can create several alternative CPU-specific bits that are selected - # in runtime. However the "make check" phase tries to test all of them and - # fails when testing a more "advanced" binary than the SUT's CPU. In such - # case we'd want to skip "make check" to prevent "rpmbuild" from a certain - # failure. - if rlIsRHEL '>=8' && [[ $(arch) = ppc64le ]] && grep -q 'POWER[2-8]' /proc/cpuinfo; then - rlLogInfo 'RHEL8+ on BUILD_LOG" - test $? -eq 0 || tail -n 20 BUILD_LOG - rlPhaseEnd - - rlPhaseStartCleanup - rlBundleLogs "Build-log" BUILD_LOG - rlRun "popd" - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Sanity/test-m32-m64-options/clear_cache.c b/tests/Sanity/test-m32-m64-options/clear_cache.c deleted file mode 100644 index b10479f..0000000 --- a/tests/Sanity/test-m32-m64-options/clear_cache.c +++ /dev/null @@ -1,7 +0,0 @@ -int -main (void) -{ - char *mem = __builtin_alloca (40); - __builtin___clear_cache (mem, mem + 40); - return 0; -} diff --git a/tests/Sanity/test-m32-m64-options/cpp11.cpp b/tests/Sanity/test-m32-m64-options/cpp11.cpp deleted file mode 100644 index 0d57b57..0000000 --- a/tests/Sanity/test-m32-m64-options/cpp11.cpp +++ /dev/null @@ -1,78 +0,0 @@ -template -class X -{ - T p; -public: - template auto f() -> decltype(+p) { return p; } -}; - -struct A -{ - int i = 42; -}; - -struct B -{ - int i = 42; - B() { } - B(int i): i(i) { } -}; - -template -struct C -{ - T m = t; -}; - -template -struct D -{ - T m = t; - D() { } - D(T m):m(m) { } -}; - -struct complex -{ - typedef float value_type; - typedef __complex__ float _ComplexT; - - constexpr complex(_ComplexT __z) : _M_value(__z) { } - - constexpr complex(float __r = 0.0f, float __i = 0.0f) - : _M_value(__r + __i * 1.0f) { } - -private: - _ComplexT _M_value; -}; - -constexpr complex c1; - -int -main (void) -{ - X().f(); - A a1; - if (a1.i != 42) return 1; - A a2{}; - if (a2.i != 42) return 2; - A a3[1]; - if (a3[0].i != 42) return 3; - - B b1; - if (b1.i != 42) return 3; - B b2 (24); - if (b2.i != 24) return 4; - - C c1; - if (c1.m != 3) return 5; - C c2 {}; - if (c2.m != 5) return 6; - - D d1; - if (d1.m != 3) return 7; - D d2 (5) ; - if (d2.m != 5) return 8; - - return 0; -} diff --git a/tests/Sanity/test-m32-m64-options/hello.c b/tests/Sanity/test-m32-m64-options/hello.c deleted file mode 100644 index 98a53b6..0000000 --- a/tests/Sanity/test-m32-m64-options/hello.c +++ /dev/null @@ -1,8 +0,0 @@ -#include - -int -main (void) -{ - puts ("Hello World!"); - return 0; -} diff --git a/tests/Sanity/test-m32-m64-options/hello.cpp b/tests/Sanity/test-m32-m64-options/hello.cpp deleted file mode 100644 index 0f2234e..0000000 --- a/tests/Sanity/test-m32-m64-options/hello.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include - -int -main (void) -{ - std::cout << "Hello, world!\n"; -} diff --git a/tests/Sanity/test-m32-m64-options/hello.f90 b/tests/Sanity/test-m32-m64-options/hello.f90 deleted file mode 100644 index afabbb2..0000000 --- a/tests/Sanity/test-m32-m64-options/hello.f90 +++ /dev/null @@ -1,3 +0,0 @@ - program hello - print *, "Hello World!" - end program hello diff --git a/tests/Sanity/test-m32-m64-options/lambda-template.C b/tests/Sanity/test-m32-m64-options/lambda-template.C deleted file mode 100644 index 6f3b4e8..0000000 --- a/tests/Sanity/test-m32-m64-options/lambda-template.C +++ /dev/null @@ -1,41 +0,0 @@ -// { dg-options -std=c++0x } -// { dg-do run } - -extern "C" void abort(); - -template -auto apply (T t) -> decltype (t()) -{ - return t(); -} - -template -void f(T t) -{ - T t2 = t; - if (t != [=]()->T { return t; }()) - abort (); - if (t != [=] { return t; }()) - abort (); - if (t != [=] { return t2; }()) - abort (); - if (t != [&] { return t; }()) - abort (); - if (t != apply([=]{return t;})) - abort (); - - int i; - [&] (int a) { return a+i+t; } (0); - [&] (int a) -> decltype(a) { return a+i+t; } (0); - [&] (int a) -> decltype(i) { return a+i+t; } (0); - [&] (int a) -> decltype(t) { return a+i+t; } (0); - [&] (int a) -> decltype(a+i) { return a+i+t; } (0); - [&] (int a) -> decltype(a+t) { return a+i+t; } (0); - [&] (int a) -> decltype(i+t) { return a+i+t; } (0); - [&] (int a) -> decltype(a+i+t) { return a+i+t; } (0); -} - -int main() -{ - f(0xbeef); -} diff --git a/tests/Sanity/test-m32-m64-options/main.fmf b/tests/Sanity/test-m32-m64-options/main.fmf deleted file mode 100644 index cef912f..0000000 --- a/tests/Sanity/test-m32-m64-options/main.fmf +++ /dev/null @@ -1,58 +0,0 @@ -summary: Try -m32 and -m64 options. -description: Try -m32 and -m64 options -contact: mcermak@redhat.com -component: - - gcc -test: bash ./runtest.sh -path: /tests/Sanity/test-m32-m64-options -framework: beakerlib -require: - - gcc - - gcc-c++ - - gcc-gfortran - - glibc-devel - - libgfortran - - libgomp - - libstdc++-devel - - libitm -recommend: - - libgfortran5 - - libitm-devel - - libquadmath-devel -duration: 20m -enabled: true -link: - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=1113429 -adjust: - - enabled: false - when: arch == ia64, ppc64, s390, s390x - continue: false - - enabled: false - when: arch == aarch64 - continue: false - because: no -m64 nor -m32 there - - require+: - - glibc-devel.x86_64 - - glibc-devel.i686 - - libgfortran.x86_64 - - libgfortran.i686 - - libstdc++-devel.x86_64 - - libstdc++-devel.i686 - - libitm.x86_64 - - libitm.i686 - - libgomp.x86_64 - - libgomp.i686 - - libquadmath.x86_64 - - libquadmath.i686 - when: arch == x86_64 - - recommend+: - - libgfortran5.x86_64 - - libgfortran5.i686 - - libitm-devel.x86_64 - - libitm-devel.i686 - - libquadmath-devel.x86_64 - - libquadmath-devel.i686 - when: arch == x86_64 -extra-nitrate: TC#0197178 -extra-summary: /tools/gcc/Sanity/test-m32-m64-options -extra-task: /tools/gcc/Sanity/test-m32-m64-options diff --git a/tests/Sanity/test-m32-m64-options/omphello.c b/tests/Sanity/test-m32-m64-options/omphello.c deleted file mode 100644 index 85b591f..0000000 --- a/tests/Sanity/test-m32-m64-options/omphello.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include - -int -main (void) -{ - int th_id; - int nthreads; - - #pragma omp parallel private(th_id) - { - th_id = omp_get_thread_num (); - printf ("Hello World from thread %d\n", th_id); - - #pragma omp barrier - if (th_id == 0) - { - nthreads = omp_get_num_threads (); - printf ("There are %d threads\n", nthreads); - } - } - return EXIT_SUCCESS; -} diff --git a/tests/Sanity/test-m32-m64-options/quad.c b/tests/Sanity/test-m32-m64-options/quad.c deleted file mode 100644 index f9e5ef1..0000000 --- a/tests/Sanity/test-m32-m64-options/quad.c +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include -#include - -int -main (void) -{ - __float128 r = strtoflt128 ("1.23456789", NULL); - - int prec = 20; - int width = 46; - char buf[128]; - - r = 2.0q; - r = sqrtq (r); - int n = quadmath_snprintf (buf, sizeof buf, "%+-#*.20Qe", width, r); - if ((size_t) n < sizeof buf) - /* Prints: +1.41421356237309504880e+00. */ - printf ("%s\n", buf); - quadmath_snprintf (buf, sizeof buf, "%Qa", r); - if ((size_t) n < sizeof buf) - /* Prints: 0x1.6a09e667f3bcc908b2fb1366ea96p+0. */ - printf ("%s\n", buf); - n = quadmath_snprintf (NULL, 0, "%+-#46.*Qe", prec, r); - if (n > -1) - { - char *str = malloc (n + 1); - if (str) - { - quadmath_snprintf (str, n + 1, "%+-#46.*Qe", prec, r); - /* Prints: +1.41421356237309504880e+00. */ - printf ("%s\n", str); - } - free (str); - } - - return 0; -} diff --git a/tests/Sanity/test-m32-m64-options/runtest.sh b/tests/Sanity/test-m32-m64-options/runtest.sh deleted file mode 100755 index 31b8241..0000000 --- a/tests/Sanity/test-m32-m64-options/runtest.sh +++ /dev/null @@ -1,167 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Sanity/test-m32-m64-options -# Description: Try -m32 and -m64 options. -# Author: Marek Polacek -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2012 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# In this test, we try to compile and run programs using -m32 and -m64. -# We compile C, C++ and Fortran Hello World programs. Also, there are two -# proglets which are exercising some C++11 features. Furthermore, we try -# -fgnu-tm, -fopenmp options. We also use libquadmath a little bit. -# We call a function from libgcc. We also use the __thread keyword. - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -GCC=${GCC:-$(type -P gcc)} -GCC_RPM_NAME=$(rpm --qf '%{name}' -qf $GCC) - -[[ "$GCC_RPM_NAME" == *toolset* ]] && TOOLSET=${GCC_RPM_NAME%-gcc} || TOOLSET='' - -if [ -n "`rlGetPrimaryArch`" ]; then - PRI_ARCH=$(rlGetPrimaryArch) -else - PRI_ARCH="$(uname -i)" -fi - -# State applicable -m switches -SWITCHES='-m64 -m32' -case "$PRI_ARCH" in - i686) - SWITCHES=-m32 # just base RHEL-6/i386 - ;; - ppc64le) # we never had 32 support there - SWITCHES=-m64 - ;; - aarch64) - # Not only we never had 32-bit support there, GCC on this architecture - # doesn't accept the -m64 switch either. This test isn't applicable - # at all and should be excluded by its relevancy, e.g. in TCMS: - # arch = aarch64: False - exit 1 - ;; - ppc64|s390x) # 32-bit support present only in system GCC of RHEL <8 - if [[ -z "$TOOLSET" ]] && rlIsRHEL '<8'; then - if [[ "$PRI_ARCH" != s390x ]]; then - SWITCHES='-m64 -m32' - else - SWITCHES='-m64 -m31' - fi - else - SWITCHES=-m64 - fi - ;; -esac - -rlJournalStart - rlPhaseStartSetup - rlLogInfo "COLLECTIONS=$COLLECTIONS" - rlLogInfo "GCC=$GCC" - rlLogInfo "SKIP_COLLECTION_METAPACKAGE_CHECK=$SKIP_COLLECTION_METAPACKAGE_CHECK" - - # We optionally need to skip checking for the presence of the metapackage - # because that would pull in all the dependent toolset subrpms. We do not - # always want that, especially in CI. - _COLLECTIONS="$COLLECTIONS" - if ! test -z $SKIP_COLLECTION_METAPACKAGE_CHECK; then - for c in $SKIP_COLLECTION_METAPACKAGE_CHECK; do - rlLogInfo "ignoring metapackage check for collection $c" - export COLLECTIONS=$(shopt -s extglob && echo ${COLLECTIONS//$c/}) - done - fi - rlLogInfo "(without skipped) COLLECTIONS=$COLLECTIONS" - export COLLECTIONS="$_COLLECTIONS" - - rlRun "TmpDir=\$(mktemp -d)" - rlRun "cp -v hello.{c,cpp,f90} tm.c quad.c thr-init-2.c clear_cache.c omphello.c lambda-template.C cpp11.cpp $TmpDir" - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartSetup "Showing compiler versions" - for compiler in gcc g++ gfortran; do - rlLogInfo "Version of compiler: $compiler" - eval "$compiler --version 2>&1" | while read line; do - rlLogInfo " $line" - done - done - rlPhaseEnd - - for m in $SWITCHES; do - rlPhaseStartTest "Compile and run [$m]" - - # Test C - rlRun "gcc $m hello.c -o hello_c" - rlRun ./hello_c - - # Test C++ - rlRun "g++ $m hello.cpp -o hello_cpp" - rlRun ./hello_cpp - - # C++11 features. Not available in system GCC of RHEL-6 - if ! rlIsRHEL 6 || [[ -n "$TOOLSET" ]]; then - rlRun "g++ $m -std=c++11 lambda-template.C -o lambda" - rlRun ./lambda - - rlRun "g++ $m -std=c++11 cpp11.cpp -o cpp11" - rlRun ./cpp11 - fi - - # Test Fortran - rlRun "gfortran $m hello.f90 -o hello_fortran" - rlRun "./hello_fortran" - - # Test TM. Not available in system GCC of RHEL-6 - if ! rlIsRHEL 6 || [[ -n "$TOOLSET" ]]; then - rlRun "gcc $m -O2 -std=gnu99 -fgnu-tm tm.c -o tm" - rlRun ./tm - fi - - # Test OpenMP - rlRun "gcc $m omphello.c -O2 -std=gnu99 -fopenmp -o omp" - rlRun ./omp - - # Test __thread - rlRun "gcc $m thr-init-2.c -O2 -std=gnu99 -ftls-model=initial-exec -o thr" - rlRun ./thr - - # Now test some libquadmath stuff (__float128 support). - if rpm -q ${GCC_RPM_NAME%%gcc}libquadmath-devel &>/dev/null; then - rlRun "gcc $m quad.c -O2 -std=gnu99 -lquadmath -o quad -lm" - rlRun ./quad - fi - - # And now something from libgcc, e.g. __builtin___clear_cache. - rlRun "gcc $m clear_cache.c -O2 -std=gnu99 -o cache" - rlRun ./cache - - rlPhaseEnd - done - - rlPhaseStartCleanup - rlRun popd - rlRun "rm -r $TmpDir" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/Sanity/test-m32-m64-options/thr-init-2.c b/tests/Sanity/test-m32-m64-options/thr-init-2.c deleted file mode 100644 index 5b70dd2..0000000 --- a/tests/Sanity/test-m32-m64-options/thr-init-2.c +++ /dev/null @@ -1,20 +0,0 @@ -extern void abort() ; - -static __thread int fstat ; -static __thread int fstat = 1; - -int test_code(int b) -{ - fstat += b ; - return fstat; -} - -int main (int ac, char *av[]) -{ - int a = test_code(1); - - if ((a != 2) || (fstat != 2)) - abort () ; - - return 0; -} diff --git a/tests/Sanity/test-m32-m64-options/tm.c b/tests/Sanity/test-m32-m64-options/tm.c deleted file mode 100644 index 92b90db..0000000 --- a/tests/Sanity/test-m32-m64-options/tm.c +++ /dev/null @@ -1,34 +0,0 @@ -extern void *malloc (__SIZE_TYPE__) __attribute__((malloc,transaction_safe)); - -static int __attribute__((transaction_safe)) -something (void) -{ - return 0; -} - -struct large { int foo[500]; }; - -int -main (void) -{ - int *p; - struct large *lp; - - __transaction_atomic { - p = malloc (sizeof (*p) * 100); - lp = malloc (sizeof (*lp) * 100); - - /* No instrumentation necessary; P and LP are transaction local. */ - p[5] = 123; - lp->foo[66] = 123; - - if (something ()) - __transaction_cancel; - } - - __transaction_relaxed { - ++p[5]; - } - - return ((p[5] == 124) ? 0 : 1); -} diff --git a/tests/fedora-flags/hello.c b/tests/fedora-flags/hello.c deleted file mode 100644 index 51b259b..0000000 --- a/tests/fedora-flags/hello.c +++ /dev/null @@ -1,5 +0,0 @@ -#include - -void hello() { - printf("Hello World\n"); -} diff --git a/tests/fedora-flags/hello.cpp b/tests/fedora-flags/hello.cpp deleted file mode 100644 index 400612b..0000000 --- a/tests/fedora-flags/hello.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include - -void hello() { - std::cout << "Hello World\n"; -} diff --git a/tests/fedora-flags/main.c b/tests/fedora-flags/main.c deleted file mode 100644 index 1a3455d..0000000 --- a/tests/fedora-flags/main.c +++ /dev/null @@ -1,6 +0,0 @@ -void hello(); - -int main(int argc, char **argv) { - hello(); - return 0; -} diff --git a/tests/fedora-flags/main.cpp b/tests/fedora-flags/main.cpp deleted file mode 100644 index 1a3455d..0000000 --- a/tests/fedora-flags/main.cpp +++ /dev/null @@ -1,6 +0,0 @@ -void hello(); - -int main(int argc, char **argv) { - hello(); - return 0; -} diff --git a/tests/fedora-flags/main.fmf b/tests/fedora-flags/main.fmf deleted file mode 100644 index 43934a7..0000000 --- a/tests/fedora-flags/main.fmf +++ /dev/null @@ -1,10 +0,0 @@ -summary: Test compiling with the Fedora C/CXX flags. -description: '' -component: - - gcc -test: ./runtest.sh -require: - - annobin-annocheck - - gcc - - gcc-c++ - - redhat-rpm-config diff --git a/tests/fedora-flags/runtest.sh b/tests/fedora-flags/runtest.sh deleted file mode 100755 index 01b656b..0000000 --- a/tests/fedora-flags/runtest.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -set -ex - -default_cflags=$(rpm -E '%{build_cflags}') -default_cxxflags=$(rpm -E '%{build_cxxflags}') -default_ldflags=$(rpm -E '%{build_ldflags}') - -cflags=$(rpm -D '%toolchain gcc' -E '%{build_cflags}') -cxxflags=$(rpm -D '%toolchain gcc' -E '%{build_cxxflags}') -ldflags=$(rpm -D '%toolchain gcc' -E '%{build_ldflags}') - -test "$default_cflags" = "$cflags" -test "$default_cxxflags" = "$cxxflags" -test "$default_ldflags" = "$ldflags" - -gcc $cflags -o hello.o -c hello.c -annocheck hello.o -gcc $cflags -o main.o -c main.c -gcc $ldflags -o hello main.o hello.o -annocheck hello -./hello | grep "Hello World" - -g++ $cxxflags -o hello-cpp.o -c hello.cpp -annocheck hello-cpp.o -g++ $cxxflags -o main-cpp.o -c main.cpp -g++ $ldflags -o hello-cpp main-cpp.o hello-cpp.o -annocheck hello-cpp -./hello-cpp | grep "Hello World" diff --git a/tests/smoke-test/Makefile b/tests/smoke-test/Makefile deleted file mode 100644 index fb46790..0000000 --- a/tests/smoke-test/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Makefile of /tools/gcc/Sanity/smoke-test -# Description: Basic smoke test. -# Author: Marek Polacek -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2012 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -export TEST=/tools/gcc/Sanity/smoke-test -export TESTVERSION=1.0 - -BUILT_FILES= - -FILES=$(METADATA) runtest.sh Makefile PURPOSE hello.c hello.f90 hello.cpp tm.c quad.c omphello.c thr-init-2.c clear_cache.c - -.PHONY: all install download clean - -run: $(FILES) build - ./runtest.sh - -build: $(BUILT_FILES) - test -x runtest.sh || chmod a+x runtest.sh - -clean: - rm -f *~ $(BUILT_FILES) - - -include /usr/share/rhts/lib/rhts-make.include - -$(METADATA): Makefile - @echo "Owner: Marek Polacek " > $(METADATA) - @echo "Name: $(TEST)" >> $(METADATA) - @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) - @echo "Path: $(TEST_DIR)" >> $(METADATA) - @echo "Description: Basic smoke test." >> $(METADATA) - @echo "Type: Sanity" >> $(METADATA) - @echo "TestTime: 10m" >> $(METADATA) - @echo "RunFor: gcc" >> $(METADATA) - @echo "RunFor: devtoolset-1.0-gcc" >> $(METADATA) - @echo "Requires: gcc gcc-c++ gcc-gfortran glibc-common glibc-devel" >> $(METADATA) - @echo "Requires: libquadmath libquadmath-devel libgomp libgcc libstdc++-devel" >> $(METADATA) - @echo "Priority: Normal" >> $(METADATA) - @echo "License: GPLv2" >> $(METADATA) - @echo "Confidential: no" >> $(METADATA) - @echo "Destructive: no" >> $(METADATA) - - rhts-lint $(METADATA) diff --git a/tests/smoke-test/PURPOSE b/tests/smoke-test/PURPOSE deleted file mode 100644 index 912f7b4..0000000 --- a/tests/smoke-test/PURPOSE +++ /dev/null @@ -1,3 +0,0 @@ -PURPOSE of /tools/gcc/Sanity/smoke-test -Description: Basic smoke test. -Author: Marek Polacek diff --git a/tests/smoke-test/clear_cache.c b/tests/smoke-test/clear_cache.c deleted file mode 100644 index b10479f..0000000 --- a/tests/smoke-test/clear_cache.c +++ /dev/null @@ -1,7 +0,0 @@ -int -main (void) -{ - char *mem = __builtin_alloca (40); - __builtin___clear_cache (mem, mem + 40); - return 0; -} diff --git a/tests/smoke-test/hello.c b/tests/smoke-test/hello.c deleted file mode 100644 index 4096e11..0000000 --- a/tests/smoke-test/hello.c +++ /dev/null @@ -1,7 +0,0 @@ -#include - -int -main (void) -{ - puts ("Hello World!"); -} diff --git a/tests/smoke-test/hello.cpp b/tests/smoke-test/hello.cpp deleted file mode 100644 index 0f2234e..0000000 --- a/tests/smoke-test/hello.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include - -int -main (void) -{ - std::cout << "Hello, world!\n"; -} diff --git a/tests/smoke-test/hello.f90 b/tests/smoke-test/hello.f90 deleted file mode 100644 index afabbb2..0000000 --- a/tests/smoke-test/hello.f90 +++ /dev/null @@ -1,3 +0,0 @@ - program hello - print *, "Hello World!" - end program hello diff --git a/tests/smoke-test/main.fmf b/tests/smoke-test/main.fmf deleted file mode 100644 index 3710ca3..0000000 --- a/tests/smoke-test/main.fmf +++ /dev/null @@ -1,22 +0,0 @@ -summary: Basic smoke test. -description: '' -contact: -- Marek Polacek -component: -- gcc -test: ./runtest.sh -framework: beakerlib -recommend: -- gcc -- gcc-c++ -- gcc-gfortran -- glibc-common -- glibc-devel -- libquadmath -- libquadmath-devel -- libgomp -- libgcc -- libstdc++-devel -duration: 10m -extra-summary: /tools/gcc/Sanity/smoke-test -extra-task: /tools/gcc/Sanity/smoke-test diff --git a/tests/smoke-test/omphello.c b/tests/smoke-test/omphello.c deleted file mode 100644 index 85b591f..0000000 --- a/tests/smoke-test/omphello.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include - -int -main (void) -{ - int th_id; - int nthreads; - - #pragma omp parallel private(th_id) - { - th_id = omp_get_thread_num (); - printf ("Hello World from thread %d\n", th_id); - - #pragma omp barrier - if (th_id == 0) - { - nthreads = omp_get_num_threads (); - printf ("There are %d threads\n", nthreads); - } - } - return EXIT_SUCCESS; -} diff --git a/tests/smoke-test/quad.c b/tests/smoke-test/quad.c deleted file mode 100644 index e5a6cc7..0000000 --- a/tests/smoke-test/quad.c +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include -#include - -int -main (void) -{ - __float128 r = strtoflt128 ("1.23456789", NULL); - - int prec = 20; - int width = 46; - char buf[128]; - - r = 2.0q; - r = sqrtq (r); - int n = quadmath_snprintf (buf, sizeof buf, "%+-#*.20Qe", width, r); - if ((size_t) n < sizeof buf) - /* Prints: +1.41421356237309504880e+00 */ - printf ("%s\n", buf); - quadmath_snprintf (buf, sizeof buf, "%Qa", r); - if ((size_t) n < sizeof buf) - /* Prints: 0x1.6a09e667f3bcc908b2fb1366ea96p+0 */ - printf ("%s\n", buf); - n = quadmath_snprintf (NULL, 0, "%+-#46.*Qe", prec, r); - if (n > -1) - { - char *str = malloc (n + 1); - if (str) - { - quadmath_snprintf (str, n + 1, "%+-#46.*Qe", prec, r); - /* Prints: +1.41421356237309504880e+00 */ - printf ("%s\n", str); - } - free (str); - } - - return 0; -} diff --git a/tests/smoke-test/runtest.sh b/tests/smoke-test/runtest.sh deleted file mode 100755 index 7b6a4e9..0000000 --- a/tests/smoke-test/runtest.sh +++ /dev/null @@ -1,127 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /tools/gcc/Sanity/smoke-test -# Description: Basic smoke test. -# Author: Marek Polacek -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2012 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# This program is distributed in the hope that it will be -# useful, but WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write to the Free -# Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -# Boston, MA 02110-1301, USA. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# A testing change. - -# Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGES=(gcc gcc-c++ gcc-gfortran glibc-common libgomp libgcc glibc-devel libstdc++ libstdc++-devel) - -# Choose the compiler. -GCC=${GCC:-gcc} -GXX=${GXX:-g++} -GFORTRAN=${GFORTRAN:-gfortran} - -PACKAGE=gcc - -rlJournalStart - rlPhaseStartSetup - export PRI_ARCH=`rlGetPrimaryArch` - export SEC_ARCH=`rlGetSecondaryArch` - # don't assert anything under devtoolset - if type gcc | grep -q -v devtoolset - then - for p in "${PACKAGES[@]}"; do - rpm -q "$p.$PRI_ARCH" || yum install -y "$p.$PRI_ARCH" - rlAssertRpm "$p.$PRI_ARCH" - done; unset p - fi - rlLog "GCC = $GCC" - rlLog "Installed within `rpmquery -f $(which $GCC)`" - rlLog "GXX = $GXX" - rlLog "Installed within `rpmquery -f $(which $GXX)`" - rlLog "GFORTRAN = $GFORTRAN" - rlLog "Installed within `rpmquery -f $(which $GFORTRAN)`" - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - # We need some files. - rlRun "cp -v hello.{c,cpp,f90} tm.c quad.c thr-init-2.c clear_cache.c omphello.c $TmpDir" - rlRun "pushd $TmpDir" - rlRun "rpmquery -l libstdc++-devel.$PRI_ARCH" - test -n "$SEC_ARCH" && rpmquery "libstdc++-devel.$SEC_ARCH" && rlRun "rpmquery -l libstdc++-devel.$SEC_ARCH" - rlPhaseEnd - - rlPhaseStartSetup "Showing compiler versions" - for compiler in $GCC $GXX $GFORTRAN - do - rlLog "Version of compiler: $compiler" - eval "$compiler --version 2>&1" | while read line - do - rlLog " $line" - done - done - rlPhaseEnd - - rlPhaseStartTest "Compile" - rlRun "$GCC hello.c -o hello_c" - rlRun "$GXX hello.cpp -o hello_cpp" - rlRun "$GFORTRAN hello.f90 -o hello_fortran" - - # TM support is GCC >=4.7 only. - $GCC -xc -O2 -std=gnu99 -fgnu-tm - <<< "int main(){}" - if test $? -eq 0; then - rlRun "$GCC -O2 -std=gnu99 -fgnu-tm tm.c -o tm" - rlRun "./tm" - fi - - # Test OpenMP. - rlRun "$GCC omphello.c -O2 -std=gnu99 -fopenmp -o omp" - rlRun "./omp" - - # Test __thread. - rlRun "$GCC thr-init-2.c -O2 -std=gnu99 -ftls-model=initial-exec -o thr" - rlRun "./thr" - - # Now test some libquadmath stuff (__float128 support). - # libquadmath is mising on RHEL machines, usually. - test "`rpmquery --qf '%{version}-%{release}' libquadmath`" = "`rpmquery --qf '%{version}-%{release}' $GCC`" - if test $? -eq 0 -a "$GCC" = "gcc"; then - rlRun "$GCC quad.c -O2 -std=gnu99 -lquadmath -lm -o quad" - rlRun "./quad" - fi - - # And now something from libgcc, e.g. __builtin___clear_cache. - # But not on RHEL5. - if ! rlIsRHEL 5; then - rlRun "$GCC clear_cache.c -O2 -std=gnu99 -o cache" - rlRun "./cache" - fi - rlPhaseEnd - - rlPhaseStartTest "Check dependant libraries" - rlRun "ldd hello_{c,cpp,fortran} &> ldd.out" - # Nothing should be linked against anything in /opt. - rlAssertNotGrep "/opt" ldd.out - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd diff --git a/tests/smoke-test/thr-init-2.c b/tests/smoke-test/thr-init-2.c deleted file mode 100644 index 051cff9..0000000 --- a/tests/smoke-test/thr-init-2.c +++ /dev/null @@ -1,24 +0,0 @@ -/* { dg-do run } */ -/* { dg-require-effective-target tls_runtime } */ -/* { dg-add-options tls } */ - -extern void abort() ; - -static __thread int fstat ; -static __thread int fstat = 1; - -int test_code(int b) -{ - fstat += b ; - return fstat; -} - -int main (int ac, char *av[]) -{ - int a = test_code(1); - - if ((a != 2) || (fstat != 2)) - abort () ; - - return 0; -} diff --git a/tests/smoke-test/tm.c b/tests/smoke-test/tm.c deleted file mode 100644 index f9b4c9b..0000000 --- a/tests/smoke-test/tm.c +++ /dev/null @@ -1,34 +0,0 @@ -extern void *malloc (__SIZE_TYPE__) __attribute__((malloc,transaction_safe)); - -static int __attribute__((transaction_safe)) -something (void) -{ - return 0; -} - -struct large { int foo[500]; }; - -int -main (void) -{ - int *p; - struct large *lp; - - __transaction_atomic { - p = malloc (sizeof (*p) * 100); - lp = malloc (sizeof (*lp) * 100); - - /* No instrumentation necessary; P and LP are transaction local. */ - p[5] = 123; - lp->foo[66] = 123; - - if (something ()) - __transaction_cancel; - } - - __transaction_relaxed { - ++p[5]; - } - - return ( (p[5] == 124) ? 0 : 1 ); -} diff --git a/update-gcc.sh b/update-gcc.sh index 0c357f3..b49ed15 100755 --- a/update-gcc.sh +++ b/update-gcc.sh @@ -3,5 +3,5 @@ git clone --depth 1 git://gcc.gnu.org/git/gcc.git gcc-dir.tmp git --git-dir=gcc-dir.tmp/.git fetch --depth 1 origin $1 d=`date --iso | sed 's/-//g'` -git --git-dir=gcc-dir.tmp/.git archive --prefix=gcc-13.1.1-$d/ $1 | xz -9e > gcc-13.1.1-$d.tar.xz +git --git-dir=gcc-dir.tmp/.git archive --prefix=gcc-13.2.1-$d/ $1 | xz -9e > gcc-13.2.1-$d.tar.xz rm -rf gcc-dir.tmp