commit 500b22d867605421113f593ef85a79ec394006ba
Author: Jakub Jelinek
Date: Thu Jun 5 18:50:16 2025 +0200
Bump BASE-VER.
2025-06-05 Jakub Jelinek
* BASE-VER: Set to 13.4.1.
diff --git a/gcc/BASE-VER b/gcc/BASE-VER
index 74302c5119c..c27905ac3dc 100644
--- a/gcc/BASE-VER
+++ b/gcc/BASE-VER
@@ -1 +1 @@
-13.4.0
+13.4.1
commit 195c76fb53c7c751c25b864bef255c7ee1195f07
Author: Eric Botcazou
Date: Thu Jun 5 13:20:26 2025 +0200
Fix crash with constant initializer caused by IPA
The testcase compiled with -O2 -gnatn makes the compiler crash in
vect_can_force_dr_alignment_p during SLP vectorization:
if (decl_in_symtab_p (decl)
&& !symtab_node::get (decl)->can_increase_alignment_p ())
return false;
because symtab_node::get (decl) returns a null node. The phenomenon occurs
for a pair of twin symbols listed like so in .cgraph:
Opt7_Pkg.T12b/17 (Opt7_Pkg.T12b)
Type: variable definition analyzed
Visibility: semantic_interposition external public artificial
Aux: @0x44d45e0
References:
Referring: opt7_pkg__enum_name_table/13 (addr) opt7_pkg__enum_name_table/13
(addr)
Availability: not-ready
Varpool flags: initialized read-only const-value-known
Opt7_Pkg.T8b/16 (Opt7_Pkg.T8b)
Type: variable definition analyzed
Visibility: semantic_interposition external public artificial
Aux: @0x7f9fda3fff00
References:
Referring: opt7_pkg__enum_name_table/13 (addr) opt7_pkg__enum_name_table/13
(addr)
Availability: not-ready
Varpool flags: initialized read-only const-value-known
with:
opt7_pkg__enum_name_table/13 (Opt7_Pkg.Enum_Name_Table)
Type: variable definition analyzed
Visibility: semantic_interposition external public
Aux: @0x44d45e0
References: Opt7_Pkg.T8b/16 (addr) Opt7_Pkg.T8b/16 (addr) Opt7_Pkg.T12b/17
(addr) Opt7_Pkg.T12b/17 (addr)
Referring: opt7_pkg__image/2 (read) opt7_pkg__image/2 (read)
opt7_pkg__image/2 (read) opt7_pkg__image/2 (read) opt7_pkg__image/2 (read)
opt7_pkg__image/2 (read) opt7_pkg__image/2 (read) opt7_pkg__image/2 (read)
Availability: not-ready
Varpool flags: initialized read-only const-value-known
being the crux of the matter.
What happens is that symtab_remove_unreachable_nodes leaves the last symbol
in kind of a limbo state: in .remove_symbols, we have:
opt7_pkg__enum_name_table/13 (Opt7_Pkg.Enum_Name_Table)
Type: variable
Body removed by symtab_remove_unreachable_nodes
Visibility: externally_visible semantic_interposition external public
References:
Referring: opt7_pkg__image/2 (read) opt7_pkg__image/2 (read)
Availability: not_available
Varpool flags: initialized read-only const-value-known
This means that the "body" (DECL_INITIAL) of the symbol has been disregarded
during reachability analysis, causing the first two symbols to be discarded:
Reclaiming variables: Opt7_Pkg.T12b/17 Opt7_Pkg.T8b/16
but the DECL_INITIAL is explicitly preserved for later constant folding,
which makes it possible to retrofit the DECLs corresponding to the first
two symbols in the GIMPLE IR and ultimately leads to the crash.
gcc/
* tree-vect-data-refs.cc (vect_can_force_dr_alignment_p): Return
false if the variable has no symtab node.
gcc/testsuite/
* gnat.dg/specs/opt7.ads: New test.
* gnat.dg/specs/opt7_pkg.ads: New helper.
* gnat.dg/specs/opt7_pkg.adb: Likewise.
diff --git a/gcc/testsuite/gnat.dg/specs/opt7.ads b/gcc/testsuite/gnat.dg/specs/opt7.ads
new file mode 100644
index 00000000000..ee151f082a8
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/opt7.ads
@@ -0,0 +1,15 @@
+-- { dg-do compile }
+-- { dg-options "-O2 -gnatn" }
+
+with Opt7_Pkg; use Opt7_Pkg;
+
+package Opt7 is
+
+ type Rec is record
+ E : Enum;
+ end record;
+
+ function Image (R : Rec) return String is
+ (if R.E = A then Image (R.E) else "");
+
+end Opt7;
diff --git a/gcc/testsuite/gnat.dg/specs/opt7_pkg.adb b/gcc/testsuite/gnat.dg/specs/opt7_pkg.adb
new file mode 100644
index 00000000000..1c9d79bb872
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/opt7_pkg.adb
@@ -0,0 +1,15 @@
+package body Opt7_Pkg is
+
+ type Constant_String_Access is access constant String;
+
+ type Enum_Name is array (Enum) of Constant_String_Access;
+
+ Enum_Name_Table : constant Enum_Name :=
+ (A => new String'("A"), B => new String'("B"));
+
+ function Image (E : Enum) return String is
+ begin
+ return Enum_Name_Table (E).all;
+ end Image;
+
+end Opt7_Pkg;
diff --git a/gcc/testsuite/gnat.dg/specs/opt7_pkg.ads b/gcc/testsuite/gnat.dg/specs/opt7_pkg.ads
new file mode 100644
index 00000000000..2dd271b63ad
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/opt7_pkg.ads
@@ -0,0 +1,9 @@
+-- { dg-excess-errors "no code generated" }
+
+package Opt7_Pkg is
+
+ type Enum is (A, B);
+
+ function Image (E : Enum) return String with Inline;
+
+end Opt7_Pkg;
diff --git a/gcc/tree-vect-data-refs.cc b/gcc/tree-vect-data-refs.cc
index a268a27b8c8..8adf80455b3 100644
--- a/gcc/tree-vect-data-refs.cc
+++ b/gcc/tree-vect-data-refs.cc
@@ -6726,7 +6726,8 @@ vect_can_force_dr_alignment_p (const_tree decl, poly_uint64 alignment)
return false;
if (decl_in_symtab_p (decl)
- && !symtab_node::get (decl)->can_increase_alignment_p ())
+ && (!symtab_node::get (decl)
+ || !symtab_node::get (decl)->can_increase_alignment_p ()))
return false;
if (TREE_STATIC (decl))
commit 6e8dcc0aa0ba5de2c44ceeb7bc2323def4724cd1
Author: Giuseppe D'Angelo
Date: Tue Dec 10 00:56:13 2024 +0100
libstdc++: fix compile error when converting std::weak_ptr
A std::weak_ptr can be converted to a compatible
std::weak_ptr. This is implemented by having suitable converting
constructors to std::weak_ptr which dispatch to the __weak_ptr base
class (implementation detail).
In __weak_ptr, lock() is supposed to return a __shared_ptr,
not a __shared_ptr (that is, __shared_ptr).
Unfortunately the return type of lock() and the type of the returned
__shared_ptr were mismatching and that was causing a compile error: when
converting a __weak_ptr to a __weak_ptr through __weak_ptr's
converting constructor, the code calls lock(), and that simply fails to
build.
Fix it by removing the usage of element_type inside lock(), and using
_Tp instead.
Note that std::weak_ptr::lock() itself was already correct; the one in
__weak_ptr was faulty (and that is the one called by __weak_ptr's
converting constructors).
libstdc++-v3/ChangeLog:
* include/bits/shared_ptr_base.h (lock): Fixed a compile error
when calling lock() on a weak_ptr, by removing an
erroneous usage of element_type from within lock().
* testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc:
Add more tests for array types.
* testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc:
Likewise.
* testsuite/20_util/shared_ptr/requirements/1.cc: New test.
* testsuite/20_util/weak_ptr/requirements/1.cc: New test.
(cherry picked from commit df0e6509bf74421ea68a2e025300bcd6ca63722f)
diff --git a/libstdc++-v3/include/bits/shared_ptr_base.h b/libstdc++-v3/include/bits/shared_ptr_base.h
index 2c948d5b838..d300adfcc4a 100644
--- a/libstdc++-v3/include/bits/shared_ptr_base.h
+++ b/libstdc++-v3/include/bits/shared_ptr_base.h
@@ -2065,7 +2065,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__shared_ptr<_Tp, _Lp>
lock() const noexcept
- { return __shared_ptr(*this, std::nothrow); }
+ { return __shared_ptr<_Tp, _Lp>(*this, std::nothrow); }
long
use_count() const noexcept
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc
new file mode 100644
index 00000000000..8ddb5d220ac
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/1.cc
@@ -0,0 +1,33 @@
+// { dg-do compile { target c++11 } }
+// { dg-require-effective-target hosted }
+
+#include
+#include
+
+using namespace __gnu_test;
+
+void
+test01()
+{
+ std::shared_ptr ptr;
+ std::shared_ptr ptr2 = ptr;
+
+#if __cpp_lib_shared_ptr_arrays >= 201611L
+ std::shared_ptr ptr_array;
+ std::shared_ptr ptr_array2 = ptr_array;
+ std::shared_ptr ptr_array3 = ptr_array;
+#endif
+}
+
+void
+test02()
+{
+ std::shared_ptr ptr;
+ std::shared_ptr ptr2 = ptr;
+
+#if __cpp_lib_shared_ptr_arrays >= 201611L
+ std::shared_ptr ptr_array;
+ std::shared_ptr ptr_array2 = ptr_array;
+ std::shared_ptr ptr_array3 = ptr_array;
+#endif
+}
diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc
index 03d2fe10d48..892dd6e8f1e 100644
--- a/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc
+++ b/libstdc++-v3/testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc
@@ -28,3 +28,15 @@ template class std::shared_ptr;
template class std::shared_ptr;
template class std::shared_ptr;
template class std::shared_ptr;
+
+#if __cpp_lib_shared_ptr_arrays >= 201611L
+template class std::shared_ptr;
+template class std::shared_ptr;
+template class std::shared_ptr;
+template class std::shared_ptr;
+
+template class std::shared_ptr;
+template class std::shared_ptr;
+template class std::shared_ptr;
+template class std::shared_ptr;
+#endif
diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/1.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/1.cc
new file mode 100644
index 00000000000..04ea837d85a
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/1.cc
@@ -0,0 +1,33 @@
+// { dg-do compile { target c++11 } }
+// { dg-require-effective-target hosted }
+
+#include
+#include
+
+using namespace __gnu_test;
+
+void
+test01()
+{
+ std::weak_ptr ptr;
+ std::weak_ptr ptr2 = ptr;
+
+#if __cpp_lib_shared_ptr_arrays >= 201611L
+ std::weak_ptr ptr_array;
+ std::weak_ptr ptr_array2 = ptr_array;
+ std::weak_ptr ptr_array3 = ptr_array;
+#endif
+}
+
+void
+test02()
+{
+ std::weak_ptr ptr;
+ std::weak_ptr ptr2 = ptr;
+
+#if __cpp_lib_shared_ptr_arrays >= 201611L
+ std::weak_ptr ptr_array;
+ std::weak_ptr ptr_array2 = ptr_array;
+ std::weak_ptr ptr_array3 = ptr_array;
+#endif
+}
diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc
index 5087e074898..18baa41b998 100644
--- a/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc
+++ b/libstdc++-v3/testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc
@@ -28,3 +28,15 @@ template class std::weak_ptr;
template class std::weak_ptr;
template class std::weak_ptr;
template class std::weak_ptr;
+
+#if __cpp_lib_shared_ptr_arrays >= 201611L
+template class std::weak_ptr;
+template class std::weak_ptr;
+template class std::weak_ptr;
+template class std::weak_ptr;
+
+template class std::weak_ptr;
+template class std::weak_ptr;
+template class std::weak_ptr;
+template class std::weak_ptr;
+#endif
commit 561607ff94a9c602de3cb6c09518a72c7ad6160f
Author: Jason Merrill
Date: Fri May 30 18:27:45 2025 -0400
c++: lambda this capture and requires [PR120123]
We shouldn't need to be within the lambda body to look through it to the
enclosing non-static member function.
This change is a small subset of r16-970.
PR c++/120123
gcc/cp/ChangeLog:
* lambda.cc (nonlambda_method_basetype): Look through lambdas
even when current_class_ref is null.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/concepts-lambda24.C: New test.
diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc
index 9925209b2ed..ce2bcbe9a7f 100644
--- a/gcc/cp/lambda.cc
+++ b/gcc/cp/lambda.cc
@@ -975,12 +975,9 @@ current_nonlambda_function (void)
tree
nonlambda_method_basetype (void)
{
- if (!current_class_ref)
- return NULL_TREE;
-
tree type = current_class_type;
if (!type || !LAMBDA_TYPE_P (type))
- return type;
+ return current_class_ref ? type : NULL_TREE;
while (true)
{
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C
new file mode 100644
index 00000000000..28f56ca2335
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-lambda24.C
@@ -0,0 +1,13 @@
+// PR c++/120123
+// { dg-do compile { target c++20 } }
+
+struct H {
+ void member(int) {}
+ void call() {
+ [this]() {
+ [this](const auto& v)
+ requires requires { /*this->*/member(v); }
+ { return member(v); }(0);
+ };
+ }
+};
commit 26e891dd7e9600a3f3a1acbdfe0bb39a44b8a65d
Author: GCC Administrator
Date: Fri Jun 6 00:22:10 2025 +0000
Daily bump.
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fd9bb281895..96ccff31839 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2025-06-05 Eric Botcazou
+
+ * tree-vect-data-refs.cc (vect_can_force_dr_alignment_p): Return
+ false if the variable has no symtab node.
+
2025-06-05 Release Manager
* GCC 13.4.0 released.
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 520e78d7696..c6de4e34998 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20250605
+20250606
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 56ca80765f1..40aa436c2f1 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2025-06-05 Jason Merrill
+
+ PR c++/120123
+ * lambda.cc (nonlambda_method_basetype): Look through lambdas
+ even when current_class_ref is null.
+
2025-06-05 Release Manager
* GCC 13.4.0 released.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e822bcc2d45..71d2d3780c4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,14 @@
+2025-06-05 Jason Merrill
+
+ PR c++/120123
+ * g++.dg/cpp2a/concepts-lambda24.C: New test.
+
+2025-06-05 Eric Botcazou
+
+ * gnat.dg/specs/opt7.ads: New test.
+ * gnat.dg/specs/opt7_pkg.ads: New helper.
+ * gnat.dg/specs/opt7_pkg.adb: Likewise.
+
2025-06-05 Release Manager
* GCC 13.4.0 released.
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index d0851cd38ba..7bc3a622f14 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,18 @@
+2025-06-05 Giuseppe D'Angelo
+
+ Backported from master:
+ 2025-03-14 Giuseppe D'Angelo
+
+ * include/bits/shared_ptr_base.h (lock): Fixed a compile error
+ when calling lock() on a weak_ptr, by removing an
+ erroneous usage of element_type from within lock().
+ * testsuite/20_util/shared_ptr/requirements/explicit_instantiation/1.cc:
+ Add more tests for array types.
+ * testsuite/20_util/weak_ptr/requirements/explicit_instantiation/1.cc:
+ Likewise.
+ * testsuite/20_util/shared_ptr/requirements/1.cc: New test.
+ * testsuite/20_util/weak_ptr/requirements/1.cc: New test.
+
2025-06-05 Release Manager
* GCC 13.4.0 released.
commit 63be00fe4cad2552edcda863087adcce0b2aa236
Author: Giuseppe D'Angelo
Date: Thu Feb 6 14:24:17 2025 +0000
libstdc++: fix a dangling reference crash in ranges::is_permutation [PR118160]
The code was caching the result of `invoke(proj, *it)` in a local
`auto &&` variable. The problem is that this may create dangling
references, for instance in case `proj` is `std::identity` (the common
case) and `*it` produces a prvalue: lifetime extension does not
apply here due to the expressions involved.
Instead, store (and lifetime-extend) the result of `*it` in a separate
variable, then project that variable. While at it, also forward the
result of the projection to the predicate, so that the predicate can
act on the proper value category.
libstdc++-v3/ChangeLog:
PR libstdc++/118160
PR libstdc++/100249
* include/bits/ranges_algo.h (__is_permutation_fn): Avoid a
dangling reference by storing the result of the iterator
dereference and the result of the projection in two distinct
variables, in order to lifetime-extend each one.
Forward the projected value to the predicate.
* testsuite/25_algorithms/is_permutation/constrained.cc: Add a
test with a range returning prvalues. Test it in a constexpr
context, in order to rely on the compiler to catch UB.
Signed-off-by: Giuseppe D'Angelo
(cherry picked from commit 2a2bd96d0d2109384a0eedde843ba811d2e18738)
diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h
index 48efe9f8165..4060a507d6f 100644
--- a/libstdc++-v3/include/bits/ranges_algo.h
+++ b/libstdc++-v3/include/bits/ranges_algo.h
@@ -561,9 +561,12 @@ namespace ranges
for (auto __scan = __first1; __scan != __last1; ++__scan)
{
- auto&& __proj_scan = std::__invoke(__proj1, *__scan);
+ auto&& __scan_deref = *__scan;
+ auto&& __proj_scan =
+ std::__invoke(__proj1, std::forward(__scan_deref));
auto __comp_scan = [&] (_Tp&& __arg) -> bool {
- return std::__invoke(__pred, __proj_scan,
+ return std::__invoke(__pred,
+ std::forward(__proj_scan),
std::forward<_Tp>(__arg));
};
if (__scan != ranges::find_if(__first1, __scan,
diff --git a/libstdc++-v3/testsuite/25_algorithms/is_permutation/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/is_permutation/constrained.cc
index e503247d44a..5ffe3ce3da3 100644
--- a/libstdc++-v3/testsuite/25_algorithms/is_permutation/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/is_permutation/constrained.cc
@@ -20,6 +20,7 @@
#include
#include
+#include
#include
#include
@@ -77,10 +78,22 @@ test03()
while (std::next_permutation(std::begin(cx), std::end(cx)));
}
+constexpr
+bool
+test04() // PR118160, do not create dangling references
+{
+ int x[] = { 4, 3, 2, 1 };
+ auto y = std::views::iota(1, 5);
+ return ranges::is_permutation(x, y) && ranges::is_permutation(y, x);
+}
+
+static_assert(test04());
+
int
main()
{
test01();
test02();
test03();
+ VERIFY( test04() );
}
commit 6694282dd41a99d2d50a7710648dfc6080c9d67c
Author: GCC Administrator
Date: Sat Jun 7 00:21:58 2025 +0000
Daily bump.
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index c6de4e34998..a3a91b55b0f 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20250606
+20250607
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 7bc3a622f14..6a0a0188a7f 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,19 @@
+2025-06-06 Giuseppe D'Angelo
+
+ Backported from master:
+ 2025-02-07 Giuseppe D'Angelo
+
+ PR libstdc++/118160
+ PR libstdc++/100249
+ * include/bits/ranges_algo.h (__is_permutation_fn): Avoid a
+ dangling reference by storing the result of the iterator
+ dereference and the result of the projection in two distinct
+ variables, in order to lifetime-extend each one.
+ Forward the projected value to the predicate.
+ * testsuite/25_algorithms/is_permutation/constrained.cc: Add a
+ test with a range returning prvalues. Test it in a constexpr
+ context, in order to rely on the compiler to catch UB.
+
2025-06-05 Giuseppe D'Angelo
Backported from master:
commit cab3835238686ba74b02309518574a34ef8857de
Author: GCC Administrator
Date: Sun Jun 8 00:20:43 2025 +0000
Daily bump.
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index a3a91b55b0f..800deb1dc5a 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20250607
+20250608
commit 09b295ddc0f31147243869a801ac40b4711cd49b
Author: GCC Administrator
Date: Mon Jun 9 00:21:25 2025 +0000
Daily bump.
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index 800deb1dc5a..d0f154b4f06 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20250608
+20250609
commit 9184a4b75a750a3ee86a7864fe432198995193b9
Author: GCC Administrator
Date: Tue Jun 10 00:21:51 2025 +0000
Daily bump.
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index d0f154b4f06..52988ae3b03 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20250609
+20250610
commit d97de614f7a3729f7a841f48748d0b3bf746d0a2
Author: Jonathan Wakely
Date: Tue May 20 10:53:41 2025 +0100
libstdc++: Fix incorrect links to archived SGI STL docs
In r8-7777-g25949ee33201f2 I updated some URLs to point to copies of the
SGI STL docs in the Wayback Machine, because the original pags were no
longer hosted on sgi.com. However, I incorrectly assumed that if one
archived page was at https://web.archive.org/web/20171225062613/... then
all the other pages would be too. Apparently that's not how the Wayback
Machine works, and each page is archived on a different date. That meant
that some of our links were redirecting to archived copies of the
announcement that the SGI STL docs have gone away.
This fixes each URL to refer to a correctly archived copy of the
original docs.
libstdc++-v3/ChangeLog:
* doc/xml/faq.xml: Update URL for archived SGI STL docs.
* doc/xml/manual/containers.xml: Likewise.
* doc/xml/manual/extensions.xml: Likewise.
* doc/xml/manual/using.xml: Likewise.
* doc/xml/manual/utilities.xml: Likewise.
* doc/html/*: Regenerate.
(cherry picked from commit 501e6e786652748ff0ad9a322f74b9b47970031f)
diff --git a/libstdc++-v3/doc/html/faq.html b/libstdc++-v3/doc/html/faq.html
index 2e913920d05..d7ad0934cfb 100644
--- a/libstdc++-v3/doc/html/faq.html
+++ b/libstdc++-v3/doc/html/faq.html
@@ -797,7 +797,7 @@
Libstdc++-v3 incorporates a lot of code from
the SGI STL
(the final merge was from
- release 3.3).
+ release 3.3).
The code in libstdc++ contains many fixes and changes compared to the
original SGI code.
diff --git a/libstdc++-v3/doc/html/manual/containers.html b/libstdc++-v3/doc/html/manual/containers.html
index 7035a949074..dcd609a6000 100644
--- a/libstdc++-v3/doc/html/manual/containers.html
+++ b/libstdc++-v3/doc/html/manual/containers.html
@@ -11,7 +11,7 @@
Yes it is, at least using the old
ABI, and that's okay. This is a decision that we preserved
when we imported SGI's STL implementation. The following is
- quoted from their FAQ:
+ quoted from their FAQ:
The size() member function, for list and slist, takes time
proportional to the number of elements in the list. This was a
diff --git a/libstdc++-v3/doc/html/manual/ext_numerics.html b/libstdc++-v3/doc/html/manual/ext_numerics.html
index 9b864e1dcf4..c3a5623d175 100644
--- a/libstdc++-v3/doc/html/manual/ext_numerics.html
+++ b/libstdc++-v3/doc/html/manual/ext_numerics.html
@@ -14,7 +14,7 @@
The operation functor must be associative.
The iota function wins the award for Extension With the
Coolest Name (the name comes from Ken Iverson's APL language.) As
- described in the SGI
+ described in the SGI
documentation, it "assigns sequentially increasing values to a range.
That is, it assigns value to *first,
value + 1 to *(first + 1) and so on."
diff --git a/libstdc++-v3/doc/html/manual/ext_sgi.html b/libstdc++-v3/doc/html/manual/ext_sgi.html
index ae2062954f4..2310857804b 100644
--- a/libstdc++-v3/doc/html/manual/ext_sgi.html
+++ b/libstdc++-v3/doc/html/manual/ext_sgi.html
@@ -28,12 +28,12 @@
and sets.
Each of the associative containers map, multimap, set, and multiset
have a counterpart which uses a
- hashing
+ hashing
function to do the arranging, instead of a strict weak ordering
function. The classes take as one of their template parameters a
function object that will return the hash value; by default, an
instantiation of
- hash.
+ hash.
You should specialize this functor for your class, or define your own,
before trying to use one of the hashing classes.
The hashing classes support all the usual associative container
diff --git a/libstdc++-v3/doc/html/manual/using_concurrency.html b/libstdc++-v3/doc/html/manual/using_concurrency.html
index f99cca414ec..a75adbf0f22 100644
--- a/libstdc++-v3/doc/html/manual/using_concurrency.html
+++ b/libstdc++-v3/doc/html/manual/using_concurrency.html
@@ -40,7 +40,7 @@ The standard places requirements on the library to ensure that no data
races are caused by the library itself or by programs which use the
library correctly (as described below).
The C++11 memory model and library requirements are a more formal version
-of the SGI STL definition of thread safety, which the library used
+of the SGI STL definition of thread safety, which the library used
prior to the 2011 standard.
The library strives to be thread-safe when all of the following
conditions are met:
@@ -243,10 +243,10 @@ gcc version 4.1.2 20070925 (Red Hat 4.1.2-33)
threaded and non-threaded code), see Chapter 17.
Two excellent pages to read when working with the Standard C++
containers and threads are
- SGI's
- https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html and
- SGI's
- https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/Allocators.html.
+ SGI's
+ https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html and
+ SGI's
+ https://web.archive.org/web/20171108142526/http://www.sgi.com/tech/stl/Allocators.html.
However, please ignore all discussions about the user-level
configuration of the lock implementation inside the STL
container-memory allocator on those pages. For the sake of this
diff --git a/libstdc++-v3/doc/html/manual/utilities.html b/libstdc++-v3/doc/html/manual/utilities.html
index 15c9a9d170a..1216b72ad3e 100644
--- a/libstdc++-v3/doc/html/manual/utilities.html
+++ b/libstdc++-v3/doc/html/manual/utilities.html
@@ -11,6 +11,6 @@
get slightly the wrong idea. In the interest of not reinventing
the wheel, we will refer you to the introduction to the functor
concept written by SGI as part of their STL, in
- their
- https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/functors.html.
+ their
+ https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html.