aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-04-16doc: Adjust mingw-w64 download linkGerald Pfeifer1-1/+1
gcc: * doc/install.texi (Specific): Adjust mingw-w64 download link.
2022-04-16Daily bump.GCC Administrator5-1/+87
2022-04-15compiler: revert `for package-scope "a = b; b = x" just set "a = x"`Ian Lance Taylor4-37/+16
Revert CL 245098. It caused incorrect initialization ordering. Adjust the runtime package to work even with the CL reverted. Original description of CL 245098: This avoids requiring an init function to initialize the variable. This can only be done if x is a static initializer. The go1.15rc1 runtime package relies on this optimization. The package has a variable "var maxSearchAddr = maxOffAddr". The maxSearchAddr variable is used by code that runs before package initialization is complete. For golang/go#51913 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/395994
2022-04-15libstdc++: Avoid double-deref of __first in ranges::minmax [PR104858]Patrick Palka2-1/+31
PR libstdc++/104858 libstdc++-v3/ChangeLog: * include/bits/ranges_algo.h (__minmax_fn): Avoid dereferencing __first twice at the start. * testsuite/25_algorithms/minmax/constrained.cc (test06): New test.
2022-04-15rs6000: Move more g++.dg powerpc tests to g++.targetPaul A. Clarke7-3/+3
Also adjust DejaGnu directives, as specifically requiring "powerpc*-*-*" is no longer required. 2022-04-15 Paul A. Clarke <pc@us.ibm.com> gcc/testsuite * g++.dg/debug/dwarf2/const2.C: Move to g++.target/powerpc. * g++.dg/other/darwin-minversion-1.C: Likewise. * g++.dg/eh/ppc64-sighandle-cr.C: Likewise. * g++.dg/eh/simd-5.C: Likewise. * g++.dg/eh/simd-4.C: Move to g++.target/powerpc, adjust dg directives. * g++.dg/eh/uncaught3.C: Likewise. * g++.dg/other/spu2vmx-1.C: Likewise.
2022-04-15c++: wrong error with variadic concept [PR105268]Marek Polacek2-1/+30
Here we issue a wrong error for the template<typename T = S<C_many<int>>> void g(); line in the testcase. I surmise that's because we mistakenly parse C_many<int> as a placeholder-type-specifier, and things go wrong from there. We are in a default argument so we should reject parsing C_many<int> as a placeholder-type-specifier, which would mean creating a new parameter. We want C_many<int> to be a concept-id instead. It's interesting to see why the same problem didn't occur for C_one<int>. In that case, cp_parser_placeholder_type_specifier -> finish_type_constraints -> build_type_constraint -> build_concept_check -> build_standard_check -> coerce_template_parms fails the parse here: 8916 nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0; 8917 if ((nargs - variadic_args_p > nparms && !variadic_p) 8918 || (nargs < nparms - variadic_p 8919 && require_all_args 8920 && !variadic_args_p 8921 && (!use_default_args 8922 || (TREE_VEC_ELT (parms, nargs) != error_mark_node 8923 && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs)))))) 8924 { 8925 bad_nargs: ... 8943 return error_mark_node; because nargs is 2 (the targs are <WILDCARD_DECL, int>) while nparms is 1 (for the one 'typename' in the tparam list of C_one). But for C_many<int> variadic_p is true so we don't return error_mark_node but <type_argument_pack>. This patch does not issue any error for the !tentative case because I didn't figure out how to trigger that. So it adds an assert instead. PR c++/105268 gcc/cp/ChangeLog: * parser.cc (cp_parser_placeholder_type_specifier): Return error_mark_node when trying to build up a constrained parameter in a default argument. gcc/testsuite/ChangeLog: * g++.dg/concepts/variadic6.C: New test.
2022-04-15libstdc++: Optimize integer std::from_charsPatrick Palka2-163/+102
This applies the following optimizations to the integer std::from_chars implementation: 1. Use a lookup table for converting an alphanumeric digit to its base-36 value instead of using a range test (for 0-9) and switch (for a-z and A-Z). The table is constructed using a C++14 constexpr function which doesn't assume a particular character encoding or __CHAR_BIT__ value. This new conversion function __from_chars_alnum_to_val is templated on whether we care only about the decimal digits, in which case we can perform the conversion with a single subtraction since the digit characters are guaranteed to be contiguous (unlike the letters). 2. Generalize __from_chars_binary to handle all power-of-two bases. This function (now named __from_chars_pow2_base) is also templated on whether we care only about the decimal digits for the benefit of faster digit conversion for base 2, 4 and 8. 3. In __from_chars_digit, use static_cast<unsigned char>(__c - '0') < __base instead of '0' <= __c && __c <= ('0' + (__base - 1)). as the digit recognition test (exhaustively verified that the two tests are equivalent). 4. In __from_chars_alnum, use a nested loop to consume the rest of the digits in the overflow case (mirroring __from_chars_digit) so that the main loop doesn't have to maintain the overflow flag __valid. At this point, __from_chars_digit is nearly identical to __from_chars_alnum, so this patch merges the two functions by removing the former and templatizing the latter according to whether we care only about the decimal digits. Finally, 5. In __from_chars_alnum, maintain a lower bound on the number of unused bits in the result and use it to omit the overflow check when it's safe to do so. In passing, this patch replaces the non-portable function ascii_to_hexit used by __floating_from_chars_hex with the new conversion function. Some runtime measurements for a simple 15-line benchmark that roundtrips printing/parsing 200 million integers via std::to/from_chars (average of 5 runs): Base Before After (seconds, lower is better) 2 9.37 9.37 3 15.79 12.13 8 4.15 3.67 10 4.90 3.86 11 6.84 5.03 16 4.14 2.93 32 3.85 2.39 36 5.22 3.26 libstdc++-v3/ChangeLog: * include/std/charconv (__from_chars_alnum_to_val_table): Define. (__from_chars_alnum_to_val): Define. (__from_chars_binary): Rename to ... (__from_chars_pow2_base): ... this. Generalize to handle any power-of-two base using __from_chars_alnum_to_val. (__from_chars_digit): Optimize digit recognition to a single test instead of two tests. Use [[__unlikely___]] attribute. (__from_chars_alpha_to_num): Remove. (__from_chars_alnum): Use __from_chars_alnum_to_val. Use a nested loop for the overflow case. Maintain a lower bound on the number of available bits in the result and use it to omit the overflow check. (from_chars): Adjust appropriately. * src/c++17/floating_from_chars.cc (ascii_to_hexit): Remove. (__floating_from_chars_hex): Use __from_chars_alnum_to_val to recognize a hex digit instead.
2022-04-15i386: Correct target attribute for crc32 intrinsicsHongyu Wang3-19/+42
Complile _mm_crc32_u8/16/32/64 intrinsics with -mcrc32 would meet target specific option mismatch. Correct target pragma to fix. gcc/ChangeLog: * config/i386/smmintrin.h: Correct target pragma from sse4.1 and sse4.2 to crc32 for crc32 intrinsics. gcc/testsuite/ChangeLog: * gcc.target/i386/crc32-6.c: Adjust dg-error message. * gcc.target/i386/crc32-7.c: New test.
2022-04-14c++: unsigned int32_t enum promotion [PR102804]Jason Merrill2-0/+11
There's been an extension for a long time to allow applying 'unsigned' to an int typedef, but that was confusing the integer promotion code. Fixed by forgetting about the typedef in that case. I'm going to make this an unconditional pedwarn in stage 1. PR c++/102804 gcc/cp/ChangeLog: * decl.cc (grokdeclarator): Drop typedef used with 'unsigned'. gcc/testsuite/ChangeLog: * g++.dg/ext/unsigned-typedef1.C: New test.
2022-04-14c++: using in diagnostics [PR102987]Jason Merrill2-0/+24
The expression pretty-printing code crashed on a location wrapper with no type, and didn't know what to do with a USING_DECL. PR c++/102987 gcc/cp/ChangeLog: * error.cc (dump_expr): Handle USING_DECL. [VIEW_CONVERT_EXPR]: Just look through location wrapper. gcc/testsuite/ChangeLog: * g++.dg/diagnostic/using1.C: New test.
2022-04-15Daily bump.GCC Administrator8-1/+216
2022-04-14Update gcc de.po, fr.po, sv.poJoseph Myers3-921/+621
* de.po, fr.po, sv.po: Update.
2022-04-14analyzer: fix escaping of pointer arithmetic [PR105264]David Malcolm4-6/+86
PR analyzer/105264 reports that the analyzer can fail to treat (PTR + IDX) and PTR[IDX] as referring to the same memory under some situations. There are various ways in which this can happen when IDX is a symbolic value, due to having several ways in which such memory regions can be referred to symbolically. I attempted to fix this by being smarter when folding svalues and regions, but this fix seems too fiddly to attempt in stage 4. Instead, this less ambitious patch fixes a false positive from -Wanalyzer-use-of-uninitialized-value by making the analyzer's escape analysis smarter, so that it treats *PTR as escaping when (PTR + OFFSET) is passed to an external function, and thus it treats *PTR as possibly-initialized (the "passing &PTR[IDX]" case was already working). gcc/analyzer/ChangeLog: PR analyzer/105264 * region-model-reachability.cc (reachable_regions::handle_parm): Use maybe_get_deref_base_region rather than just region_svalue, to handle pointer arithmetic also. * svalue.cc (svalue::maybe_get_deref_base_region): New. * svalue.h (svalue::maybe_get_deref_base_region): New decl. gcc/testsuite/ChangeLog: PR analyzer/105264 * gcc.dg/analyzer/torture/symbolic-10.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-04-14runtime: use regset indexes for PPC register valuesIan Lance Taylor2-16/+11
Using names depended on <asm/ptrace.h>, which glibc includes somewhere but musl did not. Change to just always use indexes. Based on patch by Sören Tempel. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/400214
2022-04-14c++: constexpr trivial -fno-elide-ctors [PR104646]Jason Merrill2-1/+91
The constexpr constructor checking code got confused by the expansion of a trivial copy constructor; we don't need to do that checking for defaulted ctors, anyway. PR c++/104646 gcc/cp/ChangeLog: * constexpr.cc (maybe_save_constexpr_fundef): Don't do extra checks for defaulted ctors. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/constexpr-fno-elide-ctors1.C: New test.
2022-04-14libgccjit: Fix a bootstrap break for some targets.Iain Sandoe1-2/+2
Some targets use 'long long unsigned int' for unsigned HW int, and this leads to a Werror=format= fail for two print cases in jit-playback.cc introduced in r12-8117-g30f7c83e9cfe (Add support for bitcasts [PR104071]) As discussed on IRC, casting to (long) seems entirely reasonable for the values (since they are type sizes). tested that this fixes bootstrap on x86_64-darwin19 and running check-jit. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/jit/ChangeLog: * jit-playback.cc (new_bitcast): Cast values returned by tree_to_uhwi to 'long' to match the print format.
2022-04-14c++: lambda and the current instantiation [PR82980]Jason Merrill2-1/+37
When a captured variable is type-dependent, we've expressed the type of the capture field and proxy with a decltype variant. But if the type is "the current instantiation", we need to be able to see that so that we can do lookup inside it just like we could with the captured variable itself. I also tried looking through lambda capture in cp_parser_postfix_dot_deref_expression, but this way seems cleaner. I plan to treat more types as deducible in stage 1. I considered also using this in do_auto_deduction, but think that would be wrong: [temp.dep.expr] says an id-expression is type-dependent if it is "associated by name lookup with a variable declared with a type that contains a placeholder type where the initializer is type-dependent". That doesn't clearly exclude deducing a dependent type from the initializer, but it seems like a barrier, and other implementations agree. PR c++/82980 gcc/cp/ChangeLog: * lambda.cc (type_deducible_expression_p): New. (lambda_capture_field_type): Check it. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/lambda/lambda-current-inst1.C: New test.
2022-04-14Refactor and update CTF testcases [PR105089]Indu Bhagat3-15/+46
This commit splits the ctf-array-2.c into ctf-array-5.c and ctf-variables.c with the following responsibilities: [1] ctf-array-2.c: Test CTF generation for unsized arrays. [2] ctf-array-5.c: Test CTF generation for unsized but initialized array. [3] ctf-variables-3.c: Test CTF generation for extern variable with defining decl. Earlier all three tests above were being done in ctf-array-2.c. The checks around [3] were very loose in the original version of ctf-array-2.c in that the testcase was only checking that the types are as expected. The compiler was emitting two CTF variable records as follows: Variables: _CTF_NEWSTR -> 5: const const char [0] (size 0x0) -> 4: const char [0] (size 0x0) _CTF_NEWSTR -> 8: const const char [8] (size 0x8) -> 7: const char [8] (size 0x8) This is incorrect behaviour as it creates ambiguity. The testcase ctf-variables-3.c now has added checks that only one CTF variable record is expected. 2022-04-14 Indu Bhagat <indu.bhagat@oracle.com> gcc/testsuite/ChangeLog: PR debug/105089 * gcc.dg/debug/ctf/ctf-array-2.c: Refactor testcase. Move some checks ... * gcc.dg/debug/ctf/ctf-array-5.c: ... to here. * gcc.dg/debug/ctf/ctf-variables-3.c: ... and here. Add additional checks for one CTF variable and one CTF object info record.
2022-04-14CTF for extern variable fix [PR105089]Indu Bhagat4-12/+98
The CTF format cannot differentiate between a non-defining extern variable declaration vs. a defining variable declaration (unlike DWARF). So, the correct behaviour wrt the compiler generating CTF for such extern variables (i.e., when both the defining and non-defining decl are present in the same CU) is to simply emit the CTF variable correspoding to the defining declaration. To carry out the above, following changes are introduced via the patch: 1. The CTF container (ctfc.h) now keeps track of the non-defining declarations (by noting the DWARF attribute DW_AT_specification) in a new ctfc_ignore_vars hashtable. Such book-keeping is necessary because the CTF container should not rely on the order of DWARF DIEs presented to it at generation time. 2. At the time of ctf_add_variable (), the DW_AT_specification DIE if present is added in the ctfc_ignore_vars hashtable. The CTF variable generation for the defining declaration continues as normal. 3. If the ctf_add_variable () is asked to generate CTF variable for a DIE present in the ctfc_ignore_vars, it skips generating CTF for it. 4. Recall that CTF variables are pre-processed before emission. Till now, the only pre-processing that was being done was to sort them in order of their names. Now an additional step is added: If the CTF variable which corresponds to the non-defining declaration is indeed present in the ctfc_vars hashtable (because the corresponding DWARF DIE was encountered first by the CTF generation engine), skip that CTF variable from output. An important side effect of such a workflow above is that CTF for the C type of the non-defining decl will remain in the CTF dictionary (and will be emitted in the output section as well). This type can be pruned by the link-time de-duplicator as usual, if deemed unused. 2022-04-14 Indu Bhagat <indu.bhagat@oracle.com> gcc/ChangeLog: PR debug/105089 * ctfc.cc (ctf_dvd_ignore_insert): New function. (ctf_dvd_ignore_lookup): Likewise. (ctf_add_variable): Keep track of non-defining decl DIEs. (new_ctf_container): Initialize the new hash-table. (ctfc_delete_container): Empty hash-table. * ctfc.h (struct ctf_container): Add new hash-table. (ctf_dvd_ignore_lookup): New declaration. (ctf_add_variable): Add additional argument. * ctfout.cc (ctf_dvd_preprocess_cb): Skip adding CTF variable record for non-defining decl for which a defining decl exists in the same TU. (ctf_preprocess): Defer updating the number of global objts until here. (output_ctf_header): Use ctfc_vars_list_count as some CTF variables may not make it to the final output. (output_ctf_vars): Likewise. * dwarf2ctf.cc (gen_ctf_variable): Skip generating CTF variable if this is known to be a non-defining decl DIE.
2022-04-14ctfc: get rid of the static variable in ctf_list_add_ctf_vars ()Indu Bhagat2-3/+3
2022-04-14 Indu Bhagat <indu.bhagat@oracle.com> gcc/ChangeLog: * ctfc.h (struct ctf_container): Introduce a new member. * ctfout.cc (ctf_list_add_ctf_vars): Use it instead of static variable.
2022-04-14libstdc++: Default to mutex-based atomics on RISC-VPalmer Dabbelt2-2/+8
The RISC-V port requires libatomic to be linked in order to resolve various atomic functions, which results in builds that have "--with-libstdcxx-lock-policy=auto" defaulting to mutex-based locks. Changing this to direct atomics breaks the ABI, this forces the auto detection mutex-based atomics on RISC-V in order to avoid a silent ABI break for users. See Bug 84568 for more discussion. In the long run there may be a way to get the higher-performance atomics without an ABI flag day, but that's going to be a much more complicated operation. We don't even have support for the inline atomics yet, but given that some folks have been discussing hacks to make these libatomic routines appear implicitly it seems prudent to just turn off the automatic detection for RISC-V. libstdc++-v3/ChangeLog: * acinclude.m4 (GLIBCXX_ENABLE_LOCK_POLICY): Force auto to mutex for RISC-V. * configure: Regenerate.
2022-04-14libstdc++: Fix incorrect IS number in doc commentJonathan Wakely1-1/+1
libstdc++-v3/ChangeLog: * doc/xml/manual/intro.xml: Fix comment.
2022-04-14analyzer: fix ICE comparing VECTOR_CSTs [PR105252]David Malcolm2-3/+30
gcc/analyzer/ChangeLog: PR analyzer/105252 * svalue.cc (cmp_cst): When comparing VECTOR_CSTs, compare the types of the encoded elements before calling cmp_cst on them. gcc/testsuite/ChangeLog: PR analyzer/105252 * gcc.dg/analyzer/pr105252.c: New test. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-04-14simplify-rtx: Don't assume shift count has the same mode as the shift [PR105247]Jakub Jelinek2-1/+33
The following testcase ICEs on ia64. It is UB at runtime, but we shouldn't ICE on it... The problem is that on ia64, the shift count (last operand of ASHIFT etc.) is promoted to DImode (using zero-extension), while most other targets use much narrower modes (say QImode). If we try to simplify a shift and the shift count is CONST_INT or other VOIDmode integer constant which isn't properly sign extended for the first operand's mode (in the testcase the shift count is 0xfffffff8U and it is a SImode shift), then we ICE during wide_int wop1 = pop1; in the first hunk, INTVAL == 0xfffffff8U is not valid for SImode. I think in theory we could run into this even on other targets, say if they use SImode or HImode shift counts for e.g. QImode shifts. I hope word size is the upper bound of what a reasonable target should use, using e.g. multiple registers for the shift count is insane, so the following patch if op1 has VOIDmode and int_mode is narrower than word uses word_mode for extraction of the value. 2022-04-14 Jakub Jelinek <jakub@redhat.com> PR target/105247 * simplify-rtx.cc (simplify_const_binary_operation): For shifts or rotates by VOIDmode constant integer shift count use word_mode for the operand if int_mode is narrower than word. * gcc.c-torture/compile/pr105247.c: New test.
2022-04-14testsuite/s390: Silence warning in pr80725.cRobin Dapp1-1/+1
This test case checks that we do not ICE but FAILs because of -Wint-to-pointer-cast. Silence this warning. gcc/testsuite/ChangeLog: * gcc.target/s390/pr80725.c: Add -Wno-int-to-pointer-cast.
2022-04-14s390: Add scheduler description for z16.Robin Dapp4-6/+2592
This patch adds the scheduler description for the z16 machine. gcc/ChangeLog: * config/s390/s390.cc (s390_get_sched_attrmask): Add z16. (s390_get_unit_mask): Likewise. (s390_is_fpd): Likewise. (s390_is_fxd): Likewise. * config/s390/s390.h (s390_tune_attr): Set max tune level to z16. * config/s390/s390.md (z900,z990,z9_109,z9_ec,z10,z196,zEC12,z13,z14,z15): Add z16. (z900,z990,z9_109,z9_ec,z10,z196,zEC12,z13,z14,z15,z16): Likewise. * config/s390/3931.md: New file.
2022-04-14libstdc++: Add new headers to <bits/stdc++.h> PCHJonathan Wakely1-0/+4
libstdc++-v3/ChangeLog: * include/precompiled/stdc++.h: Include <stacktrace> and <stdatomic.h> for C++23.
2022-04-14libstdc++: Fix missing and incorrect feature test macros [PR105269]Jonathan Wakely12-23/+54
libstdc++-v3/ChangeLog: PR libstdc++/105269 * include/bits/stl_vector.h (__cpp_lib_constexpr_vector): Define. * include/c_compatibility/stdatomic.h (__cpp_lib_stdatomic_h): Define. * include/std/optional (__cpp_lib_optional): Define new value for C++23. (__cpp_lib_monadic_optional): Remove. * include/std/version (__cpp_lib_constexpr_vector): Define. (__cpp_lib_stdatomic_h): Define. (__cpp_lib_optional): Define new value for C++23. (__cpp_lib_monadic_optional): Remove. * testsuite/20_util/optional/monadic/and_then.cc: Adjust. * testsuite/20_util/optional/requirements.cc: Adjust for C++23. * testsuite/20_util/optional/version.cc: Likewise. * testsuite/23_containers/vector/cons/constexpr.cc: Check feature test macro. * testsuite/29_atomics/headers/stdatomic.h/c_compat.cc: Likewise. * testsuite/20_util/optional/monadic/version.cc: Removed. * testsuite/23_containers/vector/requirements/version.cc: New test. * testsuite/29_atomics/headers/stdatomic.h/version.cc: New test.
2022-04-13c++: alignment of local typedef in template [PR65211]Jason Merrill2-0/+22
Because common_handle_aligned_attribute only applies the alignment to the TREE_TYPE of a typedef, not the DECL_ORIGINAL_TYPE, we need to copy it explicitly in tsubst. PR c++/65211 gcc/cp/ChangeLog: * pt.cc (tsubst_decl) [TYPE_DECL]: Copy TYPE_ALIGN. gcc/testsuite/ChangeLog: * g++.target/i386/vec-tmpl1.C: New test.
2022-04-13c++: local fn and generic lambda [PR97219]Jason Merrill5-4/+42
When instantiating the op() for a generic lambda, we can no longer do name lookup inside function scopes enclosing the lambda, so we need to remember the lookup result from processing the definition of the lambda. So the code in finish_call_expr to throw away the lookup result and instead look it up again at instantiation time needs to be adjusted. The approach I take is to only discard the result if the local extern comes from dependent scope; once the enclosing function template is instantiated and we're regenerating the lambda, then we can remember the result of lookup. We also need any default arguments to be instantiated at that point. PR c++/97219 gcc/cp/ChangeLog: * name-lookup.cc (dependent_local_decl_p): New. * cp-tree.h (dependent_local_decl_p): Declare. * semantics.cc (finish_call_expr): Use it. * pt.cc (tsubst_arg_types): Also substitute default args for local externs. gcc/testsuite/ChangeLog: * g++.dg/cpp1y/lambda-generic-local-fn1.C: New test.
2022-04-13c++: template conversion op [PR101698]Jason Merrill2-1/+36
Asking for conversion to a dependent type also makes a BASELINK dependent. PR c++/101698 gcc/cp/ChangeLog: * pt.cc (tsubst_baselink): Also check dependent optype. gcc/testsuite/ChangeLog: * g++.dg/template/conv19.C: New test.
2022-04-13c++: NRV and ref-extended temps [PR101442]Jason Merrill4-3/+38
This issue goes back to r83221, where the cleanup for extended ref temps changed from being unconditional to being tied to the declaration they formed part of the initializer for. The named return value optimization changes the cleanup for the NRV variable to only run on the EH path; we don't want that change to affect temporary cleanups. The perform_member_init change isn't necessary (there 'decl' is a COMPONENT_REF), it's just for consistency. PR c++/101442 gcc/cp/ChangeLog: * decl.cc (cp_finish_decl): Don't pass decl to push_cleanup. * init.cc (perform_member_init): Likewise. * semantics.cc (push_cleanup): Adjust comment. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/initlist-nrv1.C: New test.
2022-04-13c++: add test [PR105265]Jason Merrill1-0/+39
This was fixed by r12-1165, but good to have a test that doesn't need -fno-elide-constructors. PR c++/105265 PR c++/100838 gcc/testsuite/ChangeLog: * g++.dg/cpp0x/initlist-new6.C: New test.
2022-04-14Daily bump.GCC Administrator8-1/+178
2022-04-13go.test: update issue10441.go to current upstream versionIan Lance Taylor1-1/+1
This test only needs to be compiled, not linked.
2022-04-13aarch64: Make sure the UF divides the VF [PR105254]Richard Sandiford2-4/+34
In this PR, we were trying to set the unroll factor to a value higher than the minimum VF (or more specifically, to a value that doesn't divide the VF). I guess there are two approaches to this: let the target pick any value it likes and make target-independent code pare it back to something that makes sense, or require targets to supply sensible values from the outset. This patch goes for the latter approach. gcc/ PR tree-optimization/105254 * config/aarch64/aarch64.cc (aarch64_vector_costs::determine_suggested_unroll_factor): Take a loop_vec_info as argument. Restrict the unroll factor to values that divide the VF. (aarch64_vector_costs::finish_cost): Update call accordingly. gcc/testsuite/ PR tree-optimization/105254 * g++.dg/vect/pr105254.cc: New test.
2022-04-13OpenMP/Fortran: Fix EXIT in loop diagnostic [PR105242]Tobias Burnus2-71/+769
gcc/fortran/ChangeLog: PR fortran/105242 * match.cc (match_exit_cycle): Handle missing OMP LOOP, DO and SIMD directives in the EXIT/CYCLE diagnostic. gcc/testsuite/ChangeLog: PR fortran/105242 * gfortran.dg/gomp/loop-exit.f90: New test.
2022-04-13c++: empty base constexpr -fno-elide-ctors [PR105245]Jason Merrill2-0/+7
The patch for 100111 extended our handling of empty base elision to the case where the derived class has no other fields, but we still need to make sure that there's some initializer for the derived object. PR c++/105245 PR c++/100111 gcc/cp/ChangeLog: * constexpr.cc (cxx_eval_store_expression): Build a CONSTRUCTOR as needed in empty base handling. gcc/testsuite/ChangeLog: * g++.dg/cpp1y/constexpr-empty2.C: Add -fno-elide-constructors.
2022-04-13d: Merge upstream dmd 4d1bfcf14, druntime 9ba9a6ae, phobos c0cc5e917.Iain Buclaw93-670/+1787
D front-end changes: - Import dmd v2.099.1. - Added `@mustuse' attribute, implmenting DIP 1038. - Added `.tupleof` property for static arrays D runtime changes: - Import druntime v2.099.1. Phobos changes: - Import phobos v2.099.1. - Zlib bindings have been updated to 1.2.12. gcc/d/ChangeLog: * Make-lang.in (D_FRONTEND_OBJS): Add d/common-bitfields.o, d/mustuse.o. * d-ctfloat.cc (CTFloat::isIdentical): Don't treat NaN values as identical. * dmd/MERGE: Merge upstream dmd 4d1bfcf14. * expr.cc (ExprVisitor::visit (VoidInitExp *)): New. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime 9ba9a6ae. * src/MERGE: Merge upstream phobos c0cc5e917.
2022-04-13tree-optimization/105263 - reassoc and DFPRichard Biener2-1/+18
reassoc has certain tricks which in the end depend on the ability to undo them. For DFP creating a -1. constant is easy but re-identifying is appearantly not - real_minus_onep rejects those outright for DFP. So we have to disable (at least) this one trick. 2022-04-13 Richard Biener <rguenther@suse.de> PR tree-optimization/105263 * tree-ssa-reassoc.cc (try_special_add_to_ops): Do not consume negates in multiplication chains with DFP. * gcc.dg/pr105263.c: New testcase.
2022-04-13tree.cc: Use useless_type_conversion_p in ↵Jakub Jelinek2-6/+33
tree_builtin_call_types_compatible_p while in gimple form [PR105253] tree_builtin_call_types_compatible_p uses TYPE_MAIN_VARIANT comparisons or tree_nop_conversion_p to ensure a builtin has correct GENERIC arguments. Unfortunately this regressed when get_call_combined_fn is called during GIMPLE optimizations. E.g. when number_of_iterations_popcount is called, it doesn't ensure TYPE_MAIN_VARIABLE compatible argument type, it picks __builtin_popcount{,l,ll} based just on types' precision and doesn't fold_convert the arg to the right type. We are in GIMPLE, such conversions are useless... So, either we'd need to fix number_of_iterations_popcount to add casts and inspect anything else that creates CALL_EXPRs late, or we can in tree_builtin_call_types_compatible_p just use the GIMPLE type comparisons (useless_type_conversion_p) when we are in GIMPLE form and the TYPE_MAIN_VARIANT comparison or tree_nop_conversion_p test otherwise. I think especially this late in stage4 the latter seems safer to me. 2022-04-13 Jakub Jelinek <jakub@redhat.com> PR middle-end/105253 * tree.cc (tree_builtin_call_types_compatible_p): If PROP_gimple, use useless_type_conversion_p checks instead of TYPE_MAIN_VARIANT comparisons or tree_nop_conversion_p checks. * gcc.target/i386/pr105253.c: New test.
2022-04-13c++: Treat alignas align_expr and aligned attribute's operand as manifestly ↵Jakub Jelinek2-1/+27
constant evaluation [PR105233] The following testcase fails, because we only constant evaluate the alignas argument as non-manifestly constant-evaluated and as __builtin_is_constant_evaluated appears, we make it non-constant (the reason is that we often try to evaluate some expression without manifestly_const_eval perhaps even multiple times before actually evaluating it with manifestly_const_eval (e.g. when folding for warnings and in many other places), and we don't want __builtin_is_constant_evaluated to evaluate to false in those cases, because we could get a different result from when we actually evaluate it with manifestly_const_eval set). Now, for alignas the standard seems to be clear, it says the argument is constant-expression, which means we should manifestly-constant-eval it. Attributes are a fuzzy area, they are extensions and various attributes take e.g. identifiers, or string literals etc. as arguments. Either we can just treat alignas as manifestly-const-eval, for that we'd need some way how to differentiate between alignas and gnu::aligned or aligned attribute. Another possibility is what the patch below implements, treat both alignas and gnu::aligned and aligned attribute's argument as manifestly-const-eval and not do that for other attributes. Another is to go through all attributes and figure out for which such treatment is useful (e.g. those that expect INTEGER_CST as argument), and either add a new column in the attribute table or have another table in the C++ FE to find out which attribute needs that. Another is do that for all the attribute arguments that are EXPR_P and see what breaks (bet that it could be quite risky this late in GCC 12 cycle and especially for backporting). 2022-04-13 Jakub Jelinek <jakub@redhat.com> PR c++/105233 * decl2.cc (cp_check_const_attributes): For aligned attribute pass manifestly_const_eval=true to fold_non_dependent_expr. * g++.dg/cpp2a/is-constant-evaluated13.C: New test.
2022-04-13testsuite: Increase auto-inlining param in gcc.dg/ipa/remref-7.c (PR 105183)Martin Jambor1-1/+1
A scan dump of testsuite gcc.dg/ipa/remref-7.c fails on a number of platforms. I investigated only i?86-*-* with -mno-sse but assume the issue is the same on all of the affected platform. Because function bar is not inlined there even though it is only called once, the process that is being tested is simply not triggered. This can be "fixed" by increasing parameter max-inline-insns-auto to something high, I randomly picked 100. I have only manually tested the change but hopefully that is enough. gcc/testsuite/ChangeLog: 2022-04-08 Martin Jambor <mjambor@suse.cz> PR testsuite/105183 * gcc.dg/ipa/remref-7.c: Add --param max-inline-insns-auto=100 to options.
2022-04-13c++: ambiguous call not diagnosed after DR2352 [PR97296]Marek Polacek3-3/+24
DR 2352 changed the definitions of reference-related (so that it uses "similar type" instead of "same type") and of reference-compatible (use a standard conversion sequence). That means that reference-related is now more broad, which means that we will be binding more things directly. The original patch for DR 2352 caused some problems, which were fixed in r276251 by creating a "fake" ck_qual in direct_reference_binding, so that in void f(int *); // #1 void f(const int * const &); // #2 int *x; int main() { f(x); // call #1 } we call #1. The extra ck_qual in #2 causes compare_ics to select #1, which is a better match for "int *" because then we don't have to do a qualification conversion. Let's turn to the problem in this PR. We have void f(const int * const &); // #1 void f(const int *); // #2 int *x; int main() { f(x); } We arrive in compare_ics to decide which one is better. The ICS for #1 looks like ck_ref_bind <- ck_qual <- ck_identity const int *const & const int *const int * and the ICS for #2 is ck_qual <- ck_rvalue <- ck_identity const int * int * int * We strip the reference and then comp_cv_qual_signature when comparing two ck_quals sees that "const int *" is a proper subset of "const int *const" and we return -1. But that's wrong; presumably the top-level "const" should be ignored and the call should be ambiguous. This patch adjust the type of the "fake" ck_qual so that this problem doesn't arise. PR c++/97296 gcc/cp/ChangeLog: * call.cc (direct_reference_binding): strip_top_quals when creating a ck_qual. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/ref-bind4.C: Add dg-error. * g++.dg/cpp0x/ref-bind8.C: New test.
2022-04-13middle-end/105259 - adjust gcc.target/i386/auto-init-4.cRichard Biener1-2/+3
This adjusts the FAILing testcase to only check for the pieces that work. The bug tracks improving pattern-init for long double. 2022-04-13 Richard Biener <rguenther@suse.de> PR middle-end/105259 * gcc.target/i386/auto-init-4.c: Adjust.
2022-04-13i386: Fix infinite loop under -mrelax-cmpxchg-loop [PR 103069]Hongyu Wang1-0/+1
For -mrelax-cmpxchg-loop which relaxes atomic_fetch_<logic> loops, there is a missing set to %eax when compare fails, which would result in infinite loop in some benchmark. Add set to %eax to avoid it. gcc/ChangeLog: PR target/103069 * config/i386/i386-expand.cc (ix86_expand_cmpxchg_loop): Add missing set to target_val at pause label.
2022-04-13attribs: Restrict decl_attributes DECL_FUNCTION_SPECIFIC_TARGET changes to ↵Jakub Jelinek2-9/+28
targets that care about target attributes/pragmas [PR105234] The following code is rejected e.g. on mips64el-linux (but I think many other targets which don't support target attribute or pragma). The problem is that the change to decl_attributes below is done unconditionally and with just #pragma GCC push_options/pop_options pair we have target_option_default_node NULL, but after popping options target_option_current_node becomes non-NULL and this decl_attribute spot fills in DECL_FUNCTION_SPECIFIC_TARGET of a subset of a functions. Those appearing before push_options/pop_options will have it NULL and as target_option_default_node is also NULL on those targets, the default can_inline_p will refuse to inline any functions defined with NULL DECL_FUNCTION_SPECIFIC_TARGET into any function with non-NULL DECL_FUNCTION_SPECIFIC_TARGET (even when nothing in the options really changed). The following patch restricts that snippet to targets that care (initialize target_option_default_node to non-NULL to the command line options early) which include all targets that actually implement target attribute and/or pragma. 2022-04-13 Jakub Jelinek <jakub@redhat.com> PR target/105234 * attribs.cc (decl_attributes): Don't set DECL_FUNCTION_SPECIFIC_TARGET if target_option_default_node is NULL. * gcc.c-torture/compile/pr105234.c: New test.
2022-04-13tree-optimization/105250 - adjust fold_convertible_p PR105140 fixRichard Biener2-4/+32
The following reverts the original PR105140 fix and goes for instead applying the additional fold_convert constraint for VECTOR_TYPE conversions also to fold_convertible_p. I did not try sanitizing all of this at this point. 2022-04-13 Richard Biener <rguenther@suse.de> PR tree-optimization/105250 * fold-const.cc (fold_convertible_p): Revert r12-7979-geaaf77dd85c333, instead check for size equality of the vector types involved. * gcc.dg/pr105250.c: New testcase.
2022-04-13Revert "tree-optimization/104912 - ensure cost model is checked first"Richard Biener1-57/+3
This reverts commit ac8340ee4d1e65f3fd41c547b16895875f4aefa7.
2022-04-13tree-optimization/104912 - ensure cost model is checked firstRichard Biener1-3/+57
The following makes sure that when we build the versioning condition for vectorization including the cost model check, we check for the cost model and branch over other versioning checks. That is what the cost modeling assumes, since the cost model check is the only one accounted for in the scalar outside cost. Currently we emit all checks as straight-line code combined with bitwise ops which can result in surprising ordering of checks in the final assembly. Since loop_version accepts only a single versioning condition the splitting is done after the fact. The result is a 1.5% speedup of 416.gamess on x86_64 when compiling with -Ofast and tuning for generic or skylake. That's not enough to recover from the slowdown when vectorizing but it now cuts off the expensive alias versioning test. 2022-03-21 Richard Biener <rguenther@suse.de> PR tree-optimization/104912 * tree-vect-loop-manip.cc (vect_loop_versioning): Split the cost model check to a separate BB to make sure it is checked first and not combined with other version checks.