aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_ch4.adb3
-rw-r--r--gcc/config/riscv/autovec-opt.md20
-rw-r--r--gcc/cp/name-lookup.cc8
-rw-r--r--gcc/match.pd29
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-1_c.C14
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-2_b.C13
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-3_a.C21
-rw-r--r--gcc/testsuite/g++.dg/modules/namespace-3_b.C12
-rw-r--r--gcc/testsuite/g++.dg/modules/pr122053_a.C10
-rw-r--r--gcc/testsuite/g++.dg/modules/pr122053_b.C9
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c3
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c3
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c1
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c1
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c1
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c1
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c1
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c1
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c1
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h18
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h77
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h27
-rw-r--r--gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c18
-rw-r--r--gcc/testsuite/gnat.dg/allocator3.adb23
24 files changed, 235 insertions, 80 deletions
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb
index 61a53f5..5704bf1 100644
--- a/gcc/ada/sem_ch4.adb
+++ b/gcc/ada/sem_ch4.adb
@@ -630,7 +630,8 @@ package body Sem_Ch4 is
begin
while Present (Discr) loop
- Append (Discriminant_Default_Value (Discr), Constr);
+ Append_To (Constr,
+ New_Copy_Tree (Discriminant_Default_Value (Discr)));
Next_Discriminant (Discr);
end loop;
diff --git a/gcc/config/riscv/autovec-opt.md b/gcc/config/riscv/autovec-opt.md
index a5eb49c..d5950eb 100644
--- a/gcc/config/riscv/autovec-opt.md
+++ b/gcc/config/riscv/autovec-opt.md
@@ -1911,6 +1911,26 @@
}
[(set_attr "type" "viwalu")])
+(define_insn_and_split "*widen_waddu_wx_<mode>"
+ [(set (match_operand:VWEXTI_D 0 "register_operand")
+ (any_widen_binop:VWEXTI_D
+ (vec_duplicate:VWEXTI_D
+ (any_extend:<VEL>
+ (match_operand:<VSUBEL> 2 "register_operand")))
+ (match_operand:VWEXTI_D 1 "register_operand")))]
+ "TARGET_VECTOR && TARGET_64BIT && can_create_pseudo_p ()"
+ "#"
+ "&& 1"
+ [(const_int 0)]
+ {
+ insn_code icode = code_for_pred_single_widen_scalar (PLUS, ZERO_EXTEND,
+ <MODE>mode);
+ riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP, operands);
+
+ DONE;
+ }
+ [(set_attr "type" "viwalu")])
+
;; =============================================================================
;; Combine vec_duplicate + op.vv to op.vf
;; Include
diff --git a/gcc/cp/name-lookup.cc b/gcc/cp/name-lookup.cc
index 8d7fc06..09d16db 100644
--- a/gcc/cp/name-lookup.cc
+++ b/gcc/cp/name-lookup.cc
@@ -3882,7 +3882,7 @@ check_module_override (tree decl, tree mvec, bool hiding,
}
}
- if (TREE_PUBLIC (scope) && TREE_PUBLIC (STRIP_TEMPLATE (decl))
+ if (TREE_PUBLIC (scope)
/* Namespaces are dealt with specially in
make_namespace_finish. */
&& !(TREE_CODE (decl) == NAMESPACE_DECL && !DECL_NAMESPACE_ALIAS (decl)))
@@ -8597,6 +8597,12 @@ pushtag (tree name, tree type, TAG_how how)
}
else
{
+ /* If an import is going to provide a definition for this tag,
+ load it now so that we don't get confused later when processing
+ this tag's definition. */
+ if (modules_p ())
+ lazy_load_pendings (decl);
+
decl = do_pushdecl_with_scope
(decl, b, /*hiding=*/(how == TAG_how::HIDDEN_FRIEND));
if (decl == error_mark_node)
diff --git a/gcc/match.pd b/gcc/match.pd
index 6f896aa..60bdd33 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -3620,6 +3620,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
/* Saturation mult for unsigned integer. */
(if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
+ (for mult_op (mult widen_mult)
(match (unsigned_integer_sat_mul @0 @1)
/* SAT_U_MUL (X, Y) = {
WT x = (WT)a * (WT)b;
@@ -3630,9 +3631,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
return (T)x;
}
while WT is uint128_t, T is uint8_t, uint16_t, uint32_t or uint64_t. */
- (convert (min (widen_mult:c@3 (convert@4 @0)
- (convert@5 @1))
- INTEGER_CST@2))
+ (convert (min (mult_op:c@3 (convert@4 @0) (convert@5 @1)) INTEGER_CST@2))
(if (types_match (type, @0, @1))
(with
{
@@ -3640,24 +3639,16 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
unsigned cvt4_prec = TYPE_PRECISION (TREE_TYPE (@4));
unsigned cvt5_prec = TYPE_PRECISION (TREE_TYPE (@5));
- wide_int c2 = wi::to_wide (@2);
- wide_int max = wi::mask (prec, false, widen_prec);
- bool c2_is_max_p = wi::eq_p (c2, max);
- bool widen_mult_p = cvt4_prec == cvt5_prec && widen_prec == cvt5_prec * 2;
- }
- (if (widen_prec > prec && c2_is_max_p && widen_mult_p)))))
- (match (unsigned_integer_sat_mul @0 @1)
- (convert (min (mult:c@3 (convert @0) (convert @1)) INTEGER_CST@2))
- (if (types_match (type, @0, @1))
- (with
- {
- unsigned prec = TYPE_PRECISION (type);
- unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
- wide_int c2 = wi::to_wide (@2);
+
wide_int max = wi::mask (prec, false, widen_prec);
- bool c2_is_max_p = wi::eq_p (c2, max);
+ bool c2_is_max_p = wi::eq_p (wi::to_wide (@2), max);
+
+ bool widen_mult_p = mult_op == WIDEN_MULT_EXPR && cvt4_prec == cvt5_prec
+ && widen_prec == cvt5_prec * 2 && widen_prec > prec;
+ bool mult_p = mult_op == MULT_EXPR && cvt4_prec == cvt5_prec
+ && cvt4_prec == widen_prec && widen_prec > prec;
}
- (if (widen_prec > prec && c2_is_max_p)))))
+ (if (c2_is_max_p && (widen_mult_p || mult_p)))))))
(match (unsigned_integer_sat_mul @0 @1)
/* SAT_U_MUL (X, Y) = {
T result;
diff --git a/gcc/testsuite/g++.dg/modules/namespace-1_c.C b/gcc/testsuite/g++.dg/modules/namespace-1_c.C
index 748ef5d..e4f81b6 100644
--- a/gcc/testsuite/g++.dg/modules/namespace-1_c.C
+++ b/gcc/testsuite/g++.dg/modules/namespace-1_c.C
@@ -1,13 +1,7 @@
// { dg-additional-options "-fmodules-ts" }
-// The indirect import of frob, with namespaces impl and ompl doesn't
-// affect us.
-static int impl;
-import Frink;
-static int ompl;
+static int impl; // IF but no diagnostic required: impl@Frob not reachable from here
+
+import Frink;
-void corge (int x)
-{
- impl = x;
- ompl = frab (x);
-}
+static int ompl; // { dg-error "different kind" }
diff --git a/gcc/testsuite/g++.dg/modules/namespace-2_b.C b/gcc/testsuite/g++.dg/modules/namespace-2_b.C
index 6ab5113..d71c630 100644
--- a/gcc/testsuite/g++.dg/modules/namespace-2_b.C
+++ b/gcc/testsuite/g++.dg/modules/namespace-2_b.C
@@ -2,16 +2,5 @@
import foo;
-static int also_not_exported; // ok
-
-void X ()
-{
- implicit_export::bob ();
-}
-
+static int also_not_exported; // { dg-error "different kind" }
static int implicit_export; // { dg-error "different kind" }
-
-void Y ()
-{
- also_not_exported = 1;
-}
diff --git a/gcc/testsuite/g++.dg/modules/namespace-3_a.C b/gcc/testsuite/g++.dg/modules/namespace-3_a.C
deleted file mode 100644
index 8e9508d..0000000
--- a/gcc/testsuite/g++.dg/modules/namespace-3_a.C
+++ /dev/null
@@ -1,21 +0,0 @@
-// Check namespace needed only by internal reference is not made visible
-// { dg-additional-options "-fmodules-ts" }
-
-export module frob;
-// { dg-module-cmi frob }
-
-namespace silent
-{
- namespace inner
- {
- static int X ()
- {
- return 1;
- }
- }
-}
-
-export int f (int y)
-{
- return y + silent::inner::X ();
-}
diff --git a/gcc/testsuite/g++.dg/modules/namespace-3_b.C b/gcc/testsuite/g++.dg/modules/namespace-3_b.C
deleted file mode 100644
index f779ffe..0000000
--- a/gcc/testsuite/g++.dg/modules/namespace-3_b.C
+++ /dev/null
@@ -1,12 +0,0 @@
-// { dg-additional-options "-fmodules-ts" }
-
-import frob;
-
-int x = silent; // { dg-error "not declared" }
-
-static int silent;
-
-int user ()
-{
- return f (silent);
-}
diff --git a/gcc/testsuite/g++.dg/modules/pr122053_a.C b/gcc/testsuite/g++.dg/modules/pr122053_a.C
new file mode 100644
index 0000000..2a8748c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/pr122053_a.C
@@ -0,0 +1,10 @@
+// PR c++/122053
+// { dg-additional-options "-fmodules -Wno-global-module" }
+// { dg-module-cmi M }
+
+module;
+struct mytime {
+ long a, b;
+};
+export module M;
+export mytime foo();
diff --git a/gcc/testsuite/g++.dg/modules/pr122053_b.C b/gcc/testsuite/g++.dg/modules/pr122053_b.C
new file mode 100644
index 0000000..a7084b74
--- /dev/null
+++ b/gcc/testsuite/g++.dg/modules/pr122053_b.C
@@ -0,0 +1,9 @@
+// PR c++/122053
+// { dg-additional-options "-fmodules" }
+// Test we don't ICE when redefining a type coming from an import.
+
+import M;
+struct mytime { // { dg-bogus "conflicting" "PR99000" { xfail *-*-* } }
+ long a, b;
+};
+mytime m = foo(); // { dg-bogus "" "PR99000" { xfail *-*-* } }
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
index c86461b..76ef2d3 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
@@ -12,7 +12,7 @@ TEST_BINARY_VX_UNSIGNED_0(T)
TEST_TERNARY_VX_UNSIGNED_0(T)
TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
-/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vadd.vx} 2 } } */
/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
@@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
+/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
index 90de197..55fa57d 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
@@ -12,7 +12,7 @@ TEST_BINARY_VX_UNSIGNED_0(T)
TEST_TERNARY_VX_UNSIGNED_0(T)
TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
-/* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vadd.vx} 2 } } */
/* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
/* { dg-final { scan-assembler-times {vand.vx} 1 } } */
@@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
+/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
index 522ddd1..d517683 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
@@ -35,3 +35,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
/* { dg-final { scan-assembler-times {vwaddu.vx} 1 } } */
/* { dg-final { scan-assembler-times {vwsubu.vx} 1 } } */
/* { dg-final { scan-assembler-times {vwmulu.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vwaddu.wx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
index 6ea17bb..a234505 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
@@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
+/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
index 8b8fba5..a46c874 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
@@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
+/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
index 6f66de9..94ce774 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
@@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
+/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
index cd129f1..a1278ce 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
@@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
+/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
index 48aeed7..910fa6e 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
@@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
+/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
index b88c350..9ce0211 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
@@ -32,3 +32,4 @@ TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
/* { dg-final { scan-assembler-not {vwaddu.vx} } } */
/* { dg-final { scan-assembler-not {vwsubu.vx} } } */
/* { dg-final { scan-assembler-not {vwmulu.vx} } } */
+/* { dg-final { scan-assembler-not {vwaddu.wx} } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h
index 998c0596..03fba3c 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h
@@ -28,9 +28,27 @@ test_vx_widen_binary_##NAME##_##WT##_##NT##_case_0 (WT * restrict vd, \
#define RUN_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, NAME, vd, vs2, rs1, n) \
RUN_VX_WIDEN_BINARY_CASE_0(WT, NT, NAME, vd, vs2, rs1, n)
+#define DEF_VX_WIDEN_BINARY_CASE_1(WT, NT, OP, NAME) \
+void \
+test_vx_widen_binary_##NAME##_##WT##_##NT##_case_1 (WT * restrict vd, \
+ WT * restrict vs2, \
+ NT rs1, unsigned n) \
+{ \
+ for (unsigned i = 0; i < n; i++) \
+ vd[i] = vs2[i] OP (WT)rs1; \
+}
+
+#define DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, OP, NAME) \
+ DEF_VX_WIDEN_BINARY_CASE_1(WT, NT, OP, NAME)
+#define RUN_VX_WIDEN_BINARY_CASE_1(WT, NT, NAME, vd, vs2, rs1, n) \
+ test_vx_widen_binary_##NAME##_##WT##_##NT##_case_1(vd, vs2, rs1, n)
+#define RUN_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, NAME, vd, vs2, rs1, n) \
+ RUN_VX_WIDEN_BINARY_CASE_1(WT, NT, NAME, vd, vs2, rs1, n)
+
#define TEST_WIDEN_BINARY_VX_UNSIGNED(WT, NT) \
DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, +, add) \
DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, -, sub) \
DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, *, mul) \
+ DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, +, add) \
#endif
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h
index 5b49083..faf46a8 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h
@@ -4,7 +4,7 @@
#define N 16
#define DEF_BINARY_WIDEN_STRUCT_0_NAME(WT, NT, NAME) \
- binary_widen_##WT##_##NT##_##NAME##_s
+ binary_widen_##WT##_##NT##_##NAME##_s_0
#define DEF_BINARY_WIDEN_STRUCT_0_NAME_WRAP(WT, NT, NAME) \
DEF_BINARY_WIDEN_STRUCT_0_NAME(WT, NT, NAME)
@@ -14,7 +14,7 @@
DEF_BINARY_WIDEN_STRUCT_0_TYPE(WT, NT, NAME)
#define DEF_BINARY_WIDEN_STRUCT_0_VAR(WT, NT, NAME) \
- binary_widen_##WT##_##NT##_##NAME##_data
+ binary_widen_##WT##_##NT##_##NAME##_data_0
#define DEF_BINARY_WIDEN_STRUCT_0_VAR_WRAP(WT, NT, NAME) \
DEF_BINARY_WIDEN_STRUCT_0_VAR(WT, NT, NAME)
@@ -24,6 +24,27 @@
#define DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(WT, NT, NAME) \
DEF_BINARY_WIDEN_STRUCT_0_DECL(WT, NT, NAME)
+#define DEF_BINARY_WIDEN_STRUCT_1_NAME(WT, NT, NAME) \
+ binary_widen_##WT##_##NT##_##NAME##_s_1
+#define DEF_BINARY_WIDEN_STRUCT_1_NAME_WRAP(WT, NT, NAME) \
+ DEF_BINARY_WIDEN_STRUCT_1_NAME(WT, NT, NAME)
+
+#define DEF_BINARY_WIDEN_STRUCT_1_TYPE(WT, NT, NAME) \
+ struct DEF_BINARY_WIDEN_STRUCT_1_NAME_WRAP(WT, NT, NAME)
+#define DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \
+ DEF_BINARY_WIDEN_STRUCT_1_TYPE(WT, NT, NAME)
+
+#define DEF_BINARY_WIDEN_STRUCT_1_VAR(WT, NT, NAME) \
+ binary_widen_##WT##_##NT##_##NAME##_data_1
+#define DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME) \
+ DEF_BINARY_WIDEN_STRUCT_1_VAR(WT, NT, NAME)
+
+#define DEF_BINARY_WIDEN_STRUCT_1_DECL(WT, NT, NAME) \
+ DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \
+ DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME)
+#define DEF_BINARY_WIDEN_STRUCT_1_DECL_WRAP(WT, NT, NAME) \
+ DEF_BINARY_WIDEN_STRUCT_1_DECL(WT, NT, NAME)
+
#define DEF_BINARY_WIDEN_STRUCT_0(WT, NT, NAME) \
DEF_BINARY_WIDEN_STRUCT_0_TYPE_WRAP(WT, NT, NAME) \
{ \
@@ -39,6 +60,19 @@ DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, add)
DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, sub)
DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, mul)
+#define DEF_BINARY_WIDEN_STRUCT_1(WT, NT, NAME) \
+ DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME) \
+ { \
+ WT vs2[N]; \
+ NT rs1; \
+ WT expect[N]; \
+ WT vd[N]; \
+ };
+#define DEF_BINARY_WIDEN_STRUCT_1_WRAP(WT, NT, NAME) \
+ DEF_BINARY_WIDEN_STRUCT_1(WT, NT, NAME)
+
+DEF_BINARY_WIDEN_STRUCT_1_WRAP(uint64_t, uint32_t, add)
+
DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, add)[] = {
{
/* vs2 */
@@ -156,4 +190,43 @@ DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, mul)[] = {
},
};
+DEF_BINARY_WIDEN_STRUCT_1_DECL_WRAP(uint64_t, uint32_t, add)[] = {
+ {
+ /* vs2 */
+ {
+ 1, 1, 1, 1,
+ 0, 0, 0, 0,
+ 2147483647, 2147483647, 2147483647, 2147483647,
+ 2147483649, 2147483649, 2147483649, 2147483649,
+ },
+ /* rs1 */
+ 2147483647,
+ /* expect */
+ {
+ 2147483648, 2147483648, 2147483648, 2147483648,
+ 2147483647, 2147483647, 2147483647, 2147483647,
+ 4294967294, 4294967294, 4294967294, 4294967294,
+ 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull,
+ },
+ },
+ {
+ /* vs2 */
+ {
+ 1, 1, 1, 1,
+ 0, 0, 0, 0,
+ 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull,
+ 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull,
+ },
+ /* rs1 */
+ 4294967295,
+ /* expect */
+ {
+ 4294967296ull, 4294967296ull, 4294967296ull, 4294967296ull,
+ 4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull,
+ 8589934590ull, 8589934590ull, 8589934590ull, 8589934590ull,
+ 8589934591ull, 8589934591ull, 8589934591ull, 8589934591ull,
+ },
+ },
+};
+
#endif
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h
new file mode 100644
index 0000000..6edd486
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h
@@ -0,0 +1,27 @@
+#ifndef HAVE_DEFINED_WX_WIDEN_RUN_H
+#define HAVE_DEFINED_WX_WIDEN_RUN_H
+
+int
+main ()
+{
+ unsigned i, k;
+
+ for (i = 0; i < sizeof (TEST_DATA) / sizeof (TEST_DATA[0]); i++)
+ {
+ DATA_TYPE *data = &TEST_DATA[i];
+ WT *vs2 = data->vs2;
+ NT rs1 = data->rs1;
+ WT *expect = data->expect;
+ WT *vd = data->vd;
+
+ TEST_RUN (WT, NT, NAME, vd, vs2, rs1, N);
+
+ for (k = 0; k < N; k++)
+ if (vd[k] != expect[k])
+ __builtin_abort ();
+ }
+
+ return 0;
+}
+
+#endif
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c
new file mode 100644
index 0000000..fe0ea7c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c
@@ -0,0 +1,18 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_widen.h"
+#include "vx_widen_data.h"
+
+#define WT uint64_t
+#define NT uint32_t
+#define NAME add
+#define TEST_DATA DEF_BINARY_WIDEN_STRUCT_1_VAR_WRAP(WT, NT, NAME)
+#define DATA_TYPE DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME)
+
+DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, +, NAME)
+
+#define TEST_RUN(WT, NT, NAME, vd, vs2, rs1, N) \
+ RUN_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, NAME, vd, vs2, rs1, N)
+
+#include "vx_widen_wx_run.h"
diff --git a/gcc/testsuite/gnat.dg/allocator3.adb b/gcc/testsuite/gnat.dg/allocator3.adb
new file mode 100644
index 0000000..ac04344
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/allocator3.adb
@@ -0,0 +1,23 @@
+-- { dg-do compile }
+
+with Ada.Containers.Synchronized_Queue_Interfaces;
+with Ada.Containers.Unbounded_Synchronized_Queues;
+
+procedure Allocator3 is
+
+ package Queue_Interfaces is
+ new Ada.Containers.Synchronized_Queue_Interfaces (Integer);
+
+ package Synchronized_Queues is
+ new Ada.Containers.Unbounded_Synchronized_Queues (Queue_Interfaces);
+
+ subtype Queue is Synchronized_Queues.Queue;
+
+ type Access_Type is access all Queue;
+
+ Q1 : Access_Type := new Queue;
+ Q2 : Access_Type := new Queue;
+
+begin
+ null;
+end;