aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog23
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/ada/ChangeLog8
-rw-r--r--gcc/ada/sem_attr.adb47
-rw-r--r--gcc/analyzer/ChangeLog5
-rw-r--r--gcc/analyzer/kf.cc3
-rw-r--r--gcc/config/darwin-c.cc7
-rw-r--r--gcc/config/i386/sse.md3
-rw-r--r--gcc/testsuite/ChangeLog178
-rw-r--r--gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-1.c2
-rw-r--r--gcc/testsuite/gnat.dg/reduce3.adb17
-rw-r--r--libcpp/ChangeLog10
-rw-r--r--libcpp/files.cc28
-rw-r--r--libcpp/include/cpplib.h6
-rw-r--r--libcpp/internal.h3
15 files changed, 290 insertions, 52 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ed720db..6c0c42e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,26 @@
+2025-12-07 Jason Merrill <jason@redhat.com>
+
+ * config/darwin-c.cc (find_subframework_header): Use
+ _cpp_get_file_*.
+
+2025-12-07 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/122343
+ * common.opt: Add -ffuse-ops-with-volatile-access.
+ * common.opt.urls: Regenerated.
+ * recog.cc (general_operand): Allow volatile memory reference if
+ -ffuse-ops-with-volatile-access is enabled.
+ * simplify-rtx.cc (simplify_binary_operation_1): Keep PLUS for 2
+ volatile memory references.
+ * doc/invoke.texi: Document -ffuse-ops-with-volatile-access.
+
+2025-12-07 Alexandre Oliva <oliva@adacore.com>
+
+ * cselib.cc (dump_cselib_val): Split out of and rename to...
+ (dump_cselib_val_ptr): ... this.
+ (dump_cselib_table): Adjust. Skip cselib_preserved_hash_table
+ when not allocated.
+
2025-12-06 Alexandre Oliva <oliva@adacore.com>
PR rtl-optimization/122947
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 47f4b89..f674ed1 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20251207
+20251208
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index fca1a9e..2067233 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,11 @@
+2025-12-07 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR ada/115349
+ * sem_attr.adb (Resolve_Attribute) <Attribute_Reduce>: Use the base
+ type as Accum_Type if the reducer is an operator from Standard and
+ the type is numeric. Use the type of the first operand for other
+ operators. Streamline the error message given for limited types.
+
2025-12-06 Denis Mazzucato <mazzucato@adacore.com>
* sem_attr.adb (Resolve_Attribute): Check if the reducer is a
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb
index ca19cad..74e9d6f 100644
--- a/gcc/ada/sem_attr.adb
+++ b/gcc/ada/sem_attr.adb
@@ -12919,7 +12919,7 @@ package body Sem_Attr is
-- Where the context is augmented with the iteration
-- variable I of the right type, and Init_Var of type
- -- Accum_Subtype. If the Reducer has both procedure and
+ -- Accum_Typ. If the Reducer has both procedure and
-- function interpretations with the proper reducer profile
-- an ambiguity error is emitted. Note that, this could be a
-- false positive as the two may coexist without ambiguity
@@ -13204,7 +13204,7 @@ package body Sem_Attr is
return;
end if;
- -- If no error has been posted and the accumulation type is
+ -- If no error has been posted and the accumulator type is
-- constrained, then the resolution of the reducer can start.
if Nkind (Reducer_N) = N_Attribute_Reference then
@@ -13252,44 +13252,50 @@ package body Sem_Attr is
end if;
end if;
- -- After resolving the reducer, determine the correct
- -- Accum_Subtype: if the reducer is an attribute (Min or Max),
- -- then the prefix type is the accumulation type.
+ -- After resolving the reducer, determine Accum_Typ: if the
+ -- reducer is an attribute (Min or Max), then its prefix is
+ -- the accumulator type.
if Nkind (Reducer_E) = N_Attribute_Reference then
- Accum_Typ := Etype (Prefix (Reducer_E));
+ Accum_Typ := Entity (Prefix (Reducer_E));
- -- If an operator from standard, then the type of its first
- -- formal woudl be Any_Type, in this case we make sure we don't
- -- use an universal type to avoid resolution problems later on.
+ -- If the reducer is an operator from Standard, then the type
+ -- of its first operand would be Any_Type. In this case, make
+ -- sure we do not have an universal type to avoid resolution
+ -- problems later on, and use the base type of numeric types
+ -- to avoid spurious subtype mismatches for the initial value.
- elsif Ekind (Reducer_E) = E_Operator
- or else Scope (Reducer_E) = Standard_Standard
- then
+ elsif Scope (Reducer_E) = Standard_Standard then
if Accum_Typ = Universal_Integer then
Accum_Typ := Standard_Integer;
elsif Accum_Typ = Universal_Real then
Accum_Typ := Standard_Float;
+ elsif Is_Numeric_Type (Accum_Typ) then
+ Accum_Typ := Base_Type (Accum_Typ);
end if;
- -- Otherwise, the Accum_Subtype is the subtype of the first
- -- formal of the reducer subprogram RM 4.5.10(19/5).
+ -- Otherwise, Accum_Typ is the subtype of the first formal
+ -- of the reducer subprogram (RM 4.5.10(19/5)).
+
+ elsif Ekind (Reducer_E) = E_Operator then
+ Accum_Typ := Etype (Left_Opnd (Reducer_E));
else
Accum_Typ := Etype (First_Formal (Reducer_E));
end if;
+
Set_Etype (N, Accum_Typ);
- -- Accumulation type must be nonlimited, RM 4.5.10(8/5)
+ -- The accumulator type must be nonlimited (RM 4.5.10(8/5))
if Is_Limited_Type (Accum_Typ) then
Error_Msg_N
- ("accumulated subtype of Reduce must be nonlimited", N);
+ ("type of reduction expression must be nonlimited", N);
- -- If the Accum_Typ is an unconstrained array and the reducer
+ -- If Accum_Typ is an unconstrained array and the reducer
-- subprogram is a function then a Constraint_Error will be
- -- raised at runtime as most computations will change its
- -- length type during the reduction execution, RM 4.5.10(25/5).
+ -- raised at run time, as most computations will change its
+ -- length during the reduction execution (RM 4.5.10(25/5)).
-- For instance, this is the case with:
-- [...]'Reduce ("&", ...)
-- When the expression yields non-empty strings, the reduction
@@ -13300,7 +13306,7 @@ package body Sem_Attr is
elsif Nkind (Reducer_E) /= N_Attribute_Reference
and then Ekind (Reducer_E) = E_Function
- and then not Is_Numeric_Type (Base_Type (Accum_Typ))
+ and then not Is_Numeric_Type (Accum_Typ)
and then not Is_Constrained (Accum_Typ)
then
declare
@@ -13318,6 +13324,7 @@ package body Sem_Attr is
-- resolving the initial expression and array aggregate.
Resolve (Init_Value_Expr, Accum_Typ);
+
if Nkind (P) = N_Aggregate then
Resolve_Aggregate (P,
Make_Array_Type (Index => Standard_Positive,
diff --git a/gcc/analyzer/ChangeLog b/gcc/analyzer/ChangeLog
index 58fc1f4..9ede664 100644
--- a/gcc/analyzer/ChangeLog
+++ b/gcc/analyzer/ChangeLog
@@ -1,3 +1,8 @@
+2025-12-07 David Malcolm <dmalcolm@redhat.com>
+
+ * kf.cc (register_known_functions): Remove duplicate calls to
+ register_atomic_builtins and register_varargs_builtins.
+
2025-11-28 Jakub Jelinek <jakub@redhat.com>
* known-function-manager.cc (known_function_manager::add): Avoid
diff --git a/gcc/analyzer/kf.cc b/gcc/analyzer/kf.cc
index b3c02e8..c9818de 100644
--- a/gcc/analyzer/kf.cc
+++ b/gcc/analyzer/kf.cc
@@ -2334,9 +2334,6 @@ register_known_functions (known_function_manager &kfm,
kfm.add ("__builtin_strlen", std::make_unique<kf_strlen> ());
kfm.add ("strstr", std::make_unique<kf_strstr> ());
kfm.add ("__builtin_strstr", std::make_unique<kf_strstr> ());
-
- register_atomic_builtins (kfm);
- register_varargs_builtins (kfm);
}
/* Known POSIX functions, and some non-standard extensions. */
diff --git a/gcc/config/darwin-c.cc b/gcc/config/darwin-c.cc
index 7257015..c3a1cd5 100644
--- a/gcc/config/darwin-c.cc
+++ b/gcc/config/darwin-c.cc
@@ -537,17 +537,18 @@ find_subframework_header (cpp_reader *pfile, const char *header, cpp_dir **dirp)
const char *n;
for (b = cpp_get_buffer (pfile);
- b && cpp_get_file (b) && cpp_get_path (cpp_get_file (b));
+ b && cpp_get_file (b) && _cpp_get_file_path (cpp_get_file (b));
b = cpp_get_prev (b))
{
- n = find_subframework_file (fname, cpp_get_path (cpp_get_file (b)));
+ n = find_subframework_file (fname,
+ _cpp_get_file_path (cpp_get_file (b)));
if (n)
{
/* Logically, the place where we found the subframework is
the place where we found the Framework that contains the
subframework. This is useful for tracking wether or not
we are in a system header. */
- *dirp = cpp_get_dir (cpp_get_file (b));
+ *dirp = _cpp_get_file_dir (cpp_get_file (b));
return n;
}
}
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 0be898c..fb79b2e 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -4900,7 +4900,8 @@
(match_operand:SI 3 "<cmp_imm_predicate>")]
UNSPEC_PCMP_ITER))]
"TARGET_AVX512F && ix86_pre_reload_split ()
- && rtx_equal_p (operands[1], operands[2])"
+ && rtx_equal_p (operands[1], operands[2])
+ && (!MEM_P (operands[1]) || !MEM_VOLATILE_P (operands[1]))"
"#"
"&& 1"
[(set (match_dup 0) (match_dup 4))]
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8f13d2c..e6918d4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,181 @@
+2025-12-07 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/reduce3.adb: New test.
+
+2025-12-07 H.J. Lu <hjl.tools@gmail.com>
+
+ PR target/122343
+ * gcc.target/i386/20040112-1.c: Add -fomit-frame-pointer and use
+ check-function-bodies to check for loop.
+ * gcc.target/i386/avx-ne-convert-1.c: Compile with
+ -fno-fuse-ops-with-volatile-access.
+ * gcc.target/i386/avx10_2-bf16-1.c: Likewise.
+ * gcc.target/i386/avx10_2-convert-1.c: Likewise.
+ * gcc.target/i386/avx10_2-satcvt-1.c: Likewise.
+ * gcc.target/i386/avx512bf16-vcvtneps2bf16-1.c: Likewise.
+ * gcc.target/i386/avx512bf16vl-vcvtneps2bf16-1a.c: Likewise.
+ * gcc.target/i386/avx512bf16vl-vcvtneps2bf16-1b.c: Likewise.
+ * gcc.target/i386/avx512bitalg-vpshufbitqmb.c: Likewise.
+ * gcc.target/i386/avx512bw-vpcmpb-1.c: Likewise.
+ * gcc.target/i386/avx512bw-vpcmpub-1.c: Likewise.
+ * gcc.target/i386/avx512bw-vpcmpuw-1.c: Likewise.
+ * gcc.target/i386/avx512bw-vpcmpw-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vcvtps2qq-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vcvtps2uqq-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vcvtqq2pd-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vcvtqq2ps-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vcvttps2qq-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vcvttps2uqq-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vcvtuqq2pd-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vcvtuqq2ps-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vextractf32x8-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vextractf64x2-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vextracti64x2-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vfpclasspd-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vfpclassps-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vfpclasssd-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vfpclassss-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vpmullq-1.c: Likewise.
+ * gcc.target/i386/avx512dq-vpmullq-3.c: Likewise.
+ * gcc.target/i386/avx512f-pr100267-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcmppd-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcmpps-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvtps2pd-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvtsd2si-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvtsd2si64-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvtsd2usi-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvtsd2usi64-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvtsi2ss-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvtss2si-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvtss2si64-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvtss2usi-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvtss2usi64-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvttsd2si-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvttsd2si64-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvttsd2usi-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvttsd2usi64-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvttss2si-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvttss2si64-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvttss2usi-1.c: Likewise.
+ * gcc.target/i386/avx512f-vcvttss2usi64-1.c: Likewise.
+ * gcc.target/i386/avx512f-vextractf32x4-1.c: Likewise.
+ * gcc.target/i386/avx512f-vextractf64x4-1.c: Likewise.
+ * gcc.target/i386/avx512f-vextracti64x4-1.c: Likewise.
+ * gcc.target/i386/avx512f-vmovapd-1.c: Likewise.
+ * gcc.target/i386/avx512f-vmovaps-1.c: Likewise.
+ * gcc.target/i386/avx512f-vmovdqa64-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpandnq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpbroadcastd-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpbroadcastq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpd-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpeqq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpequq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpged-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpgeq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpgeud-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpgeuq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpled-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpleq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpleud-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpleuq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpltd-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpltq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpltud-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpltuq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpneqd-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpneqq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpnequd-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpnequq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpud-1.c: Likewise.
+ * gcc.target/i386/avx512f-vpcmpuq-1.c: Likewise.
+ * gcc.target/i386/avx512f-vrndscalepd-1.c: Likewise.
+ * gcc.target/i386/avx512f-vrndscaleps-1.c: Likewise.
+ * gcc.target/i386/avx512fp16-complex-fma.c: Likewise.
+ * gcc.target/i386/avx512fp16-vaddph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtpd2ph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtph2dq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtph2pd-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtph2psx-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtph2qq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtph2udq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtph2uqq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtph2uw-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtph2w-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtps2ph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtqq2ph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvttph2dq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvttph2qq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvttph2udq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvttph2uqq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvttph2uw-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvttph2w-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vcvtuqq2ph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vfcmaddcph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vfcmulcph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vfmaddcph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vfmulcph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vfpclassph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vfpclasssh-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vmulph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vrcpph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vrsqrtph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16-vsqrtph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vaddph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvtpd2ph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvtph2dq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvtph2psx-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvtph2qq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvtph2udq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvtph2uqq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvtph2uw-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvtph2w-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvtps2ph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvtqq2ph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvttph2dq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvttph2udq-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvttph2uw-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvttph2w-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vcvtuqq2ph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vfcmaddcph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vfcmulcph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vfmaddcph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vfmulcph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vfpclassph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vmulph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vrcpph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vrsqrtph-1a.c: Likewise.
+ * gcc.target/i386/avx512fp16vl-vsqrtph-1a.c: Likewise.
+ * gcc.target/i386/avx512vl-pr100267-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vcmppd-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vcmpps-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vcvtpd2ps-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vcvtpd2udq-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vcvttpd2udq-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vcvttps2udq-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vextractf32x4-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vmovapd-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vmovaps-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vmovdqa64-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vpcmpd-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vpcmpeqq-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vpcmpequq-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vpcmpq-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vpcmpud-1.c: Likewise.
+ * gcc.target/i386/avx512vl-vpcmpuq-1.c: Likewise.
+ * gcc.target/i386/pr122343-1a.c: New test.
+ * gcc.target/i386/pr122343-1b.c: Likewise.
+ * gcc.target/i386/pr122343-2a.c: Likewise.
+ * gcc.target/i386/pr122343-2b.c: Likewise.
+ * gcc.target/i386/pr122343-3.c: Likewise.
+ * gcc.target/i386/pr122343-4a.c: Likewise.
+ * gcc.target/i386/pr122343-4b.c: Likewise.
+ * gcc.target/i386/pr122343-5a.c: Likewise.
+ * gcc.target/i386/pr122343-5b.c: Likewise.
+ * gcc.target/i386/pr122343-6a.c: Likewise.
+ * gcc.target/i386/pr122343-6b.c: Likewise.
+ * gcc.target/i386/pr122343-7.c: Likewise.
+
2025-12-06 Alexandre Oliva <oliva@adacore.com>
PR rtl-optimization/122947
diff --git a/gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-1.c b/gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-1.c
index 7a98380..5e6f431 100644
--- a/gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-1.c
+++ b/gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-1.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-mavx2 -O2" } */
+/* { dg-options "-mavx2 -O2 -fno-fuse-ops-with-volatile-access" } */
/* { dg-final { scan-assembler "vpcmpgtq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
#include <immintrin.h>
diff --git a/gcc/testsuite/gnat.dg/reduce3.adb b/gcc/testsuite/gnat.dg/reduce3.adb
new file mode 100644
index 0000000..55934d0
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/reduce3.adb
@@ -0,0 +1,17 @@
+-- { dg-do run }
+-- { dg-options "-gnat2022" }
+
+with Ada.Containers.Vectors;
+
+procedure Reduce3 is
+
+ package Qs is new
+ Ada.Containers.Vectors (Index_Type => Positive, Element_Type => Positive);
+
+ V : Qs.Vector;
+ Sum : Positive;
+
+begin
+ V.Append (1);
+ Sum := V'Reduce ("+", 0);
+end;
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index 816b5c4..816983c 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,13 @@
+2025-12-07 Jason Merrill <jason@redhat.com>
+
+ * include/cpplib.h (cpp_get_path, cpp_get_dir): Remove.
+ (_cpp_get_file_path, _cpp_get_file_name, _cpp_get_file_stat)
+ (_cpp_get_file_dir): Move prototypes from...
+ * internal.h: ...here.
+ * files.cc (_cpp_get_file_path): Rename from...
+ (cpp_get_path): ...this.
+ (cpp_get_dir): Remove.
+
2025-11-10 Jakub Jelinek <jakub@redhat.com>
* directives.cc: Implement CWG3053.
diff --git a/libcpp/files.cc b/libcpp/files.cc
index d80c4bf..f8b3312 100644
--- a/libcpp/files.cc
+++ b/libcpp/files.cc
@@ -2335,6 +2335,16 @@ _cpp_get_file_name (_cpp_file *file)
return file->name;
}
+/* Get the path associated with the _cpp_file F. The path includes
+ the base name from the include directive and the directory it was
+ found in via the search path. */
+
+const char *
+_cpp_get_file_path (_cpp_file *f)
+{
+ return f->path;
+}
+
/* Inteface to file statistics record in _cpp_file structure. */
struct stat *
_cpp_get_file_stat (_cpp_file *file)
@@ -2574,24 +2584,6 @@ validate_pch (cpp_reader *pfile, _cpp_file *file, const char *pchname)
return valid;
}
-/* Get the path associated with the _cpp_file F. The path includes
- the base name from the include directive and the directory it was
- found in via the search path. */
-
-const char *
-cpp_get_path (struct _cpp_file *f)
-{
- return f->path;
-}
-
-/* Get the directory associated with the _cpp_file F. */
-
-cpp_dir *
-cpp_get_dir (struct _cpp_file *f)
-{
- return f->dir;
-}
-
/* Get the cpp_buffer currently associated with the cpp_reader
PFILE. */
diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h
index 5190ff7..16f030c 100644
--- a/libcpp/include/cpplib.h
+++ b/libcpp/include/cpplib.h
@@ -1563,8 +1563,10 @@ extern void cpp_make_system_header (cpp_reader *, int, int);
extern bool cpp_push_include (cpp_reader *, const char *);
extern bool cpp_push_default_include (cpp_reader *, const char *);
extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
-extern const char *cpp_get_path (struct _cpp_file *);
-extern cpp_dir *cpp_get_dir (struct _cpp_file *);
+extern const char *_cpp_get_file_path (_cpp_file *);
+extern const char *_cpp_get_file_name (_cpp_file *);
+extern struct stat *_cpp_get_file_stat (_cpp_file *);
+extern struct cpp_dir *_cpp_get_file_dir (_cpp_file *);
extern cpp_buffer *cpp_get_buffer (cpp_reader *);
extern struct _cpp_file *cpp_get_file (cpp_buffer *);
extern cpp_buffer *cpp_get_prev (cpp_buffer *);
diff --git a/libcpp/internal.h b/libcpp/internal.h
index bcf5559..ae98524 100644
--- a/libcpp/internal.h
+++ b/libcpp/internal.h
@@ -788,9 +788,6 @@ extern void _cpp_pop_file_buffer (cpp_reader *, struct _cpp_file *,
const unsigned char *);
extern bool _cpp_save_file_entries (cpp_reader *pfile, FILE *f);
extern bool _cpp_read_file_entries (cpp_reader *, FILE *);
-extern const char *_cpp_get_file_name (_cpp_file *);
-extern struct stat *_cpp_get_file_stat (_cpp_file *);
-extern struct cpp_dir *_cpp_get_file_dir (_cpp_file *);
extern bool _cpp_has_header (cpp_reader *, const char *, int,
enum include_type);