diff options
author | CoprDistGit <infra@openeuler.org> | 2024-08-01 14:23:42 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2024-08-01 14:23:42 +0000 |
commit | 82711f6567ef069eebb942e382e2c3fa61fbf538 (patch) | |
tree | 22200b7326b32ca672ffb6e4ce6d19a09dc476e5 /gcc48-pr69116.patch | |
parent | 5d624aa0d36abe76a344f0593eae5cf36d083b15 (diff) |
automatic import of compat-libgfortran-48openeuler24.03_LTSopeneuler23.09
Diffstat (limited to 'gcc48-pr69116.patch')
-rw-r--r-- | gcc48-pr69116.patch | 92 |
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; ++} |