aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-01-31Add mold detection for libs.Martin Liska8-26/+87
libatomic/ChangeLog: * acinclude.m4: Detect *_ld_is_mold and use it. * configure: Regenerate. libgomp/ChangeLog: * acinclude.m4: Detect *_ld_is_mold and use it. * configure: Regenerate. libitm/ChangeLog: * acinclude.m4: Detect *_ld_is_mold and use it. * configure: Regenerate. libstdc++-v3/ChangeLog: * acinclude.m4: Detect *_ld_is_mold and use it. * configure: Regenerate.
2022-01-31Fix multiple_of_p behavior with NOP_EXPRRichard Biener1-3/+3
We were passing down the original type to recursive invocations of multiple_of_p for say (int)(unsigned * unsigned). 2022-01-24 Richard Biener <rguenther@suse.de> PR tree-optimization/100499 * fold-const.cc (multiple_of_p): Pass the correct type of the expression to the recursive invocation of multiple_of_p for conversions and use CASE_CONVERT.
2022-01-31Use V8+ default in 32-bit mode on SPARC64/LinuxEric Botcazou1-2/+2
This is what has been done for ages on SPARC/Solaris and makes it possible to use 64-bit atomic instructions even in 32-bit mode. gcc/ PR target/104189 * config/sparc/linux64.h (TARGET_DEFAULT): Add MASK_V8PLUS.
2022-01-31Add testcase for incorrect optimization in AdaEric Botcazou1-0/+23
gcc/testsuite/ * gnat.dg/div_zero.adb: New test.
2022-01-31Reduce multiple_of_p usesRichard Biener2-10/+11
There are a few cases where we know we're dealing with (poly-)integer constants, so remove the use of multiple_of_p in those cases to make the PR100499 fix less impactful. 2022-01-24 Richard Biener <rguenther@suse.de> PR tree-optimization/100499 * tree-cfg.cc (verify_gimple_assign_ternary): Use multiple_p on poly-ints instead of multiple_of_p. * tree-ssa.cc (maybe_rewrite_mem_ref_base): Likewise. (non_rewritable_mem_ref_base): Likewise. (non_rewritable_lvalue_p): Likewise. (execute_update_addresses_taken): Likewise.
2022-01-31Daily bump.GCC Administrator2-1/+7
2022-01-30libstdc++ testsuite: Don't run lwg3464.cc tests on simulatorsHans-Peter Nilsson2-2/+2
These tests have always been failing for my autotester running a cris-elf simulator; when unrestrained they take about 20 minutes each, compared to the (doubled) timeout of 720 seconds, of a total 2h40min for the whole of the libstdc++-v3 testsuite. The tests cover counter overflow and are already disabled for LP64 targets. * testsuite/27_io/basic_istream/get/char/lwg3464.cc: Don't run on simulator targets. * testsuite/27_io/basic_istream/get/wchar_t/lwg3464.cc: Likewise.
2022-01-30Daily bump.GCC Administrator3-1/+25
2022-01-29testsuite: Fix up tree-ssa/divide-7.c testcase [PR95424]Jakub Jelinek1-2/+2
This test fails everywhere, because ? doesn't match literal ?. It should use \\? instead. I've also changed those .s in there. 2022-01-29 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/95424 * gcc.dg/tree-ssa/divide-7.c: Fix up regexps in scan-tree-dump{,-not}.
2022-01-29match.pd: Fix up 1 / X for unsigned X optimization [PR104280]Jakub Jelinek4-12/+66
On Fri, Jan 28, 2022 at 11:38:23AM -0700, Jeff Law wrote: > Thanks.  Given the original submission and most of the review work was done > prior to stage3 closing, I went ahead and installed this on the trunk. Unfortunately this breaks quite a lot of things. The main problem is that GIMPLE allows EQ_EXPR etc. only with BOOLEAN_TYPE or with TYPE_PRECISION == 1 integral type (or vector boolean). Violating this causes verification failures in tree-cfg.cc in some cases, in other cases wrong-code issues because before it is verified we e.g. transform 1U / x into x == 1U and later into x (because we assume that == type must be one of the above cases and when it is the same type as the type of the first operand, for boolean-ish cases it should be equivalent). Fixed by changing that (eq @1 { build_one_cst (type); }) into (convert (eq:boolean_type_node @1 { build_one_cst (type); })) Note, I'm not 100% sure if :boolean_type_node is required in that case, I see some spots in match.pd that look exactly like this, while there is e.g. (convert (le ...)) that supposedly does the right thing too. The signed integer 1/X case doesn't need changes changes, for (cond (le ...) ...) le gets correctly boolean_type_node and cond should use type. I've also reformatted it, some lines were too long, match.pd uses indentation by 1 column instead of 2 etc. 2022-01-29 Jakub Jelinek <jakub@redhat.com> Andrew Pinski <apinski@marvell.com> PR tree-optimization/104279 PR tree-optimization/104280 PR tree-optimization/104281 * match.pd (1 / X -> X == 1 for unsigned X): Build eq with boolean_type_node and convert to type. Formatting fixes. * gcc.dg/torture/pr104279.c: New test. * gcc.dg/torture/pr104280.c: New test. * gcc.dg/torture/pr104281.c: New test.
2022-01-29Daily bump.GCC Administrator7-1/+232
2022-01-28sh-linux fix target cpuYoshinori Sato1-2/+3
sh-linux not supported any SH1 and SH2a little-endian. gcc * config/sh/t-linux (MULTILIB_EXCEPTIONS): Add m1, mb/m1 and m2a.
2022-01-28tree-optimization/103514 Missing XOR-EQ-AND OptimizationNavid Rahimi2-0/+41
This patch will add the missed pattern described in bug 103514 [1] to the match.pd. [1] includes proof of correctness for the patch too. 1) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103514 gcc/ PR tree-optimization/103514 * match.pd (a & b) ^ (a == b) -> !(a | b): New optimization. (a & b) == (a ^ b) -> !(a | b): New optimization. gcc/testsuite * gcc.dg/tree-ssa/pr103514.c: Testcase for this optimization.
2022-01-28doc: Update -Wbidi-chars documentationMarek Polacek1-1/+3
gcc/ChangeLog: * doc/invoke.texi: Update -Wbidi-chars documentation.
2022-01-28c++: bogus warning with value init of const pmf [PR92752]Patrick Palka2-1/+20
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.cc (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>
2022-01-28Darwin, PPC: Fix bootstrap after GLIBC version changes.Iain Sandoe1-0/+2
A recent patch added tests for OPTION_GLIBC that is defined in linux.h and linux64.h. This broke bootstrap for powerpc Darwin. Fixed by adding a definition to 0 for OPTION_GLIBC. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/ChangeLog: * config/rs6000/darwin.h (OPTION_GLIBC): Define to 0.
2022-01-28match.pd: Simplify 1 / X for integer X [PR95424]Zhao Wei Liew3-0/+31
This patch implements an optimization for the following C++ code: int f(int x) { return 1 / x; } int f(unsigned int x) { return 1 / x; } Before this patch, x86-64 gcc -std=c++20 -O3 produces the following assembly: f(int): xor edx, edx mov eax, 1 idiv edi ret f(unsigned int): xor edx, edx mov eax, 1 div edi ret In comparison, clang++ -std=c++20 -O3 produces the following assembly: f(int): lea ecx, [rdi + 1] xor eax, eax cmp ecx, 3 cmovb eax, edi ret f(unsigned int): xor eax, eax cmp edi, 1 sete al ret Clang's output is more efficient as it avoids expensive div operations. With this patch, GCC now produces the following assembly: f(int): lea eax, [rdi + 1] cmp eax, 2 mov eax, 0 cmovbe eax, edi ret f(unsigned int): xor eax, eax cmp edi, 1 sete al ret which is virtually identical to Clang's assembly output. Any slight differences in the output for f(int) is possibly related to a different missed optimization. v2: https://gcc.gnu.org/pipermail/gcc-patches/2022-January/587751.html Changes from v2: 1. Refactor from using a switch statement to using the built-in if-else statement. v1: https://gcc.gnu.org/pipermail/gcc-patches/2022-January/587634.html Changes from v1: 1. Refactor common if conditions. 2. Use build_[minus_]one_cst (type) to get -1/1 of the correct type. 3. Match only for TRUNC_DIV_EXPR and TYPE_PRECISION (type) > 1. gcc/ChangeLog: PR tree-optimization/95424 * match.pd: Simplify 1 / X where X is an integer.
2022-01-28store-merging: Fix up a -fcompare-debug bug in get_status_for_store_merging ↵Jakub Jelinek2-1/+29
[PR104263] As mentioned in the PRthe following testcase fails, because the last stmt of a bb with -g is a debug stmt and get_status_for_store_merging uses gimple_seq_last_stmt (bb_seq (bb)) when testing if it is valid for store merging. The debug stmt isn't valid, while a stmt at that position with -g0 is valid and so the divergence. As we walk the whole bb already, this patch just remembers the last non-debug stmt, so that we don't need to skip backwards debug stmts at the end of the bb to find last real stmt. 2022-01-28 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/104263 * gimple-ssa-store-merging.cc (get_status_for_store_merging): For cfun->can_throw_non_call_exceptions && cfun->eh test whether last non-debug stmt in the bb is store_valid_for_store_merging_p rather than last stmt. * gcc.dg/pr104263.c: New test.
2022-01-28testsuite/70230 - fix failures with default SSP\Allan McRae17-16/+17
Configuring with --enable-default-ssp triggers various testsuite failures. These contain asm statements that are not compatible with -fstack-protector. Adding -fno-stack-protector to dg-options to work around this issue. Tested on x86_64-linux. PR testsuite/70230 * gcc.dg/asan/use-after-scope-4.c (dg-options): Add -fno-stack-protector. * gcc.dg/stack-usage-1.c: Likewise * gcc.dg/superblock.c: Likewise * gcc.target/i386/avx-vzeroupper-17.c: Likewise * gcc.target/i386/cleanup-1.c: Likewise * gcc.target/i386/cleanup-2.c: Likewise * gcc.target/i386/interrupt-redzone-1.c: Likewise * gcc.target/i386/interrupt-redzone-2.c: Likewise * gcc.target/i386/pr79793-1.c: Likewise * gcc.target/i386/pr79793-2.c: Likewise * gcc.target/i386/shrink_wrap_1.c: Likewise * gcc.target/i386/stack-check-11.c: Likewise * gcc.target/i386/stack-check-18.c: Likewise * gcc.target/i386/stack-check-19.c: Likewise * gcc.target/i386/stackalign/pr88483-1.c: Likewise * gcc.target/i386/stackalign/pr88483-2.c: Likewise * gcc.target/i386/sw-1.c: Likewise
2022-01-28Remove extra newline in ICE report.Martin Liska1-2/+2
Revert partially what I did in g:76ef38e3178a11e76a66b4d4c0e10e85fe186a45. gcc/ChangeLog: * diagnostic.cc (diagnostic_action_after_output): Remove extra newline.
2022-01-28internal_error - do not use leading capital letterMartin Liska4-6/+6
gcc/ChangeLog: * config/rs6000/host-darwin.cc (segv_crash_handler): Do not use leading capital letter. (segv_handler): Likewise. * ipa-sra.cc (verify_splitting_accesses): Likewise. * varasm.cc (get_section): Likewise. gcc/d/ChangeLog: * decl.cc (d_finish_decl): Do not use leading capital letter.
2022-01-28c++: var tmpl w/ dependent constrained auto type [PR103341]Patrick Palka3-1/+35
When deducing the type of a variable template (or templated static data member) with a constrained auto type, we might need its template arguments for satisfaction since the constraint could depend on them. PR c++/103341 gcc/cp/ChangeLog: * decl.cc (cp_finish_decl): Pass the template arguments of a variable template specialization or a templated static data member to do_auto_deduction when the auto is constrained. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-class4.C: New test. * g++.dg/cpp2a/concepts-var-templ2.C: New test.
2022-01-28tree-optimization/104267 - fix external def vector type for call argsRichard Biener1-1/+3
The following fixes the vector type registered for external defs in call arguments when vectorizing with SLP. We assumed uniform vectype_in types here but with calls like .COND_MUL we also have mask arguments which, when invariant or external, need to have a proper mask vector type. 2022-01-28 Richard Biener <rguenther@suse.de> PR tree-optimization/104267 * tree-vect-stmts.cc (vectorizable_call): Properly use the per-argument determined vector type for externals and invariants.
2022-01-28tree-optimization/104263 - avoid retaining abnormal edges for non-call/goto ↵Richard Biener2-4/+27
stmts This removes a premature optimization from gimple_purge_dead_abnormal_call_edges which, after eliding the last setjmp (or computed goto) statement from a function and thus clearing cfun->calls_setjmp, leaves us with the abnormal edges from other calls that are elided for example via inlining or DCE. That's a CFG / IL combination that should be impossible (not addressing the fact that with cfun->calls_setjmp and cfun->has_nonlocal_label cleared we should not have any abnormal edge at all). For the testcase in the PR this means that IPA inlining will remove the abormal edges from the block after inlining the call the edge was coming from. 2022-01-28 Richard Biener <rguenther@suse.de> PR tree-optimization/104263 * tree-cfg.cc (gimple_purge_dead_abnormal_call_edges): Purge edges also when !cfun->has_nonlocal_label and !cfun->calls_setjmp. * gcc.dg/tree-ssa/inline-13.c: New testcase.
2022-01-28RISC-V: Document `auipc' and `bitmanip' `type' attributesMaciej W. Rozycki1-0/+2
Document new `auipc' and `bitmanip' `type' attributes added respectively with commit 88108b27dda9 ("RISC-V: Add sifive-7 pipeline description.") and commit 283b1707f237 ("RISC-V: Implement instruction patterns for ZBA extension.") but not listed so far. gcc/ * config/riscv/riscv.md: Document `auipc' and `bitmanip' `type' attributes.
2022-01-28Prevent malicious descriptor stacking for scalar components [V2].Andre Vehreschild3-43/+108
gcc/fortran/ChangeLog: PR fortran/103790 * trans-array.cc (structure_alloc_comps): Prevent descriptor stacking for non-array data; do not broadcast caf-tokens. * trans-intrinsic.cc (conv_co_collective): Prevent generation of unused descriptor. gcc/testsuite/ChangeLog: PR fortran/103790 * gfortran.dg/coarray_collectives_18.f90: New test.
2022-01-28cfgrtl: Fix up locus comparison in unique_locus_on_edge_between_p [PR104237]Jakub Jelinek1-2/+25
The testcase in the PR (not included for the testsuite because we don't have an (easy) way to -fcompare-debug LTO, we'd need 2 compilations/linking, one with -g and one with -g0 and -fdump-rtl-final= at the end of lto1 and compare that) has different code generation for -g vs. -g0. The difference appears during expansion, where we have a goto_locus that is at -O0 compared to the INSN_LOCATION of the previous and next insn across an edge. With -g0 the locations are equal and so no nop is added. With -g the locations aren't equal and so a nop is added holding that location. The reason for the different location is in the way how we stream in locations by lto1. We have lto_location_cache::apply_location_cache that is called with some set of expanded locations, qsorts them, creates location_t's for those and remembers the last expanded location. lto_location_cache::input_location_and_block when read in expanded_location is equal to the last expanded location just reuses the last location_t (or adds/changes/removes LOCATION_BLOCK in it), when it is not queues it for next apply_location_cache. Now, when streaming in -g input, we can see extra locations that don't appear with -g0, and if we are unlucky enough, those can be sorted last during apply_location_cache and affect what locations are used from the single entry cache next. In particular, second apply_location_cache with non-empty loc_cache in the testcase has 14 locations with -g0 and 16 with -g and those 2 extra ones sort both last (they are the same). The last one from -g0 then appears to be input_location_and_block sourced again, for -g0 triggers the single entry cache, while for -g it doesn't and so apply_location_cache will create for it another location_t with the same content. The following patch fixes it by comparing everything we care about the location instead (well, better in addition) to a simple location_t == location_t check. I think we don't care about the sysp flag for debug info... 2022-01-28 Jakub Jelinek <jakub@redhat.com> PR lto/104237 * cfgrtl.cc (loc_equal): New function. (unique_locus_on_edge_between_p): Use it.
2022-01-28Make graph dumping work for fn != cfunRichard Biener3-18/+26
The following makes dumping of a function as graph work as intended when specifying a function other than cfun. Unfortunately the loop and the dominance APIs are not set up to work for other functions than cfun so you won't get any fancy loop dumps but the non-loop dump works up to reaching mark_dfs_back_edges which I trivially made function aware and adjusted current callers with a wrapper. With all this, doing dot-fn id->src_cfun from the debugger when debugging inlining works. Previously you got a strange mix of the src and dest functions visualized ;) 2022-01-28 Richard Biener <rguenther@suse.de> * cfganal.h (mark_dfs_back_edges): Provide API with struct function argument. * cfganal.cc (mark_dfs_back_edges): Take a struct function to work on, add a wrapper passing cfun. * graph.cc (draw_cfg_nodes_no_loops): Replace stray cfun uses with fun which is already passed. (draw_cfg_edges): Likewise. (draw_cfg_nodes_for_loop): Do not use draw_cfg_nodes_for_loop for fun != cfun.
2022-01-28Fix wrong operator for universal_integer operands in instanceEric Botcazou2-1/+44
This is a regression present on mainline and 11 branch: the transformation applied during expansion by Narrow_Large_Operation would incorrectly perform name resolution for the operator again. gcc/ada/ PR ada/104258 * exp_ch4.adb (Narrow_Large_Operation): Also copy the entity, if any, when rewriting the operator node. gcc/testsuite/ * gnat.dg/generic_comp.adb: New test.
2022-01-28Revert "Prevent malicious descriptor stacking for scalar components."Andre Vehreschild3-105/+43
Breaks bootstrap. This reverts commit c9c48ab7bad9fe5e096076e56a60ce0a5a2b65f7.
2022-01-28Prevent malicious descriptor stacking for scalar components.Andre Vehreschild3-43/+105
gcc/fortran/ChangeLog: PR fortran/103790 * trans-array.cc (structure_alloc_comps): Prevent descriptor stacking for non-array data; do not broadcast caf-tokens. * trans-intrinsic.cc (conv_co_collective): Prevent generation of unused descriptor. gcc/testsuite/ChangeLog: PR fortran/103790 * gfortran.dg/coarray_collectives_18.f90: New test.
2022-01-27c++: pack in enumerator in lambda [PR100198]Jason Merrill7-7/+75
The GCC 8 lambda overhaul fixed most uses of lambdas in pack expansions, but local enums and classes within such lambdas that depend on parameter packs are still broken. For now, give a sorry instead of an ICE or incorrect error. PR c++/100198 PR c++/100030 PR c++/100282 gcc/cp/ChangeLog: * parser.cc (cp_parser_enumerator_definition): Sorry on parameter pack in lambda. (cp_parser_class_head): And in class attributes. * pt.cc (check_for_bare_parameter_packs): Sorry instead of error in lambda. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/lambda/lambda-variadic13.C: Accept the sorry as well as the correct error. * g++.dg/cpp0x/lambda/lambda-variadic14.C: Likewise. * g++.dg/cpp0x/lambda/lambda-variadic14a.C: New test. * g++.dg/cpp0x/lambda/lambda-variadic15.C: New test. * g++.dg/cpp0x/lambda/lambda-variadic16.C: New test.
2022-01-28Daily bump.GCC Administrator9-1/+280
2022-01-27libstdc++: Prevent -Wstringop-overread warning in std::deque [PR100516]Jonathan Wakely2-0/+17
The compiler warns about the loop in deque::_M_range_initialize because it doesn't know that the number of nodes has already been correctly sized to match the size of the input. Use __builtin_unreachable to tell it that the loop will never be entered if the number of elements is smaller than a single node. libstdc++-v3/ChangeLog: PR libstdc++/100516 * include/bits/deque.tcc (_M_range_initialize<ForwardIterator>): Add __builtin_unreachable to loop. * testsuite/23_containers/deque/100516.cc: New test.
2022-01-27analyzer: show region creation events for uninit warningsDavid Malcolm24-36/+265
When reviewing the output of -fanalyzer on PR analyzer/104224 I noticed that despite very verbose paths, the diagnostic paths for -Wanalyzer-use-of-uninitialized-value don't show where the uninitialized memory is allocated. This patch adapts and simplifies material from "[PATCH 3/6] analyzer: implement infoleak detection" https://gcc.gnu.org/pipermail/gcc-patches/2021-November/584377.html in order to add region creation events for the pertinent region (whether on the stack or heap). For example, this patch extends: malloc-1.c: In function 'test_40': malloc-1.c:461:5: warning: use of uninitialized value '*p' [CWE-457] [-Wanalyzer-use-of-uninitialized-value] 461 | i = *p; | ~~^~~~ 'test_40': event 1 | | 461 | i = *p; | | ~~^~~~ | | | | | (1) use of uninitialized value '*p' here | to: malloc-1.c: In function 'test_40': malloc-1.c:461:5: warning: use of uninitialized value '*p' [CWE-457] [-Wanalyzer-use-of-uninitialized-value] 461 | i = *p; | ~~^~~~ 'test_40': events 1-2 | | 460 | int *p = (int*)malloc(sizeof(int*)); | | ^~~~~~~~~~~~~~~~~~~~ | | | | | (1) region created on heap here | 461 | i = *p; | | ~~~~~~ | | | | | (2) use of uninitialized value '*p' here | and this helps readability of the resulting warnings, especially in more complicated cases. gcc/analyzer/ChangeLog: * checker-path.cc (event_kind_to_string): Handle EK_REGION_CREATION. (region_creation_event::region_creation_event): New. (region_creation_event::get_desc): New. (checker_path::add_region_creation_event): New. * checker-path.h (enum event_kind): Add EK_REGION_CREATION. (class region_creation_event): New subclass. (checker_path::add_region_creation_event): New decl. * diagnostic-manager.cc (diagnostic_manager::emit_saved_diagnostic): Pass NULL for new param to add_events_for_eedge when handling trailing eedge. (diagnostic_manager::build_emission_path): Create an interesting_t instance, allow the pending diagnostic to populate it, and pass it to the calls to add_events_for_eedge. (diagnostic_manager::add_events_for_eedge): Add "interest" param. Use it to add region_creation_events for on-stack regions created within at function entry, and when pertinent dynamically-sized regions are created. (diagnostic_manager::prune_for_sm_diagnostic): Add case for EK_REGION_CREATION. * diagnostic-manager.h (diagnostic_manager::add_events_for_eedge): Add "interest" param. * pending-diagnostic.cc: Include "selftest.h", "tristate.h", "analyzer/call-string.h", "analyzer/program-point.h", "analyzer/store.h", and "analyzer/region-model.h". (interesting_t::add_region_creation): New. (interesting_t::dump_to_pp): New. * pending-diagnostic.h (struct interesting_t): New. (pending_diagnostic::mark_interesting_stuff): New vfunc. * region-model.cc (poisoned_value_diagnostic::poisoned_value_diagnostic): Add (poisoned_value_diagnostic::operator==): Compare m_pkind and m_src_region fields. (poisoned_value_diagnostic::mark_interesting_stuff): New. (poisoned_value_diagnostic::m_src_region): New. (region_model::check_for_poison): Call get_region_for_poisoned_expr for uninit values and pass the resul to the diagnostic. (region_model::get_region_for_poisoned_expr): New. (region_model::deref_rvalue): Pass NULL for poisoned_value_diagnostic's src_region. * region-model.h (region_model::get_region_for_poisoned_expr): New decl. * region.h (frame_region::get_fndecl): New. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/data-model-1.c: Add dg-message directives for expected region creation events. * gcc.dg/analyzer/malloc-1.c: Likewise. * gcc.dg/analyzer/memset-CVE-2017-18549-1.c: Likewise. * gcc.dg/analyzer/pr101547.c: Likewise. * gcc.dg/analyzer/pr101875.c: Likewise. * gcc.dg/analyzer/pr101962.c: Likewise. * gcc.dg/analyzer/pr104224.c: Likewise. * gcc.dg/analyzer/pr94047.c: Likewise. * gcc.dg/analyzer/symbolic-1.c: Likewise. * gcc.dg/analyzer/uninit-1.c: Likewise. * gcc.dg/analyzer/uninit-4.c: Likewise. * gcc.dg/analyzer/uninit-alloca.c: New test. * gcc.dg/analyzer/uninit-pr94713.c: Add dg-message directive for expected region creation event. * gcc.dg/analyzer/uninit-pr94714.c: Likewise. * gcc.dg/analyzer/zlib-3.c: Likewise. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-01-27libstdc++: Avoid overflow in ranges::advance(i, n, bound)Jonathan Wakely2-6/+46
When (bound - i) or n is the most negative value of its type, the negative of the value will overflow. Instead of abs(n) >= abs(bound - i) use n >= (bound - i) when positive and n <= (bound - i) when negative. The function has a precondition that they must have the same sign, so this works correctly. The precondition check can be moved into the else branch, and simplified. The standard requires calling ranges::advance(i, bound) even if i==bound is already true, which is technically observable, but that's pointless. We can just return n in that case. Similarly, for i!=bound but n==0 we are supposed to call ranges::advance(i, n), but that's pointless. An LWG issue to allow omitting the pointless calls is expected to be filed. libstdc++-v3/ChangeLog: * include/bits/ranges_base.h (ranges::advance): Avoid signed overflow. Do nothing if already equal to desired result. * testsuite/24_iterators/range_operations/advance_overflow.cc: New test.
2022-01-27c++: dependent and non-dependent attributes [PR104245]Jason Merrill2-9/+15
A flaw in my patch for PR51344 was that cplus_decl_attributes calls decl_attributes after save_template_attributes, which messes up the ordering that save_template_attributes set up. Fixed by splitting save_template_attributes around the call to decl_attributes. PR c++/104245 PR c++/51344 gcc/cp/ChangeLog: * decl2.cc (save_template_attributes): Take late attrs as parm. (cplus_decl_attributes): Call it after decl_attributes, splice_template_attributes before. gcc/testsuite/ChangeLog: * g++.dg/lto/alignas1_0.C: New test.
2022-01-27testsuite: Fix gfortran.dg/ieee/signaling_?.f90 tests for x86 targetsUros Bizjak3-3/+3
As stated in signaling_?.f90 tests, x86-32 ABI is not suitable to correctly handle signaling NaNs. However, XFAIL is not the correct choice to disable these tests, since various optimizations can generate code that avoids moves from registers to memory (and back), resulting in the code that executes correctly, producing spurious XFAIL. These tests should be disabled on x86-32 using { ! ia32 } dg-directive which rules out x32 ilp32 ABI, where tests execute without problems. Please note that check_effective_target_ia32 test tries to compile code that uses __i386__ target-dependent preprocessor definition, so it is guaranteed to fail on all non-ia32 targets. 2022-01-27 Uroš Bizjak <ubizjak@gmail.com> gcc/testsuite/ChangeLog: * gfortran.dg/ieee/signaling_1.f90 (dg-do): Run only on non-ia32 targets. * gfortran.dg/ieee/signaling_2.f90 (dg-do): Ditto. * gfortran.dg/ieee/signaling_3.f90 (dg-do): Ditto.
2022-01-27Fortran: fix issues with internal conversion between default and wide charHarald Anlauf3-4/+33
gcc/fortran/ChangeLog: PR fortran/104128 * expr.cc (gfc_copy_expr): Convert internal representation of string to wide char in value only for default character kind. * target-memory.cc (interpret_array): Pass flag for conversion of wide chars. (gfc_target_interpret_expr): Likewise. gcc/testsuite/ChangeLog: PR fortran/104128 * gfortran.dg/transfer_simplify_14.f90: New test.
2022-01-27c++: Add a couple of CTAD testcases [PR82632]Patrick Palka2-0/+34
PR c++/82632 gcc/testsuite/ChangeLog: * g++.dg/cpp1z/class-deduction104.C: New test. * g++.dg/cpp1z/class-deduction105.C: New test.
2022-01-27Fortran: add missing conversions for result of intrinsics to result typeHarald Anlauf2-6/+34
gcc/fortran/ChangeLog: PR fortran/84784 * trans-intrinsic.cc (conv_intrinsic_image_status): Convert result to resulting (default) integer type. (conv_intrinsic_team_number): Likewise. (gfc_conv_intrinsic_popcnt_poppar): Likewise. gcc/testsuite/ChangeLog: PR fortran/84784 * gfortran.dg/pr84784.f90: New test.
2022-01-27git-undescr.sh: Support full output of git-descr.sh.Martin Liska1-2/+2
contrib/ChangeLog: * git-undescr.sh: Support full output of git-descr.sh.
2022-01-27contrib: Put gcc-descr and gcc-undescr to file.Martin Liska3-2/+52
contrib/ChangeLog: * git-descr.sh: New file. * git-undescr.sh: New file. Support optional arguments --long, --short and default to 14 characters of git hash. * gcc-git-customization.sh: Use the created files. Co-Authored-By: Martin Jambor <mjambor@suse.cz>
2022-01-27c++: non-dependent immediate member fn call [PR99895]Patrick Palka8-30/+94
Here we're emitting a bogus error during ahead of time evaluation of a non-dependent immediate member function call such as a.f(args) because the defacto templated form for such a call is (a.f)(args) but we're trying to evaluate it using the intermediate CALL_EXPR built by build_over_call, which has the non-member form f(a, args). The defacto member form is built in build_new_method_call, so it seems we should handle the immediate call there instead, or perhaps make build_over_call build the correct form in the first place. Giiven that there are many spots other than build_new_method_call that call build_over_call for member functions, e.g. build_op_call, this patch takes the latter approach. In passing, this patch makes us avoid wrapping PARM_DECL in NON_DEPENDENT_EXPR for benefit of the third testcase below. PR c++/99895 gcc/cp/ChangeLog: * call.cc (build_over_call): For a non-dependent member call, build up a CALL_EXPR using a COMPONENT_REF callee, as in build_new_method_call. * pt.cc (build_non_dependent_expr): Don't wrap PARM_DECL either. * tree.cc (build_min_non_dep_op_overload): Adjust accordingly after the build_over_call change. gcc/ChangeLog: * tree.cc (build_call_vec): Add const to second parameter. * tree.h (build_call_vec): Likewise. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/consteval-memfn1.C: New test. * g++.dg/cpp2a/consteval-memfn2.C: New test. * g++.dg/cpp2a/consteval28.C: New test.
2022-01-27c++: constrained partial spec using qualified name [PR92944, PR103678]Patrick Palka3-11/+43
In the nested_name_specifier branch within cp_parser_class_head, we need to update 'type' with the result of maybe_process_partial_specialization like we do in the template_id_p branch. PR c++/92944 PR c++/103678 gcc/cp/ChangeLog: * parser.cc (cp_parser_class_head): Update 'type' with the result of maybe_process_partial_specialization in the nested_name_specifier branch. Refactor nearby code to accomodate that maybe_process_partial_specialization returns a _TYPE, not a TYPE_DECL, and eliminate local variable 'class_type' in passing. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-partial-spec10.C: New test. * g++.dg/cpp2a/concepts-partial-spec11.C: New test.
2022-01-27libstdc++: fix typo in acinclude.m4.Martin Liska2-2/+2
PR libstdc++/104259 libstdc++-v3/ChangeLog: * acinclude.m4: Fix typo. * configure: Regenerate.
2022-01-27c++: new-expr of array of deduced class tmpl [PR101988]Marek Polacek3-0/+39
In r12-1933 I attempted to implement DR2397 aka allowing int a[3]; auto (&r)[3] = a; by removing the type_uses_auto check in create_array_type_for_decl. That may have gone too far, because it also allows arrays of CLASS_PLACEHOLDER_TEMPLATE and it looks like [dcl.type.class.deduct] prohibits that: "...the declared type of the variable shall be cv T, where T is the placeholder." However, in /2 it explicitly states that "A placeholder for a deduced class type can also be used in the type-specifier-seq in the new-type-id or type-id of a new-expression." In this PR, it manifested by making us accept invalid template<class T> struct A { A(T); }; auto p = new A[]{1}; [expr.new]/2 says that such a construct is treated as an invented declaration of the form A x[]{1}; but, I think, that ought to be ill-formed as per above. So this patch sort of restores the create_array_type_for_decl check. I should mention that the difference between [] and [1] is due to cp_parser_new_type_id: if (*nelts == NULL_TREE) /* Leave [] in the declarator. */; and groktypename returning different types based on that. PR c++/101988 gcc/cp/ChangeLog: * decl.cc (create_array_type_for_decl): Reject forming an array of placeholder for a deduced class type. gcc/testsuite/ChangeLog: * g++.dg/cpp1z/class-deduction-new1.C: New test. * g++.dg/cpp23/auto-array2.C: New test.
2022-01-27Improve wording for -freport-bug option.Martin Liska3-8/+21
PR web/104254 gcc/ChangeLog: * diagnostic.cc (diagnostic_initialize): Initialize report_bug flag. (diagnostic_action_after_output): Explain that -freport-bug option can be used for pre-processed file creation. Make the message shorter. (error_recursion): Rename Internal to internal. * diagnostic.h (struct diagnostic_context): New field. * opts.cc (common_handle_option): Init the field here.
2022-01-27analyzer: fix -Wformat warnings on i686Martin Liska2-3/+3
PR analyzer/104247 gcc/analyzer/ChangeLog: * constraint-manager.cc (bounded_ranges_manager::log_stats): Cast to long for format purpose. * region-model-manager.cc (log_uniq_map): Likewise.
2022-01-27rs6000: Fix an assertion in update_target_cost_per_stmt [PR103702]Kewen Lin2-2/+29
This patch is to fix one wrong assertion which is too aggressive. Vectorizer can do vec_construct costing for the vector type which only has one unit. For the failed case, the passed in vector type is "vector(1) int", though it doesn't end up with any construction eventually, we have to handle this kind of possibility. gcc/ChangeLog: PR target/103702 * config/rs6000/rs6000.cc (rs6000_cost_data::update_target_cost_per_stmt): Fix one wrong assertion with early return. gcc/testsuite/ChangeLog: PR target/103702 * gcc.target/powerpc/pr103702.c: New test.