summaryrefslogtreecommitdiff
path: root/gcc48-pr69116.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-01 14:23:42 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-01 14:23:42 +0000
commit82711f6567ef069eebb942e382e2c3fa61fbf538 (patch)
tree22200b7326b32ca672ffb6e4ce6d19a09dc476e5 /gcc48-pr69116.patch
parent5d624aa0d36abe76a344f0593eae5cf36d083b15 (diff)
automatic import of compat-libgfortran-48openeuler24.03_LTSopeneuler23.09
Diffstat (limited to 'gcc48-pr69116.patch')
-rw-r--r--gcc48-pr69116.patch92
1 files changed, 92 insertions, 0 deletions
diff --git a/gcc48-pr69116.patch b/gcc48-pr69116.patch
new file mode 100644
index 0000000..9b93c79
--- /dev/null
+++ b/gcc48-pr69116.patch
@@ -0,0 +1,92 @@
+2016-02-10 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/69116
+ * include/bits/valarray_before.h (__fun, __fun_with_valarray): Only
+ define result_type for types which can be safely used with valarrays.
+ * testsuite/26_numerics/valarray/69116.cc: New.
+
+--- libstdc++-v3/include/bits/valarray_before.h (revision 233264)
++++ libstdc++-v3/include/bits/valarray_before.h (revision 233265)
+@@ -331,14 +331,24 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ { return pow(__x, __y); }
+ };
+
++ template<typename _Tp, bool _IsValidValarrayValue = !__is_abstract(_Tp)>
++ struct __fun_with_valarray
++ {
++ typedef _Tp result_type;
++ };
++
++ template<typename _Tp>
++ struct __fun_with_valarray<_Tp, false>
++ {
++ // No result type defined for invalid value types.
++ };
+
+ // We need these bits in order to recover the return type of
+ // some functions/operators now that we're no longer using
+ // function templates.
+ template<typename, typename _Tp>
+- struct __fun
++ struct __fun : __fun_with_valarray<_Tp>
+ {
+- typedef _Tp result_type;
+ };
+
+ // several specializations for relational operators.
+--- libstdc++-v3/testsuite/26_numerics/valarray/69116.cc (nonexistent)
++++ libstdc++-v3/testsuite/26_numerics/valarray/69116.cc (revision 233265)
+@@ -0,0 +1,53 @@
++// Copyright (C) 2016 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library 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, or (at your option)
++// any later version.
++
++// This library 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 library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++// { dg-do compile }
++// { dg-options "-std=gnu++98" }
++
++// libstdc++/69116
++
++#include <exception>
++#include <valarray>
++
++template<typename T>
++ void foo(const T&) { }
++
++struct X : std::exception // makes namespace std an associated namespace
++{
++ virtual void pure() = 0;
++
++ typedef void(*func_type)(const X&);
++
++ void operator+(func_type) const;
++ void operator-(func_type) const;
++ void operator*(func_type) const;
++ void operator/(func_type) const;
++ void operator%(func_type) const;
++ void operator<<(func_type) const;
++ void operator>>(func_type) const;
++};
++
++void foo(X& x)
++{
++ x + foo;
++ x - foo;
++ x * foo;
++ x / foo;
++ x % foo;
++ x << foo;
++ x >> foo;
++}