summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2023-07-07Update ChangeLog and version files for releasereleases/gcc-10.5.0releases/gcc-10Richard Biener
2023-07-07Daily bump.GCC Administrator
2023-07-06Daily bump.GCC Administrator
2023-07-05Daily bump.GCC Administrator
2023-07-04Daily bump.GCC Administrator
2023-07-03Daily bump.GCC Administrator
2023-07-02Daily bump.GCC Administrator
2023-07-01d: Fix ICE in setValue, at d/dmd/dinterpret.c:7013Iain Buclaw
Backports ICE fix from upstream. When casting null to integer or real, instead of painting the type on the NullExp, we emplace an IntegerExp/RealExp with the value zero. Same as when casting from NullExp to bool. Reviewed-on: https://github.com/dlang/dmd/pull/13172 PR d/110511 gcc/d/ChangeLog: * dmd/dinterpret.c (Interpreter::visit (CastExp *)): Handle casting null to int or float. gcc/testsuite/ChangeLog: * gdc.test/compilable/test21794.d: New test. (cherry picked from commit 066385c918485d4cef5c243d3b0691193df382de)
2023-07-01Daily bump.GCC Administrator
2023-06-30c++: bogus warning with value init of const pmf [PR92752]Patrick Palka
Here we're emitting a -Wignored-qualifiers warning for an intermediate compiler-generated cast of nullptr to 'method-type* const' as part of value initialization of a const pmf. This patch suppresses the warning by instead casting to the corresponding unqualified type. PR c++/92752 gcc/cp/ChangeLog: * typeck.c (build_ptrmemfunc): Cast a nullptr constant to the unqualified pointer type not the qualified one. gcc/testsuite/ChangeLog: * g++.dg/warn/Wignored-qualifiers2.C: New test. Co-authored-by: Jason Merrill <jason@redhat.com> (cherry picked from commit e971990cbda091b4caf5e1a5bded5121068934e4)
2023-06-30c++: Fix reference NTTP binding to noexcept fn [PR97420]Patrick Palka
Here, in C++17 mode, convert_nontype_argument_function is rejecting binding a non-noexcept function reference template parameter to a noexcept function (encoded as the template argument '*(int (&) (int)) &f'). The first roadblock to making this work is that the argument is wrapped an an implicit INDIRECT_REF, so we need to unwrap it before calling strip_fnptr_conv. The second roadblock is that the NOP_EXPR cast converts from a function pointer type to a reference type while simultaneously removing the noexcept qualification, and fnptr_conv_p doesn't consider this cast to be a function pointer conversion. This patch fixes this by making fnptr_conv_p treat REFERENCE_TYPEs and POINTER_TYPEs interchangeably. Finally, in passing, this patch also simplifies noexcept_conv_p by removing a bunch of redundant checks already performed by its only caller fnptr_conv_p. PR c++/97420 gcc/cp/ChangeLog: * cvt.c (noexcept_conv_p): Remove redundant checks and simplify. (fnptr_conv_p): Don't call non_reference. Use INDIRECT_TYPE_P instead of TYPE_PTR_P. * pt.c (convert_nontype_argument_function): Look through implicit INDIRECT_REFs before calling strip_fnptr_conv. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/noexcept68.C: New test. (cherry picked from commit b4329e3dd6fb7c78948fcf9d2f5b9d873deec284)
2023-06-30Daily bump.GCC Administrator
2023-06-28go: Update usage of TARGET_AIX to TARGET_AIX_OSPaul E. Murphy
TARGET_AIX is defined to a non-zero value on linux and maybe other powerpc64le targets. This leads to unexpected behavior such as dropping the .go_export section when linking a shared library on linux/powerpc64le. Instead, use TARGET_AIX_OS to toggle AIX specific behavior. Fixes golang/go#60798. 2023-06-22 Paul E. Murphy <murphyp@linux.ibm.com> gcc/go/ * go-backend.c [TARGET_AIX]: Rename and update usage to TARGET_AIX_OS. * go-lang.c: Likewise. (cherry picked from commit b76cd1ec361712e1ac9ca5e0246da24ea2b78916)
2023-06-29Daily bump.GCC Administrator
2023-06-28Make option mvzeroupper independent of optimization level.liuhongt
pass_insert_vzeroupper is under condition TARGET_AVX && TARGET_VZEROUPPER && flag_expensive_optimizations && !optimize_size But the document of mvzeroupper doesn't mention the insertion required -O2 and above, it may confuse users when they explicitly use -Os -mvzeroupper. ------------ mvzeroupper Target Mask(VZEROUPPER) Save Generate vzeroupper instruction before a transfer of control flow out of the function. ------------ The patch moves flag_expensive_optimizations && !optimize_size to ix86_option_override_internal. It makes -mvzeroupper independent of optimization level, but still keeps the behavior of architecture tuning(emit_vzeroupper) unchanged. gcc/ChangeLog: * config/i386/i386-features.c (pass_insert_vzeroupper:gate): Move flag_expensive_optimizations && !optimize_size to .. * config/i386/i386-options.c (ix86_option_override_internal): .. this, it makes -mvzeroupper independent of optimization level, but still keeps the behavior of architecture tuning(emit_vzeroupper) unchanged. (rest_of_handle_insert_vzeroupper): Remove flag_expensive_optimizations && !optimize_size. gcc/testsuite/ChangeLog: * gcc.target/i386/avx-vzeroupper-29.c: New testcase.
2023-06-28Daily bump.GCC Administrator
2023-06-27Daily bump.GCC Administrator
2023-06-26d: Suboptimal codegen for __builtin_expect(cond, false)Iain Buclaw
Since PR96435, both boolean objects and expressions have been evaluated in the following way. (*(ubyte*)&obj_or_expr) & 1 It has been noted that sometimes this can cause the back-end to optimize in non-obvious ways - in particular with __builtin_expect. This @safe feature is now restricted to just when reading the value of a bool field that comes from a union. PR d/110359 gcc/d/ChangeLog: * d-convert.cc (convert_for_rvalue): Only apply the @safe boolean conversion to boolean fields of a union. (convert_for_condition): Call convert_for_rvalue in the default case. gcc/testsuite/ChangeLog: * gdc.dg/pr110359.d: New test. (cherry picked from commit ab98db1e8c1b997414539f41b7fb814019497d8d)
2023-06-26Daily bump.GCC Administrator
2023-06-25Daily bump.GCC Administrator
2023-06-24Daily bump.GCC Administrator
2023-06-23libstdc++: Fix std::numeric_limits::lowest() test for strict modesJonathan Wakely
This test uses std::is_integral to decide whether we are testing an integral or floating-point type. But that fails for __int128 because is_integral<__int128> is false in strict modes. By using numeric_limits::is_integer instead we get the right answer for all types that have a numeric_limits specialization. We can also simplify the test by removing the unnecessary tag dispatching. libstdc++-v3/ChangeLog: * testsuite/18_support/numeric_limits/lowest.cc: Use numeric_limits<T>::is_integer instead of is_integral<T>::value. (cherry picked from commit 45ba5426c129993704a73e6ace4016eaa950d7ee)
2023-06-23libstdc++: Document removal of implicit allocator rebinding extensionsJonathan Wakely
Traditionally libstdc++ allowed containers to be instantiated with allocator's that have the wrong value type, implicitly rebinding the allocator to the container's value type. Since C++20 that has been explicitly ill-formed, so the extension is no longer supported in strict modes (e.g. -std=c++17) and in C++20 and later. libstdc++-v3/ChangeLog: * doc/xml/manual/evolution.xml: Document removal of implicit allocator rebinding extensions in strict mode and for C++20. * doc/html/*: Regenerate. (cherry picked from commit 8cbaf679a3c1875c5475bd1cb0fb86fb9d03b2d4)
2023-06-23libstdc++: Fix self-move for std::weak_ptr [PR108118]Jonathan Wakely
I think an alternative fix would be something like: _M_ptr = std::exchange(rhs._M_ptr, nullptr); _M_refcount = std::move(rhs._M_refcount); The standard's move-and-swap implementation generates smaller code at all levels except -O0 and -Og, so it seems simplest to just do what the standard says. libstdc++-v3/ChangeLog: PR libstdc++/108118 * include/bits/shared_ptr_base.h (weak_ptr::operator=): Implement as move-and-swap exactly as specified in the standard. * testsuite/20_util/weak_ptr/cons/self_move.cc: New test. (cherry picked from commit 92eb0adc14a5f84acce7e5bc780b81b1544b24aa)
2023-06-23libstdc++: Avoid stack overflow in std::vector (PR 94540)Jonathan Wakely
The std::__uninitialized_default_n algorithm used by std::vector creates an initial object as a local variable then copies that into the destination range. If the object is too large for the stack this crashes. We should create the first object directly into the destination and then copy it from there. This doesn't fix the bug for C++98, because in that case the initial value is created as a default argument of the vector constructor i.e. in the user's code, not inside libstdc++. We can't prevent that. PR libstdc++/94540 * include/bits/stl_uninitialized.h (__uninitialized_default_1<true>): Construct the first value at *__first instead of on the stack. (__uninitialized_default_n_1<true>): Likewise. Improve comments on several of the non-standard algorithms. * testsuite/20_util/specialized_algorithms/uninitialized_default/94540.cc: New test. * testsuite/20_util/specialized_algorithms/uninitialized_default_n/94540.cc: New test. * testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94540.cc: New test. * testsuite/20_util/specialized_algorithms/uninitialized_value_construct_n/94540.cc: New test. * testsuite/23_containers/vector/cons/94540.cc: New test. (cherry picked from commit 632183ddcc8f3aead8b4fc63c4ab59a42ef9ad00)
2023-06-23libstdc++: Check for overflow in regex back-reference [PR106607]Jonathan Wakely
Currently we fail to notice integer overflow when parsing a back-reference expression, or when converting the parsed result from long to int. This changes the result to be int, so no conversion is needed, and uses the overflow-checking built-ins to detect an out-of-range back-reference. libstdc++-v3/ChangeLog: PR libstdc++/106607 * include/bits/regex_compiler.tcc (_Compiler::_M_cur_int_value): Use built-ins to check for integer overflow in back-reference number. * testsuite/28_regex/basic_regex/106607.cc: New test. (cherry picked from commit 1b09eea33f2bf9d1eae73b25cc25efb05ea1dc3f)
2023-06-23libstdc++: Add noexcept to functions in <regex>Jonathan Wakely
Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/bits/regex.h (basic_regex, swap): Add noexcept to non-throwing functions. * include/bits/regex_automaton.h (_State_base, _State) (_NFA_base): Likewise. * include/bits/regex_compiler.h (_Compiler): Likewise. * include/bits/regex_error.h (regex_error::code()): Likewise. * include/bits/regex_scanner.h (_Scanner): Likewise. (cherry picked from commit df0dd04b78cfc0f723387b703978600caac93cbb)
2023-06-23libstdc++: Fix handling of invalid ranges in std::regex [PR102447]Jonathan Wakely
std::regex currently allows invalid bracket ranges such as [\w-a] which are only allowed by ECMAScript when in web browser compatibility mode. It should be an error, because the start of the range is a character class, not a single character. The current implementation of _Compiler::_M_expression_term does not provide a way to reject this, because we only remember a previous character, not whether we just processed a character class (or collating symbol etc.) This patch replaces the pair<bool, CharT> used to emulate optional<CharT> with a custom class closer to pair<tribool,CharT>. That allows us to track three states, so that we can tell when we've just seen a character class. With this additional state the code in _M_expression_term for processing the _S_token_bracket_dash can be improved to correctly reject the [\w-a] case, without regressing for valid cases such as [\w-] and [----]. libstdc++-v3/ChangeLog: PR libstdc++/102447 * include/bits/regex_compiler.h (_Compiler::_BracketState): New class. (_Compiler::_BrackeyMatcher): New alias template. (_Compiler::_M_expression_term): Change pair<bool, CharT> parameter to _BracketState. Process first character for ECMAScript syntax as well as POSIX. * include/bits/regex_compiler.tcc (_Compiler::_M_insert_bracket_matcher): Pass _BracketState. (_Compiler::_M_expression_term): Use _BracketState to store state between calls. Improve handling of dashes in ranges. * testsuite/28_regex/algorithms/regex_match/cstring_bracket_01.cc: Add more tests for ranges containing dashes. Check invalid ranges with character class at the beginning. (cherry picked from commit 7ce3c230edf6e498e125c805a6dd313bf87dc439)
2023-06-23libstdc++: Check for invalid syntax_option_type values in <regex>Jonathan Wakely
The standard says that it is invalid for more than one grammar element to be set in a value of type regex_constants::syntax_option_type. This adds a check in the regex compiler andthrows an exception if an invalid value is used. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/bits/regex_compiler.h (_Compiler::_S_validate): New function. * include/bits/regex_compiler.tcc (_Compiler::_Compiler): Use _S_validate to check flags. * include/bits/regex_error.h (_S_grammar): New error code for internal use. * testsuite/28_regex/basic_regex/ctors/grammar.cc: New test. (cherry picked from commit 9ca4c42a3b756e54a92ff8e1ac6c396b680b7839)
2023-06-23libstdc++: Tweaks to <regex> to avoid warningsJonathan Wakely
Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/bits/regex_compiler.tcc: Add line break in empty while statement. * include/bits/regex_executor.tcc: Avoid unused parameter warning. (cherry picked from commit b5f276b8c76d892f7fed229153cfbadc13f4696e)
2023-06-23libstdc++: Fix std::regex_replace for strings with embedded null [PR103664]Jonathan Wakely
The overload of std::regex_replace that takes a std::basic_string as the fmt argument (for the replacement string) is implemented in terms of the one taking a const C*, which uses std::char_traits to find the length. That means it stops at a null character, even though the basic_string might have additional characters beyond that. Rather than duplicate the implementation of the const C* one for the std::basic_string case, this moves that implementation to a new __regex_replace function which takes a const C* and a length. Then both the std::basic_string and const C* overloads can call that (with the latter using char_traits to find the length to pass to the new function). libstdc++-v3/ChangeLog: PR libstdc++/103664 * include/bits/regex.h (__regex_replace): Declare. (regex_replace): Use it. * include/bits/regex.tcc (__regex_replace): Replace regex_replace definition with __regex_replace. * testsuite/28_regex/algorithms/regex_replace/char/103664.cc: New test. (cherry picked from commit ef5d671cd80a4afa4f74c3dfe2904c63f51fcfde)
2023-06-23libstdc++: std::basic_regex should treat '\0' as an ordinary char [PR84110]Jonathan Wakely
When the input sequence contains a _CharT(0) character, the strchr call in _Scanner<_CharT>::_M_scan_normal() will search for '\0' and so return a pointer to the terminating null at the end of the string. This makes the scanner think it's found a special character. Because it doesn't match any of the actual special characters, we fall off the end of the function (or assert in debug mode). We should check for a null character explicitly and either treat it as an ordinary character (for the ECMAScript grammar) or an error (for all others). I'm not 100% sure that's right, but it seems consistent with the POSIX RE rules where a '\0' means the end of the regex pattern or the end of the sequence being matched. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: PR libstdc++/84110 * include/bits/regex_error.h (regex_constants::_S_null): New error code for internal use. * include/bits/regex_scanner.tcc (_Scanner::_M_scan_normal()): Check for null character. * testsuite/28_regex/basic_regex/84110.cc: New test. (cherry picked from commit b701e1f8f6870c0f8cb4050674da489101dd05a5)
2023-06-23libstdc++: Fix build error in <bits/regex_error.h>Jonathan Wakely
libstdc++-v3/ChangeLog: * include/bits/regex_error.h (__throw_regex_error): Fix parameter declaration and use reserved attribute names. (cherry picked from commit 29216f56d002982f10c33056f4b3d7f07e164122)
2023-06-23libstdc++: include/bits/regex_error.h: Avoid warning with -fno-exceptions.Christophe Lyon
When building with -fno-exceptions, __GLIBCXX_THROW_OR_ABORT expands to abort(), causing warnings: unused parameter '__ecode' unused parameter '__what' This patch adds __attribute__((unused)) to avoid them. 2020-09-11 Torbjörn SVENSSON <torbjorn.svensson@st.com> Christophe Lyon <christophe.lyon@linaro.org> libstdc++-v3/ * include/bits/regex_error.h: Avoid warning with -fno-exceptions. (cherry picked from commit b32d2ea8c29203519fbd9c5e90b06941e7cd75f3)
2023-06-23Daily bump.GCC Administrator
2023-06-22Daily bump.GCC Administrator
2023-06-21Daily bump.GCC Administrator
2023-06-20rs6000: Guard __builtin_{un,}pack_vector_int128 with vsx [PR109932]Kewen Lin
As PR109932 shows, builtins __builtin_{un,}pack_vector_int128 should be guarded under vsx rather than power7, as their corresponding bif patterns have the conditions TARGET_VSX and VECTOR_MEM_ALTIVEC_OR_VSX_P (V1TImode). This patch is to ensure __builtin_{un,}pack_vector_int128 only available under vsx. PR target/109932 gcc/ChangeLog: * config/rs6000/rs6000-builtin.def (BU_VSX_MISC_2): New macro. ({un,}pack_vector_int128): Use BU_VSX_MISC_2 instead of BU_P7_MISC_2. gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr109932-1.c: New test. * gcc.target/powerpc/pr109932-2.c: New test. (cherry picked from commit db291447877aae67979ce3655fcc6fc877f57c6a)
2023-06-20Daily bump.GCC Administrator
2023-06-19rs6000: Don't use TFmode for 128 bits fp constant in toc [PR110011]Kewen Lin
As PR110011 shows, when encoding 128 bits fp constant into toc, we adopts REAL_VALUE_TO_TARGET_LONG_DOUBLE which is to find the first float mode with LONG_DOUBLE_TYPE_SIZE bits of precision, it would be TFmode here. But the 128 bits fp constant can be with mode IFmode or KFmode, which doesn't necessarily have the same underlying float format as the one of TFmode, like this PR exposes, with option -mabi=ibmlongdouble TFmode has ibm_extended_format while KFmode has ieee_quad_format, mixing up the formats (the encoding/decoding ways) would cause unexpected results. This patch is to make it use constant's own mode instead of TFmode for real_to_target call. PR target/110011 gcc/ChangeLog: * config/rs6000/rs6000.c (output_toc): Use the mode of the 128-bit floating constant itself for real_to_target call. gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr110011.c: New test. (cherry picked from commit 388809f2afde874180da0669c669e241037eeba0)
2023-06-19Daily bump.GCC Administrator
2023-06-18Daily bump.GCC Administrator
2023-06-17Daily bump.GCC Administrator
2023-06-16Daily bump.GCC Administrator
2023-06-15Daily bump.GCC Administrator
2023-06-14Daily bump.GCC Administrator
2023-06-13Daily bump.GCC Administrator
2023-06-12Daily bump.GCC Administrator
2023-06-11Daily bump.GCC Administrator
2023-06-10Daily bump.GCC Administrator