aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-05-04Daily bump.GCC Administrator9-1/+156
2022-05-03Update gcc sv.poJoseph Myers1-422/+282
* sv.po: Update.
2022-05-03c++: make finish_non_static_data_member SFINAE enabled [PR105351]Patrick Palka4-13/+32
Here since finish_non_static_data_member isn't SFINAE enabled, we incorrectly emit an error when considering the first overload rather than silently discarding it: sfinae33.C: In substitution of ‘template<class T> A<T::value> f() [with T = B]’: sfinae33.C:11:7: required from here sfinae33.C:5:31: error: invalid use of non-static data member ‘B::value’ 5 | template<class T> A<T::value> f(); | ^ This patch makes the function SFINAE enabled in the usual way: give it a complain parameter, check it before emitting an error, and pass it through appropriately. PR c++/105351 gcc/cp/ChangeLog: * cp-tree.h (finish_non_static_data_member): Add defaulted complain parameter. * pt.cc (tsubst_copy_and_build): Pass complain to finish_non_static_data_member. * semantics.cc (finish_non_static_data_member): Respect complain parameter. (finish_qualified_id_expr): Pass complain to finish_non_static_data_member. gcc/testsuite/ChangeLog: * g++.dg/template/sfinae33.C: New test.
2022-05-03testsuite: libgcc function name for PRUDimitar Dimitrov3-3/+3
Update the match rules to accommodate the non-standard libgcc function names for PRU backend. gcc/testsuite/ChangeLog: * gcc.c-torture/compile/attr-complex-method-2.c: Accept both __divdc3 and __gnu_divdc3 as valid libgcc function names. * gcc.dg/complex-6.c: Ditto for __mulsc3. * gcc.dg/complex-7.c: Ditto for __muldc3. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-05-03testsuite: Skip cases for default_packed targetsDimitar Dimitrov2-2/+4
The memchr test cases expect padding to be present in structures. But this is not true for targets which pack by default. Skip these test cases in order to avoid static assert errors when checking field offsets. gcc/testsuite/ChangeLog: * gcc.dg/memchr.c: Skip for default_packed targets. * gcc.dg/memcmp-3.c: Ditto. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-05-03testsuite: Annotate Wattributes-8.c for default_packedDimitar Dimitrov1-2/+4
Place markers in test case to handle targets which pack structures by default. Validated on pru-none-elf. gcc/testsuite/ChangeLog: * gcc.dg/Wattributes-8.c: Add annotations for default_packed targets. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-05-03testsuite: Mark that PRU lowers DI alu ops by itselfDimitar Dimitrov1-1/+1
PRU target defines DI patterns for logical ALU operations. gcc/testsuite/ChangeLog: * gcc.dg/lower-subreg-1.c: Skip for PRU. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-05-03testsuite: Skip gcc.dg/Wno-frame-address.c for PRUDimitar Dimitrov1-1/+1
Access to arbitrary stack frames is not supported on PRU. gcc/testsuite/ChangeLog: * gcc.dg/Wno-frame-address.c: Skip for PRU target. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2022-05-03PR tree-optimization/102950: Improved EVRP for signed BIT_XOR_EXPR.Roger Sayle3-1/+102
This patch fixes PR tree-optimization/102950, which is a P2 regression, by providing better range bounds for BIT_XOR_EXPR, BIT_AND_EXPR and BIT_IOR_EXPR on signed integer types. In general terms, any binary bitwise operation on sign-extended or zero-extended integer types will produce results that are themselves sign-extended or zero-extended. More precisely, we can derive signed bounds from the number of leading redundant sign bit copies, from the equation: clrsb(X op Y) >= min (clrsb (X), clrsb(Y)) and from the property that for any (signed or unsigned) range [lb, ub] that clrsb([lb, ub]) >= min (clrsb(lb), clrsb(ub)). These can be used to show that [-1, 0] op [-1, 0] is [-1, 0] or that [-128, 127] op [-128, 127] is [-128, 127], even when tracking nonzero bits would result in VARYING (as every bit can be 0 or 1). This is equivalent to determining the minimum type precision in which the operation can be performed then sign extending the result. One additional refinement is to observe that X ^ Y can never be zero if the ranges of X and Y don't overlap, i.e. X can't be equal to Y. Previously, the expression "(int)(char)a ^ 233" in the PR was considered VARYING, but with the above changes now has the range [-256, -1][1, 255], which is sufficient to optimize away the call to foo. 2022-05-03 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog PR tree-optimization/102950 * range-op.cc (wi_optimize_signed_bitwise_op): New function to determine bounds of bitwise operations on signed types. (operator_bitwise_and::wi_fold): Call the above function. (operator_bitwise_or::wi_fold): Likewise. (operator_bitwise_xor::wi_fold): Likewise. Additionally, the result can't be zero if the operands can't be equal. gcc/testsuite/ChangeLog PR tree-optimization/102950 * gcc.dg/pr102950.c: New test case. * gcc.dg/tree-ssa/evrp10.c: New test case.
2022-05-03Objective-C, NeXT: Adjust symbol marking to match host tools.Iain Sandoe2-2/+6
Current host tools mark some additional symbols as 'no dead strip' and also expose one additional group to the linker. This does not affect older Darwin versions or x86_64, but omitting these changes results in link errors for aarch64. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/ChangeLog: * config/darwin.cc (darwin_label_is_anonymous_local_objc_name): Make protocol class methods linker-visible. gcc/objc/ChangeLog: * objc-next-runtime-abi-02.cc (next_runtime_abi_02_protocol_decl): Do not dead-strip the runtime meta-data symbols. (build_v2_classrefs_table): Likewise. (build_v2_protocol_list_address_table): Likewise.
2022-05-03[PR105324] libstdc++: testsuite: pr105324 requires FP from_charAlexandre Oliva1-0/+2
The floating-point overloads of from_char are only declared if _GLIBCXX_HAVE_USELOCALE is #defined as nonzero. That's exposed from charconv as __cpp_lib_to_chars >= 201611L, so guard the test body with that. for libstdc++-v3/ChangeLog PR c++/105324 * testsuite/20_util/from_chars/pr105324.cc: Guard test body with conditional for floating-point overloads of from_char.
2022-05-03i386: Optimize _mm_storeu_si16 w/o SSE4 [PR105079]Uros Bizjak3-1/+32
Optimize _mm_storeu_si16 to use MOVD from a SSE to an integer register instead of PEXTRW from a low word of the SSE register to an integer reg. Avoid the transformation when optimizing for size for targets without TARGET_INTER_UNIT_MOVES_FROM_VEC capability, where the transformation results in two moves via a memory location. 2022-05-03 Uroš Bizjak <ubizjak@gmail.com> gcc/ChangeLog: PR target/105079 * config/i386/sse.md (*vec_extract<mode>_0_mem): New pre-reload define_insn_and_split pattern. gcc/testsuite/ChangeLog: PR target/105079 * gcc.target/i386/pr105079.c: New test. * gcc.target/i386/pr95483-1.c (dg-options): Use -msse4.1.
2022-05-03dfp.m4: Add missing license headerChristophe Lyon1-0/+18
It seems the license header was omitted when dfp.m4 was originally contributed in 2010 (commit 3c39bca6bbb5, r0-102573 or svn r163815. This copies the license from libdecnumber/configure.ac since dfp.m4 was originally extracted from that file. 2022-04-29 Christophe Lyon <christophe.lyon@arm.com> config/ * dfp.m4: Add license header.
2022-05-03middle-end/105083 - check prerequesites in scev_initializeRichard Biener2-3/+4
2022-05-03 Richard Biener <rguenther@suse.de> PR middle-end/105083 * tree-scalar-evolution.cc (scev_initialize): Verify we have appropriate loop state. * tree-ssa-dce.cc (perform_tree_ssa_dce): Re-order SCEV and loop init and finalization.
2022-05-03middle-end/105461 - opts processing of -fvar-trackingRichard Biener2-2/+17
The flag_var_tracking reset in finish_options doesn't match the condition in process_options, in particular we fail to reset it when the option was specified on the command line. The following fixes this and also alters the debug info level guard to match the one in process_options. 2022-05-03 Richard Biener <rguenther@suse.de> PR middle-end/105461 * opts.cc (finish_options): Match the condition to disable flag_var_tracking to that of process_options. * gcc.dg/pr105461.c: New testcase.
2022-05-03Fixup OPTION_SET_P usage in finish_optionsRichard Biener1-4/+7
When some code was moved from process_options to finish_options, uses of OPTION_SET_P were not replaced with references to the opts_set option set. The following fixes this. 2022-05-03 Richard Biener <rguenther@suse.de> * opts.cc: #undef OPTIONS_SET_P. (finish_options): Use opts_set instead of OPTIONS_SET_P.
2022-05-03tree-optimization/105394 - vector lowering of comparesRichard Biener1-1/+4
The following fixes missing handling of non-integer mode but masked (SVE or MVE) compares in vector lowering by using the appropriate mask element width to extract the components and adjust the index. 2022-04-29 Richard Biener <rguenther@suse.de> PR tree-optimization/105394 * tree-vect-generic.cc (expand_vector_condition): Adjust comp_width for non-integer mode masks as well.
2022-05-02OpenMP, libgomp: Add new runtime routine omp_get_mapped_ptr.Marcel Vollweiler15-1/+661
This patch adds the OpenMP runtime routine "omp_get_mapped_ptr" which was introduced in OpenMP 5.1. gcc/ChangeLog: * omp-low.cc (omp_runtime_api_call): Added get_mapped_ptr to omp_runtime_apis array. libgomp/ChangeLog: * libgomp.map: Added omp_get_mapped_ptr. * libgomp.texi: Tagged omp_get_mapped_ptr as supported. * omp.h.in: Added omp_get_mapped_ptr. * omp_lib.f90.in: Added interface for omp_get_mapped_ptr. * omp_lib.h.in: Likewise. * target.c (omp_get_mapped_ptr): Added implementation of omp_get_mapped_ptr. * testsuite/libgomp.c-c++-common/get-mapped-ptr-1.c: New test. * testsuite/libgomp.c-c++-common/get-mapped-ptr-2.c: New test. * testsuite/libgomp.c-c++-common/get-mapped-ptr-3.c: New test. * testsuite/libgomp.c-c++-common/get-mapped-ptr-4.c: New test. * testsuite/libgomp.fortran/get-mapped-ptr-1.f90: New test. * testsuite/libgomp.fortran/get-mapped-ptr-2.f90: New test. * testsuite/libgomp.fortran/get-mapped-ptr-3.f90: New test. * testsuite/libgomp.fortran/get-mapped-ptr-4.f90: New test.
2022-05-02testsuite: vect: update unaligned messageAlexandre Oliva1-1/+1
gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c covers ppc variants that accept and reject misaligned accesses. The message that it expects for rejection was removed in the gcc-11 development cycle by commit r11-1969. The patch adjusted multiple tests to use the message introduced in r11-1945, but missed this one. for gcc/testsuite/ChangeLog * gcc.dg/vect/costmodel/ppc/costmodel-vect-31a.c: Update the expected message for the case in which unaligned accesses are not allowed.
2022-05-03Daily bump.GCC Administrator7-1/+132
2022-05-02c++: improve template-id locationJason Merrill2-13/+17
On PR102629 I noticed that we were giving the entire lambda as the location for this template-id. gcc/cp/ChangeLog: * pt.cc (tsubst_copy_and_build) [TEMPLATE_ID_EXPR]: Copy location. (do_auto_deduction): Use expr location. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-pack-init7.C: Check column number.
2022-05-02c++: also note name used in enclosing classJason Merrill5-18/+86
While looking at PR96645 I noticed that while we were diagnosing names changing meaning in the full class context, we weren't doing this for lookups in nested class bodies. Note that this breaks current range-v3; I've submitted a pull request to fix its violation of the rule. gcc/cp/ChangeLog: * class.cc (maybe_note_name_used_in_class): Note in all enclosing classes. Remember location of use. (note_name_declared_in_class): Adjust. gcc/testsuite/ChangeLog: * g++.dg/lookup/name-clash13.C: New test. * g++.dg/lookup/name-clash14.C: New test. * g++.dg/lookup/name-clash15.C: New test. * g++.dg/lookup/name-clash16.C: New test.
2022-05-02x86: Add missing .note.GNU-stack to assembly sourceH.J. Lu8-0/+8
Add .note.GNU-stack assembly source to avoid linker warning: ld: warning: /tmp/ccPZSZ7Z.o: missing .note.GNU-stack section implies executable stack ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker FAIL: gcc.target/i386/iamcu/test_3_element_struct_and_unions.c compilation, -O0 PR testsuite/105433 * gcc.target/i386/iamcu/asm-support.S: Add .note.GNU-stack. * gcc.target/x86_64/abi/asm-support.S: Likewise. * gcc.target/x86_64/abi/avx/asm-support.S: Likewise. * gcc.target/x86_64/abi/avx512f/asm-support.S: Likewise. * gcc.target/x86_64/abi/avx512fp16/asm-support.S: Likewise. * gcc.target/x86_64/abi/avx512fp16/m256h/asm-support.S: Likewise. * gcc.target/x86_64/abi/avx512fp16/m512h/asm-support.S: Likewise. * gcc.target/x86_64/abi/ms-sysv/do-test.S: Likewise.
2022-05-02Fortran: Add location info to OpenMP tree nodesSandra Loosemore1-0/+11
gcc/fortran/ * trans-openmp.cc (gfc_trans_omp_critical): Set location on OMP tree node. (gfc_trans_omp_do): Likewise. (gfc_trans_omp_masked): Likewise. (gfc_trans_omp_do_simd): Likewise. (gfc_trans_omp_scope): Likewise. (gfc_trans_omp_taskgroup): Likewise. (gfc_trans_omp_taskwait): Likewise. (gfc_trans_omp_distribute): Likewise. (gfc_trans_omp_taskloop): Likewise. (gfc_trans_omp_master_masked_taskloop): Likewise.
2022-05-02c++: uses_template_parms cleanupsMarek Polacek2-20/+15
gcc/cp/ChangeLog: * cp-tree.h (uses_template_parms): Adjust declaration. * pt.cc (uses_template_parms): Return bool. Use a RAII sentinel.
2022-05-02Assume a call is expensive when it mismatchesRichard Biener1-2/+5
This makes sure to not consider calls to builtin decls with mismatching arguments as inexpensive. 2022-04-13 Richard Biener <rguenther@suse.de> * tree-scalar-evolution.cc (expression_expensive_p): Never consider mismatched calls as cheap.
2022-05-02tree-optimization/104240 - SLP discovery with swapped comparisonsRichard Biener2-1/+32
The following extends SLP discovery to handle swapped operands in comparisons. 2022-05-02 Richard Biener <rguenther@suse.de> PR tree-optimization/104240 * tree-vect-slp.cc (op1_op0_map): New. (vect_get_operand_map): Handle compares. (vect_build_slp_tree_1): Support swapped operands for tcc_comparison. * gcc.dg/vect/bb-slp-pr104240.c: New testcase.
2022-05-02libstdc++: Don't use std::tolower in <charconv> [PR103911]Patrick Palka1-6/+5
As with std::isdigit in r12-6281-gc83ecfbe74a5cf, we shouldn't be using std::tolower in <charconv> either. PR libstdc++/103911 libstdc++-v3/ChangeLog: * src/c++17/floating_from_chars.cc (find_end_of_float): Accept two delimeters for the exponent part in the form of a possibly NULL string of length two. Don't use std::tolower. (pattern): Adjust calls to find_end_of_float accordingly.
2022-05-02libstdc++: case-sensitivity in hexfloat std::from_chars [PR105441]Patrick Palka2-1/+2
The hexfloat parser for binary32/64 added in r12-6645-gcc3bf3404e4b1c overlooked that the exponent part can also begin with an uppercase 'P'. PR libstdc++/105441 libstdc++-v3/ChangeLog: * src/c++17/floating_from_chars.cc (__floating_from_chars_hex): Also accept 'P' as the start of the exponent. * testsuite/20_util/from_chars/7.cc: Add corresponding testcase.
2022-05-02expand: Throw away non-external decls without varpool nodes [PR105415]Jakub Jelinek2-1/+28
The following testcase fails -fcompare-debug on aarch64-linux. The problem is that for the n variable we create a varpool node, then remove it again because the var isn't really used, but it keeps being referenced in debug stmts/insns with -g. Later during sched1 pass we ask whether the n var can be modified through some store to an anchored variable and with -g we create a new varpool node for it again just so that we can find its ultimate alias target. Even later on we create some cgraph node for the loop parallelization, but as there has been an extra varpool node creation in between, we get higher node->order with -g than without. The patch fixes that by throwing variables without varpool nodes away during expansion time, they are very unlikely to actually end up with useful debug info anyway. I've bootstrapped/regtested the following on x86_64-linux and i686-linux, then bootstrapped with the patch reverted, reapplied the patch and did make cc1plus in stage3. The debug section sizes are identical, .debug_info and .debug_loc is identical too, so I think we don't lose any debug info through it. So at least on cc1plus it makes no difference. 2022-05-02 Jakub Jelinek <jakub@redhat.com> PR debug/105415 * cfgexpand.cc (expand_debug_expr): Don't make_decl_rtl_for_debug if there is no symtab node for the VAR_DECL. * gcc.dg/pr105415.c: New test.
2022-05-02gcov: Fix first time gcov info dumpSebastian Huber1-1/+4
This patch fixes an issue introduced by commit ef9a53feae5701953da9161afef2aea0329ec8b2: gcc --coverage main.c && ./a.out libgcov profiling error:a-main.gcda:Error writing gcc/ChangeLog: * gcov-io.cc (gcov_rewrite): Clear the file error status.
2022-05-02tree-optimization/105437 - BB vect with extern defs of throwing stmtsRichard Biener2-0/+31
We have to watch out for vectorized stmt insert locations if the def from the last stmt alters control flow. We constrain region building so we know the def is outside of the current region and thus we can insert at the region start point. 2022-05-02 Richard Biener <rguenther@suse.de> PR tree-optimization/105437 * tree-vect-slp.cc (vect_schedule_slp_node): Handle the case where last_stmt alters control flow. * g++.dg/vect/pr105437.cc: New testcase.
2022-05-02Use CASE_CONVERT in a few more casesRichard Biener5-11/+5
This uses CASE_CONVERT more which eases eventual removal of NOP_EXPR. 2022-04-29 Richard Biener <rguenther@suse.de> gcc/cp/ * constexpr.cc (fold_simple_1): Use CASE_CONVERT. * cp-gimplify.cc (cp_fold): Likewise. * pt.cc (tsubst_copy): Likewise. gcc/ * dojump.cc (do_jump): Use CASE_CONVERT. * tree-ssa-dom.cc (edge_info::derive_equivalences): Likewise.
2022-05-02system.h: Include <initializer_list> in system.h unconditionallyJakub Jelinek1-0/+1
On Sun, May 01, 2022 at 07:06:53PM +0100, Jonathan Wakely wrote: > > >> the reason is that "gcc/analyzer/region-model.cc” uses initializer_lists, and it seems that <initializer_list> > > >> is not transitively included by any used headers for _LIBCPP_VERSION < 4000. I fixed that locally by > > >> adding initializer_list into system.h (and adding INCLUDE_INITIALIZER_LIST to the top of gcc/analyzer/region-model.cc) > > >> - with that change those versions do bootstrap and test OK*** > > > > > > From what I can see, with libstdc++ it works because <utility> which is > > > included by system.h includes <initializer_list>. > > > If I rename initializer_list in analyzer/region-model.ii to initializer_listx, I > > > also get: > > > ../../gcc/analyzer/region-model.cc: In function ‘void ana::selftest::test_binop_svalue_folding()’: > > > ../../gcc/analyzer/region-model.cc:4966:48: error: deducing from brace-enclosed initializer list requires ‘#include <initializer_list>’ > > > 4508 | > > > +++ |+#include <initializer_list> > > > 4509 | static void > > > ...... > > > 4966 | for (auto op : {BIT_IOR_EXPR, TRUTH_OR_EXPR}) > > > | ^ > > > ../../gcc/analyzer/region-model.cc:4978:49: error: deducing from brace-enclosed initializer list requires ‘#include <initializer_list>’ > > > 4978 | for (auto op : {BIT_AND_EXPR, TRUTH_AND_EXPR}) > > > | ^ > > > > > > I think we have 2 options, one is do what you wrote above, > > > INCLUDE_INITIALIZER_LIST defined before system.h to get #include <initializer_list>. > > > The other option is just to include that unconditionally, it is a very small > > > header. For libstdc++ it will make no difference as it is included anyway > > > and the header is really small there, libc++ includes <cstddef> which isn't > > > normally included and system.h includes <stddef.h> instead. > > > > I’d say unconditionally would be OK. I suppose the chance that any host > > C++ is good enough to build GCC as-is but fails to provide > > <initializer_list> is zero? > > > > Yes, definitely. > > > I’d be OK to do this change without a new RC even. 2022-05-02 Jakub Jelinek <jakub@redhat.com> * system.h: Include initializer_list.
2022-05-02libgcov: add ATTRIBUTE_UNUSED for dump_stringMartin Liska1-0/+1
Mitigates the following clang warning: libgcc/libgcov-driver.c:416:1: warning: unused function 'dump_string' [-Wunused-function] libgcc/ChangeLog: * libgcov-driver.c: Add ATTRIBUTE_UNUSED.
2022-05-02Daily bump.GCC Administrator2-1/+10
2022-05-01rs6000: "Y" is DS-form, not DQ-formSegher Boessenkool1-1/+1
2022-05-01 Segher Boessenkool <segher@kernel.crashing.org> * config/rs6000/constraints.md (Y constraint): Fix comment.
2022-05-01Denormalize VR_VARYING to VR_RANGE before passing it to set_range_info_raw.Aldy Hernandez1-1/+10
We are ICEing in set_range_info_raw because value_range_kind cannot be VR_VARYING, since SSA_NAME_RANGE_TYPE can only hold VR_RANGE / VR_ANTI_RANGE. Most of the time setting a VR_VARYING as a global range makes no sense. However, we can have a range spanning the entire domain (VR_RANGE of [MIN,MAX] which is essentially a VR_VARYING), if the nonzero bits are set. This was working before because set_range_info_raw allows setting VR_RANGE of [MIN, MAX]. However, when going through an irange, we normalize this to a VR_VARYING, thus causing the ICE. It's interesting that other calls to set_range_info with an irange haven't triggered this. One solution would be to just ignore VR_VARYING and bail, since set_range_info* is really an update of the current range semantic wise. After all, we keep the nonzero bits which provide additional info. But this would be a change in behavior, so not suitable until after GCC 12 is released. So in order to keep with current behavior we can just denormalize the varying to VR_RANGE. Tested on x86-64 Linux. PR tree-optimization/105432 gcc/ChangeLog: * tree-ssanames.cc (set_range_info): Denormalize VR_VARYING to VR_RANGE before passing a piecewise range to set_range_info_raw.
2022-05-01Daily bump.GCC Administrator4-1/+21
2022-04-30gengtype: remove "tree_exp" special attributePatrick Palka2-37/+2
The function comment for adjust_field_tree_exp says this attribute is for handling expression trees whose operands may contain pointers to RTL instead of to trees. But ever since r0-59671-gac45df5dba5804, which fixed/removed the last two tree codes for which this was possible (WITH_CLEANUP_EXPR and GOTO_SUBROUTINE_EXPR), this special attribute is mostly a no-op. This patch removes it and instead just annotates struct tree_exp with the "length" attribute directly. Not sure it makes a difference, but I use %h instead of %0 in the attribute string to be consistent with the other uses of the "length" attribute within tree-core.h. This changes the code generated for TS_EXP handling in gt-cp-tree.h from: case TS_EXP: gt_ggc_m_9tree_node ((*x).generic.exp.typed.type); switch ((int) (TREE_CODE ((tree) &(*x)))) { default: { size_t i3; size_t l3 = (size_t)(TREE_OPERAND_LENGTH ((tree) &(*x))); for (i3 = 0; i3 != l3; i3++) { gt_ggc_m_9tree_node ((*x).generic.exp.operands[i3]); } } break; } break; to: case TS_EXP: { size_t l3 = (size_t)(TREE_OPERAND_LENGTH ((tree)&((*x).generic.exp))); gt_ggc_m_9tree_node ((*x).generic.exp.typed.type); { size_t i3; for (i3 = 0; i3 != l3; i3++) { gt_ggc_m_9tree_node ((*x).generic.exp.operands[i3]); } } } which seems equivalent and simpler. gcc/ChangeLog: * gengtype.cc (adjust_field_tree_exp): Remove. (adjust_field_type): Don't handle the "tree_exp" special attribute. * tree-core.h (struct tree_exp): Remove "special" and "desc" attributes. Add "length" attribute.
2022-04-30c-family: attribute ((aligned, mode)) [PR100545]Jason Merrill4-4/+27
The problem here was that handle_mode_attribute clobbered the changes of any previous attribute, only copying type qualifiers to the new type. And common_handle_aligned_attribute had previously set up the typedef, so when we later called set_underlying_type it saw DECL_ORIGINAL_TYPE set and just returned, even though handle_mode_attribute had messed up the TREE_TYPE. So, let's fix handle_mode_attribute to copy attributes, alignment, and typedefness to the new type. PR c/100545 gcc/c-family/ChangeLog: * c-attribs.cc (handle_mode_attribute): Copy attributes, aligned, and typedef. * c-common.cc (set_underlying_type): Add assert. gcc/testsuite/ChangeLog: * c-c++-common/attr-mode-1.c: New test. * c-c++-common/attr-mode-2.c: New test.
2022-04-30Daily bump.GCC Administrator7-1/+371
2022-04-29c++: reorganize friend template matching [PR91618]Jason Merrill3-61/+49
The the different calling of check_explicit_specialization for class and namespace scope friends bothered me, so this patch combines them. PR c++/91618 PR c++/96604 gcc/cp/ChangeLog: * friend.cc (do_friend): Call check_explicit_specialization here. * decl.cc (grokdeclarator): Not here. * decl2.cc (check_classfn): Or here.
2022-04-29c++: alias CTAD and member alias templates [PR104470]Jason Merrill4-6/+47
In this testcase, we were trying to substitute into variant<Foo<T>>::__accepted_type, but failed to look it up because variant<Foo<T>> doesn't exist. In other cases we already rewrite such things into a dependent reference; we need to do that for alias templates as well. This caused some testsuite regressions on alias uses outside of deduction guides, so I've made all of this rewriting conditional on a new tf_dguide tsubst flag. PR c++/104470 gcc/cp/ChangeLog: * cp-tree.h (enum tsubst_flags): Add tf_dguide. * pt.cc (tsubst_aggr_type): Check it. (tsubst_baselink, tsubst_copy): Check it. (maybe_dependent_member_ref): Check it. (instantiate_alias_template): Handle it. (build_deduction_guide): Set it. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/explicit11.C: Second example also ill-formed. * g++.dg/cpp2a/class-deduction-alias12.C: New test.
2022-04-29c++: lambda capture dependent type [PR82980]Jason Merrill1-4/+3
The stage 4 patch limited direct propagation of dependent type to capture field/proxy to the "current instantiation", but many more types should be suitable as well. PR c++/82980 gcc/cp/ChangeLog: * lambda.cc (type_deducible_expression_p): Allow more types.
2022-04-29c++: tidy auto deductionJason Merrill1-3/+2
In r185768 I added the !FUNCTION_DECL check, but we might as well just check for variable; nothing else should take this path, and asserting as much doesn't regress anything. gcc/cp/ChangeLog: * decl.cc (cp_finish_decl): Only consider auto for vars.
2022-04-29c++: pedwarn for empty unnamed enum in decl [PR67048]Marek Polacek2-1/+10
[dcl.dcl]/5 says that enum { }; is ill-formed, and since r197742 we issue a pedwarn. However, the pedwarn also fires for enum { } x; which is well-formed. So only warn when {} is followed by a ;. This should be correct since you can't have "enum {}, <whatever>" -- that produces "expected unqualified-id before ',' token". PR c++/67048 gcc/cp/ChangeLog: * parser.cc (cp_parser_enum_specifier): Warn about empty unnamed enum only when it's followed by a semicolon. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/enum42.C: New test.
2022-04-29c++: check completeness after auto deduction [PR80351]Jason Merrill9-5/+119
Normally we check for incomplete type in start_decl, but that obviously doesn't work for auto variables. Thanks to Pokechu22 for the analysis and testcases: "When cp_finish_decl calls cp_apply_type_quals_to_decl on a const auto or constexpr auto variable, the type might not be complete the first time (this happened when auto deduces to an initializer_list). cp_apply_type_quals_to_decl removes the const qualifier if the type is not complete, which is appropriate for grokdeclarator, on the assumption that the type will be complete when called by cp_finish_decl." PR c++/80351 gcc/cp/ChangeLog: * decl.cc (cp_finish_decl): Check completeness of deduced type. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/constexpr-77482.C: Adjust message. * g++.dg/cpp1y/auto-fn27.C: Likewise. * g++.dg/cpp1y/lambda-generic-variadic22.C: Likewise. * g++.dg/cpp1z/decomp54.C: Likewise. * g++.dg/cpp0x/initlist-const1.C: New test. * g++.dg/warn/Wunused-var-37.C: New test. * g++.dg/warn/Wunused-var-38.C: New test. * g++.dg/warn/Wunused-var-39.C: New test.
2022-04-29Fix exchanged period and letter in gfortan.texi.Thomas Koenig1-1/+1
gcc/fortran/ChangeLog: * gfortran.texi: Fix exchanged period and letter.
2022-04-29ipa: Release body of clone_of when removing its last clone (PR 100413)Martin Jambor2-1/+69
In the PR, the verifier complains that we did not manage to remove the body of a node and it is right. The node is kept for materialization of two clones but after one is materialized, the other one is removed as unneeded (as a part of delete_unreachable_blocks_update_callgraph). The problem is that the node removal does not check for this situation and can leave the clone_of node there with a body attached to it even though there is no use for it any more. This patch does checks for it and handles the situation in a simlar way that cgraph_node::materialize_clone does it, except that it also has to be careful that the removed node itself does not have any clones, which would still need the clone_of's body. Failing to do that results in a bootstrap failure. gcc/ChangeLog: 2022-04-27 Martin Jambor <mjambor@suse.cz> PR ipa/100413 * cgraph.cc (cgraph_node::remove): Release body of the node this is clone_of if appropriate. gcc/testsuite/ChangeLog: 2022-04-27 Martin Jambor <mjambor@suse.cz> PR ipa/100413 * g++.dg/ipa/pr100413.C: New test.