aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2023-03-28CRIS: Improve bailing for eliminable compares for "addi" vs. "add"Hans-Peter Nilsson1-1/+52
This patch affects a post-reload define_split for CRIS that transforms a condition-code-clobbering addition into a non-clobbering addition. (A "two-operand" addition between registers is the only insn that has both a condition-code-clobbering and a non-clobbering variant for CRIS.) Many more "add.d":s are replaced by non-condition-code- clobbering "addi":s after this patch, but most of the transformations don't matter. CRIS with LRA generated code that exposed a flaw with the original patch: it bailed too easily, on *any* insn using the result of the addition. To wit, more effort than simply applying reg_mentioned_p is needed to inspect the user, in the code to avoid munging an insn sequence that cmpelim is supposed to handle. With this patch coremark score for CRIS (*with reload*) improves by less than 0.01% (a single "nop" is eliminated in core_state_transition, in an execution path that affects ~1/20 of all of the 10240 calls). However, the original cause for this patch is to not regress gcc.target/cris/pr93372-44.c for LRA, where otherwise a needless "cmpq" is emitted. For CRIS with LRA, the performance effect on coremark isn't even measurable, except by reducing the size of the executable due to affecting non-called library code. * config/cris/cris.md ("*add<mode>3_addi"): Improve to bail only for possible eliminable compares.
2023-03-28CRIS: Remove unused constraint "R".Hans-Peter Nilsson1-10/+0
* config/cris/constraints.md ("R"): Remove unused constraint.
2023-03-28Daily bump.GCC Administrator3-1/+82
2023-03-27gcov: Fix "subcomand" typos [PR109297]Jonathan Wakely1-3/+3
gcc/ChangeLog: PR gcov-profile/109297 * gcov-tool.cc (merge_usage): Fix "subcomand" typo. (merge_stream_usage): Likewise. (overlap_usage): Likewise.
2023-03-27tree-optimization/54498 - testcase for the bugRichard Biener1-0/+57
I realized I never added a testcase for the fix of this bug. Now done after verifying it still fails when reverting the fix. PR tree-optimization/54498 * g++.dg/torture/pr54498.C: New testcase.
2023-03-27tree-optimization/108357 - add testcaseRichard Biener1-0/+22
The following adds the testcase for the bug which was recently fixed. PR tree-optimization/108357 * gcc.dg/tree-ssa/pr108357.c: New testcase.
2023-03-27target/109296 - riscv: Add missing mode specifiers for XTheadMemPairChristoph Müllner1-8/+8
This patch adds missing mode specifiers for XTheadMemPair INSNs. gcc/ChangeLog: PR target/109296 * config/riscv/thead.md: Add missing mode specifiers. Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
2023-03-27aarch64: update ampere1 vectorization costPhilipp Tomsich1-6/+6
The original submission of AmpereOne (-mcpu=ampere1) costs occurred prior to exhaustive testing of vectorizable workloads against hardware. Adjust the vector costs to achieve the best results and more closely match the underlying hardware. gcc/ChangeLog: * config/aarch64/aarch64.cc: Update vector costs for ampere1. Co-Authored-By: Jiangning Liu <jiangning.liu@amperecomputing.com> Co-Authored-By: Manolis Tsamis <manolis.tsamis@vrull.eu>
2023-03-27fix: pytest errorMartin Liska1-1/+1
Fixes: gcc/testsuite/lib/verify-sarif-file.py:10:27: Q000 Double quotes found but single quotes preferred gcc/testsuite/ChangeLog: * lib/verify-sarif-file.py: Use apostrophes instead of double quotes.
2023-03-27rtl-optimization/109237 - speedup bb_is_just_returnRichard Biener1-1/+1
For the testcase bb_is_just_return is on top of the profile, changing it to walk BB insns backwards puts it off the profile. That's because in the forward walk you have to process possibly many debug insns but in a backward walk you very likely run into control insns first. PR rtl-optimization/109237 * cfgcleanup.cc (bb_is_just_return): Walk insns backwards.
2023-03-27lto/109263 - lto-wrapper and -g0 -ggdbRichard Biener1-0/+10
The following makes lto-wrapper deal with non-combined debug disabling / enabling option combinations properly. Interestingly -gno-dwarf also enables debug. PR lto/109263 * lto-wrapper.cc (run_gcc): Parse alternate debug options as well, they always enable debug.
2023-03-26rs6000: Make _mm_slli_si128 and _mm_bslli_si128 consistent [PR109167]Kewen Lin2-17/+56
As PR109167 shows, it's unexpected to have two different implementation ways for _mm_slli_si128 and _mm_bslli_si128, as gcc/config/i386/emmintrin.h they should be the same. So this patch is to fix it accordingly. PR target/109167 gcc/ChangeLog: * config/rs6000/emmintrin.h (_mm_bslli_si128): Move the implementation from ... (_mm_slli_si128): ... here. Change to call _mm_bslli_si128 directly. gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr109167.c: New test.
2023-03-26rs6000: Ensure vec_sld shift count in allowable range [PR109082]Kewen Lin2-3/+21
As PR109082 shows, some uses of vec_sld in emmintrin.h don't strictly guarantee the given shift count is in the range 0-15 (inclusive). This patch is to make the argument range constraint honored for those uses. PR target/109082 gcc/ChangeLog: * config/rs6000/emmintrin.h (_mm_bslli_si128): Check __N is not less than zero when calling vec_sld. (_mm_bsrli_si128): Return __A if __N is zero, check __N is bigger than zero when calling vec_sld. (_mm_slli_si128): Return __A if _imm5 is zero, check _imm5 is bigger than zero when calling vec_sld. gcc/testsuite/ChangeLog: * gcc.target/powerpc/pr109082.c: New test.
2023-03-27Docs, OpenMP: Correct internal documentation of OMP_FOR.Sandra Loosemore2-39/+113
gcc/ChangeLog: * doc/generic.texi (OpenMP): Document OMP_SIMD, OMP_DISTRIBUTE, OMP_TASKLOOP, and OMP_LOOP with OMP_FOR. Document how collapsed loops are represented and which fields are vectors. Add documentation for OMP_FOR_PRE_BODY field. Document internal form of non-rectangular loops and OMP_FOR_NON_RECTANGULAR. * tree.def (OMP_FOR): Make documentation consistent with the Texinfo manual, to fill some gaps and correct errors.
2023-03-27Daily bump.GCC Administrator3-1/+47
2023-03-26m68k: handle TLS access with offsetAndreas Schwab11-3/+102
This reinstates FINAL_PRESCAN_INSN, and the calls in handle_move_double, so that access to TLS variables with offset are properly handled. gcc: PR target/106282 * config/m68k/m68k.h (FINAL_PRESCAN_INSN): Define. * config/m68k/m68k.cc (m68k_final_prescan_insn): Define. (handle_move_double): Call it before handle_movsi. * config/m68k/m68k-protos.h: Declare it. gcc/testsuite: PR target/106282 * gcc.target/m68k/tls-gd-off.c: New. * gcc.target/m68k/tls-ie-off.c: New. * gcc.target/m68k/tls-ld-off.c: New. * gcc.target/m68k/tls-ld-xtls-off.c: New. * gcc.target/m68k/tls-le-off.c: New. * gcc.target/m68k/tls-le-xtls-off.c: New. * gcc.target/m68k/tls-ld.c: Make pattern less strict. * gcc.target/m68k/tls-le.c: Likewise.
2023-03-26match.pd: Fix up fneg/fadd simplification [PR109230]Jakub Jelinek2-0/+32
The following testcase is miscompiled on aarch64-linux. match.pd has a simplification for addsub, where it negates one of the vectors in twice as large floating point element vector (effectively negating every other element) and then doing addition. But a requirement for that is that the permutation picks the right elements, in particular 0, nelts+1, 2, nelts+3, 4, nelts+5, ... The pattern tests this with sel.series_p (0, 2, 0, 2) check, which as documented verifies that the even elements of the permutation mask are identity, but doesn't say anything about the others. The following patch fixes it by also checking that the odd elements start at nelts + 1 with the same step of 2. 2023-03-26 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/109230 * match.pd (fneg/fadd simplify): Verify also odd permutation indexes. * gcc.dg/pr109230.c: New test.
2023-03-26predict: Don't emit -Wsuggest-attribute=cold warning for functions which ↵Jakub Jelinek2-1/+22
already have that attribute [PR105685] In the following testcase, we predict baz to have cold entry regardless of the user supplied attribute (as it call unconditionally a cold function), but still issue a -Wsuggest-attribute=cold warning despite it having that attribute already. The following patch avoids that. 2023-03-26 Jakub Jelinek <jakub@redhat.com> PR ipa/105685 * predict.cc (compute_function_frequency): Don't call warn_function_cold if function already has cold attribute. * c-c++-common/cold-2.c: New test.
2023-03-26doc: Remove anachronistic note related to languages builtGerald Pfeifer1-7/+0
This is another instance of what ce51e8439a49 (and originally 05432288d4e5) addressed in a different part. We stopped shipping granular tarballs years ago. gcc/ChangeLog: * doc/install.texi: Remove anachronistic note related to languages built and separate source tarballs.
2023-03-26Daily bump.GCC Administrator4-1/+46
2023-03-25Fortran: remove dead code [PR104321]Harald Anlauf1-3/+0
gcc/fortran/ChangeLog: PR fortran/104321 * trans-decl.cc (gfc_conv_cfi_to_gfc): Remove dead code.
2023-03-24diagnostics: ensure that .sarif files are UTF-8 encoded [PR109098]David Malcolm17-61/+373
PR analyzer/109098 notes that the SARIF spec mandates that .sarif files are UTF-8 encoded, but -fdiagnostics-format=sarif-file naively assumes that the source files are UTF-8 encoded when quoting source artefacts in the .sarif output, which can lead to us writing out .sarif files with non-UTF-8 bytes in them (which break my reporting scripts). The root cause is that sarif_builder::maybe_make_artifact_content_object was using maybe_read_file to load the file content as bytes, and assuming they were UTF-8 encoded. This patch reworks both overloads of this function (one used for the whole file, the other for snippets of quoted lines) so that they go through input.cc's file cache, which attempts to decode the input files according to the input charset, and then encode as UTF-8. They also check that the result actually is UTF-8, for cases where the input charset is missing, or incorrectly specified, and omit the quoted source for such awkward cases. Doing so fixes all of the cases I've encountered. The patch adds a new: { dg-final { verify-sarif-file } } directive to all SARIF test cases in the test suite, which verifies that the output is UTF-8 encoded, and is valid JSON. In particular it verifies that when we complain about encoding problems, the .sarif report we emit is itself correctly encoded. gcc/ChangeLog: PR analyzer/109098 * diagnostic-format-sarif.cc (read_until_eof): Delete. (maybe_read_file): Delete. (sarif_builder::maybe_make_artifact_content_object): Use get_source_file_content rather than maybe_read_file. Reject it if it's not valid UTF-8. * input.cc (file_cache_slot::get_full_file_content): New. (get_source_file_content): New. (selftest::check_cpp_valid_utf8_p): New. (selftest::test_cpp_valid_utf8_p): New. (selftest::input_cc_tests): Call selftest::test_cpp_valid_utf8_p. * input.h (get_source_file_content): New prototype. gcc/testsuite/ChangeLog: PR analyzer/109098 * c-c++-common/diagnostic-format-sarif-file-1.c: Add verify-sarif-file directive. * c-c++-common/diagnostic-format-sarif-file-2.c: Likewise. * c-c++-common/diagnostic-format-sarif-file-3.c: Likewise. * c-c++-common/diagnostic-format-sarif-file-4.c: Likewise. * c-c++-common/diagnostic-format-sarif-file-Wbidi-chars.c: New test case, adapted from Wbidi-chars-1.c. * c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-1.c: New test case. * c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-2.c: New test case. * c-c++-common/diagnostic-format-sarif-file-bad-utf8-pr109098-3.c: New test case, adapted from cpp/Winvalid-utf8-1.c. * c-c++-common/diagnostic-format-sarif-file-valid-CP850.c: New test case, adapted from gcc.dg/diagnostic-input-charset-1.c. * gcc.dg/plugin/crash-test-ice-sarif.c: Add verify-sarif-file directive. * gcc.dg/plugin/crash-test-write-though-null-sarif.c: Likewise. * gcc.dg/plugin/diagnostic-test-paths-5.c: Likewise. * lib/scansarif.exp (verify-sarif-file): New procedure. * lib/verify-sarif-file.py: New support script. libcpp/ChangeLog: PR analyzer/109098 * charset.cc (cpp_valid_utf8_p): New function. * include/cpplib.h (cpp_valid_utf8_p): New prototype. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2023-03-25Daily bump.GCC Administrator6-1/+167
2023-03-24docs, analyzer: improvements to "Debugging the Analyzer"David Malcolm1-9/+116
gcc/ChangeLog: * doc/analyzer.texi (Debugging the Analyzer): Add notes on useful debugging options. (Special Functions for Debugging the Analyzer): Convert to a table, and rewrite in places. (Other Debugging Techniques): Add notes on how to compare two different exploded graphs. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2023-03-24go: Fix up go.test/test/fixedbugs/bug207.go failure [PR109258]Jakub Jelinek1-1/+11
The PR109086 r13-6690 inline_string_cmp change to if (diff != result) emit_move_insn (result, diff); regressed FAIL: go.test/test/fixedbugs/bug207.go, -O2 -g (internal compiler error: in emit_move_insn, at expr.cc:4224) The problem is the Go FE doesn't mark __builtin_memcmp as pure as other FEs, so we ended up with __builtin_memcmp (whatever, whateverelse, somesize); in the IL before expansion and the expansion ICEd on it. As the builtin calls a library function which is pure or is inline expanded as such, not marking it pure is an unnecessary pessimization from the FE side, keeping such dead calls in the IL if they aren't needed will not help anything. The following patch fixes that. Initially I've added just DECL_PURE_P to it, but that unfortunately broke bootstrap, for __builtin_memcmp there is also __builtin_memcmp_eq registered by the middle-end code if not registered earlier and that one is registered with the usual flags (pure, nothrow, leaf), so if __builtin_memcmp from FE was just pure, it would appear in the IL as that it can raise exceptions and when folded into __builtin_memcmp_eq all of sudden it couldn't and we'd ICE in verification. I think tons of functions should have builtin_nothrow as well, but changing that wasn't necessary for this fix. 2023-03-24 Jakub Jelinek <jakub@redhat.com> PR middle-end/109258 * go-gcc.cc (Gcc_backend): Add new static data members builtin_pure and builtin_nothrow. (Gcc_backend::Gcc_backend): Pass builtin_pure | builtin_nothrow for BUILT_IN_MEMCMP. (Gcc_backend::define_builtin): Handle builtin_pure and builtin_nothrow in flags.
2023-03-24Fortran: fix FE memleak with BOZ expressions.Harald Anlauf1-0/+4
gcc/fortran/ChangeLog: * expr.cc (free_expr0): Free also BOZ strings as part of an expression.
2023-03-24c++: outer 'this' leaking into local class [PR106969]Patrick Palka3-5/+32
Here when resolving the implicit object for '&wrapped' within the local class Foo, we expect to obtain a dummy object of type Foo& since there's no 'this' available in this context. And yet at this point current_class_ref still corresponds to the outer class Context (and is const), which confuses maybe_dummy_object into propagating the cv-quals of current_class_ref and returning an object of type const Foo&. Thus decltype(&wrapped) wrongly yields const int* instead of int*. The problem ultimately seems to be that the 'this' from the enclosing class appears available for use when parsing the local class, but 'this' shouldn't persist across classes like that. This patch fixes this by clearing current_class_ptr/ref before parsing a class definition. After this change, for the test name-clash11.C in C++98 mode we would now complain about an invalid use of 'this' in e.g. ASSERT (sizeof (this->A) == 16); due to the way the test defines the ASSERT macro via a local class. This patch redefines the macro using a local typedef instead. PR c++/106969 gcc/cp/ChangeLog: * parser.cc (cp_parser_class_specifier): Clear current_class_ptr and current_class_ref sooner, before parsing a class definition. gcc/testsuite/ChangeLog: * g++.dg/lookup/name-clash11.C: Fix ASSERT macro definition in C++98 mode. * g++.dg/lookup/this2.C: New test.
2023-03-24c++: default template arg, partial ordering [PR105481]Jason Merrill2-4/+22
The default argument code in type_unification_real was assuming that all targs we've deduced by that point are non-dependent, but that's not the case for partial ordering. PR c++/105481 gcc/cp/ChangeLog: * pt.cc (type_unification_real): Adjust for partial ordering. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/fntmpdefarg-partial1.C: New test.
2023-03-24json: preserve key-insertion order [PR109163]David Malcolm8-70/+95
PR other/109163 notes that when we write out JSON files, we traverse the keys within each object via hash_map iteration, and thus the ordering is non-deterministic - it can arbitrarily vary from run to run and from different machines, making it harder for users to compare results and determine if anything has "really" changed. I'm running into this issue with SARIF output, but there are several places where we're currently emitting JSON: * -fsave-optimization-record emits SRCFILE.opt-record.json.gz "This option is experimental and the format of the data within the compressed JSON file is subject to change."; see optinfo-emit-json.{h,cc}, dumpfile.cc, etc * -fdiagnostics-format= with the various "sarif" and "json" options * -fdump-analyzer-json is a developer option in the analyzer * gcov has: "-j, --json-format: Output JSON intermediate format into .gcov.json.gz file" This patch adds an auto_vec to class json::object to preserve key-insertion order, and use it when writing out objects. Potentially this slightly slows down JSON output, but I believe that this isn't normally a bottleneck, and that the benefits to the user of deterministic output are worth it. I had first attempted to use ordered_hash_map.h for this, but ran into impenetrable template errors, so this patch uses a simpler approach of just adding an auto_vec to json::object. Testing showed a failure of diagnostic-format-json-5.c, which was using a convoluted set of regexps to consume the output; I believe that this was brittle, and was intermittently failing for some of the random orderings of output. I rewrote these regexps to work with the expected output order. The other such tests seem to pass with the now-deterministic orderings. gcc/ChangeLog: PR other/109163 * json.cc: Update comments to indicate that we now preserve insertion order of keys within objects. (object::print): Traverse keys in insertion order. (object::set): Preserve insertion order of keys. (selftest::test_writing_objects): Add an additional key to verify that we preserve insertion order. * json.h (object::m_keys): New field. gcc/testsuite/ChangeLog: PR other/109163 * c-c++-common/diagnostic-format-json-1.c: Update comment. * c-c++-common/diagnostic-format-json-2.c: Likewise. * c-c++-common/diagnostic-format-json-3.c: Likewise. * c-c++-common/diagnostic-format-json-4.c: Likewise. * c-c++-common/diagnostic-format-json-5.c: Rewrite regexps. * c-c++-common/diagnostic-format-json-stderr-1.c: Update comment. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2023-03-24Ranger cache dominator queries should ignore backedges.Andrew MacLeod2-0/+21
When querying dominators for cache values, ignore back edges in read-only mode. PR tree-optimization/109238 gcc/ * gimple-range-cache.cc (ranger_cache::resolve_dom): Ignore predecessors which this block dominates. gcc/testsuite/ * gcc.dg/pr109238.c: New.
2023-03-24tree-optimization/106912 - clear const attribute from fntypeRichard Biener2-10/+49
The following makes sure that after clearing pure/const from instrumented function declarations we are adjusting call statements fntype as well to handle indirect calls and because gimple_call_flags looks at both decl and fntype. Like the pure/const flag clearing on decls we refrain from touching calls to known functions that do not have a body in the current TU. PR tree-optimization/106912 * tree-profile.cc (tree_profiling): Update stmts only when profiling or testing coverage. Make sure to update calls fntype, stripping 'const' there. * gcc.dg/profile-generate-4.c: New testcase.
2023-03-24modula2: Enable iso-extended-opaque-run-pass.exp to build library testsGaius Mulley1-2/+4
This patch fixes the tcl test script iso-extended-opaque-run-pass.exp so that the test library modules are built and included with the link command. gcc/testsuite/ChangeLog: * gm2/projects/iso/small/run/pass/iso-extended-opaque-run-pass.exp: Compile object for stressset.mod and testlib.mod. Add test so that we only link these objects with test application objects. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2023-03-24builtins: Fix up ICE in inline_string_cmp [PR109258]Jakub Jelinek1-2/+2
The PR109086 r13-6690 inline_string_cmp change to if (diff != result) emit_move_insn (result, diff); regressed FAIL: go.test/test/fixedbugs/bug207.go, -O2 -g (internal compiler error: in emit_move_insn, at expr.cc:4224) The problem is the Go FE doesn't mark __builtin_memcmp as pure (I'll also send patch for that) and so result is const0_rtx when the call lost its lhs and the above move ICEs because moving something into const0_rtx is obviously invalid. I think it is better not to rely on all FEs having these *cmp functions pure anD DCE being performed. The following patch just punts from the inline expansion in that case, so we just emit normal library call. 2023-03-24 Jakub Jelinek <jakub@redhat.com> PR middle-end/109258 * builtins.cc (inline_expand_builtin_bytecmp): Return NULL_RTX early if target == const0_rtx.
2023-03-24testsuite: Fix up gcc.target/i386/pr109137.c testcase [PR109137]Jakub Jelinek1-5/+6
The testcase has a couple of small problems: 1) had -m32 in dg-options, that should never be done, instead the test should be guarded on ia32 2) adds -fPIC unconditionally (that should be guarded on fpic effective target) 3) using #include <string.h> for a RA test seems unnecessary, __builtin_memset handles it without the header 2023-03-24 Jakub Jelinek <jakub@redhat.com> PR target/109137 * gcc.target/i386/pr109137.c: Remove -m32 from dg-options, instead require ia32 effective target. Only add -fPIC for fpic effective target. Remove #include <string.h>, use __builtin_memset instead of memset.
2023-03-24testsuite: Add testcase for already fixed PR [PR99739]Jakub Jelinek1-0/+40
This PR was fixed by r13-1268-g8c99e307b20, I'm adding testcase to make sure we don't regress on it in the future. 2023-03-24 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/99739 * gcc.dg/tree-ssa/pr99739.c: New test.
2023-03-24[testsuite] test for weak_undefined support and add optionsAlexandre Oliva8-45/+54
A number of tests that depend on weak undefined symbols fail to require that support, and arrange to skip some targets and add special options to others on a test-by-test basis. Fix this by stating the requirement explicitly, and adding a proc to return any required options. Others rely on weak undefined symbols only to test for the availability of posix_memalign. Drop that in favor of dg effective target support for posix_memalign. for gcc/ChangeLog * doc/sourcebuild.texi (weak_undefined, posix_memalign): Document options and effective targets. for gcc/testsuite/ChangeLog * lib/target-supports.exp (add_options_for_weak_undefined): New. (check_effective_target_weak_undefined): Use it. (check_effective_target_posix_memalign): New. * gcc.dg/torture/pr53922.c: Drop skips and custom options in favor of effective target requirement and added options for weak_undefined symbols. * gcc.dg/torture/pr90020.c: Likewise. * gcc.dg/addr_equal-1.c: Likewise. * gcc.target/aarch64/aapcs64/aapcs64.exp: Likewise, for abitest.S-using tests. * gcc.dg/torture/pr60092.c: Likewise, but in favor of posix_memalign tests. * gcc.dg/vect/vect-tail-nomask-1.c: Likewise.
2023-03-24Fortran: Escalate failure when Hollerith constant to real conversion failsHaochen Gui8-9/+47
gcc/fortran/ PR target/103628 * target-memory.cc (gfc_interpret_float): Return FAIL when native_interpret_expr gets a NULL tree. * arith.cc (gfc_hollerith2real): Return NULL when gfc_interpret_float fails. * error.cc (gfc_buffered_p): Define. * gfortran.h (gfc_buffered_p): Declare. * intrinsic.cc: Add diagnostic.h to include list. (do_simplify): Save errorcount and check it at finish. Report a "Cannot simplify expression" error on a bad result if error count doesn't change and no other errors buffered. gcc/testsuite/ PR target/103628 * gfortran.dg/assumed_size_refs_2.f90: Check "Cannot simplify expression" error. * gfortran.dg/unpack_field_1.f90: Likewise. * gfortran.dg/pr103628.f90: New. Co-Authored-By: Tobias Burnus <tobias@codesourcery.com>
2023-03-24Fix native MSYS2 build failure [PR108865, PR109188]Costas Argyris1-1/+1
Don't cause an error if the symbol is not found. When building natively as an MSYS2 package, some executables are borrowing the $(COMPILERS) flags and --require-defined=HOST_EXTRA_OBJS_SYMBOL is causing them to fail. These executables don't need that symbol, so make it optional such that they don't error out. The compilers will still look for it (and find it) with the desired effect of getting UTF-8 support. PR/PR108865 gcc/ChangeLog: * config/i386/x-mingw32-utf8: Make HOST_EXTRA_OBJS_SYMBOL optional. Signed-off-by: Jonathan Yong <10walls@gmail.com>
2023-03-24Daily bump.GCC Administrator5-1/+442
2023-03-23c++: constexpr PMF conversion [PR105996]Jason Merrill2-8/+18
Here, we were calling build_reinterpret_cast regardless of whether there was actually a cast, and that now sets REINTERPRET_CAST_P. But that optimization seems dodgy anyway, as it involves NOP_EXPR from one RECORD_TYPE to another and we try to reserve NOP_EXPR for fundamental types. And the generated code seems the same, so let's drop it. And also strip location wrappers. PR c++/105996 gcc/cp/ChangeLog: * typeck.cc (build_ptrmemfunc): Drop 0-offset optimization and location wrappers. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/constexpr-pmf3.C: New test.
2023-03-23testsuite: Xfail gcc.dg/tree-ssa/ssa-fre-100.c for ! natural_alignment_32Hans-Peter Nilsson1-1/+1
The test gcc.dg/tree-ssa/ssa-fre-100.c fails the scan-tree-dump-not fre1 "baz" for at least m68k-linux, pru-elf, and cris-elf according to posts on gcc-testresults. GCC requires int-size-alignment for a target to see through the "int *" dereference and perform value-numbering. See comments in PR91419 and also the recent patch to gcc.dg/tree-ssa/pr100359.c. This is a flaw in gcc rather than the target, so prefer an xfail rather than skipping the test. * gcc.dg/tree-ssa/ssa-fre-100.c: XFAIL for ! natural_alignment_32.
2023-03-23testsuite: Compile-only gcc.dg/tree-ssa/pr100359.c if ! natural_alignment_32Hans-Peter Nilsson1-1/+2
The test gcc.dg/tree-ssa/pr100359.c fails the "test for excess errors" for at least m68k-linux, pru-elf, and cris-elf according to posts on gcc-testresults. For cris-elf, the "excess errors" is a failure to link; an undefined reference to foo, because the code has a call to an extern function foo, which is not optimized away, and which is not defined. I guess it's the same for those other targets. From comparative gdb sessions for native x86_64-linux and cris-elf, I see tree-ssa-sccvn.cc:vn_reference_lookup_3 (called from the "pre" pass) requires int-size-alignment for a target to see through the "int *" dereference, that the expression is constant false and subsequently optimize away the call to foo. The conclusion is with substantially less effort available from comments in PR91419. The point of the test seems only incidental to optimizing-out the call to foo, judging from the comments in PR100359, so an alternative is compile it (not link it) for all targets. However, I chose to not change the nature of the test where it passes. * gcc.dg/tree-ssa/pr100359.c: Compile-only for ! natural_alignment_32.
2023-03-23Don't force target of modulo into a distinct register.Pat Haugen3-6/+47
The define_insns for the modulo operation currently force the target register to a distinct reg in preparation for a possible future peephole combining div/mod. But this can lead to cases of a needless copy being inserted. Fixed with the following patch. gcc/ * config/rs6000/rs6000.md (*mod<mode>3, umod<mode>3): Add non-earlyclobber alternative. gcc/testsuite/ * gcc.target/powerpc/mod-no_copy.c: New. * gcc.target/powerpc/mod-peephole.c: New.
2023-03-23c: [PR84900] cast of compound literal does not cause the code to become a ↵Andrew Pinski2-0/+10
non-lvalue The problem here is after r0-92187-g2ec5deb5c3146c, maybe_lvalue_p would return false for compound literals which causes non_lvalue_loc not to wrap the expression with a NON_LVALUE_EXPR unlike before when it return true as it returns true for all language specific tree codes. This fixes that oversight and fixes the testcase to have the cast as a non-lvalue. Committed to the trunk as obvious after a bootstrap/test on x86_64-linux-gnu. PR c/84900 gcc/ChangeLog: * fold-const.cc (maybe_lvalue_p): Treat COMPOUND_LITERAL_EXPR as a lvalue. gcc/testsuite/ChangeLog: * gcc.dg/compound-literal-cast-lvalue-1.c: New test.
2023-03-23PR modula2/109264 Bugfix resolve opaque types containing setsGaius Mulley17-80/+392
Resolve opaque type handling. The bug is caused by the compiler attempting to resolve the meta types of a constant constructor. It incorrectly attempts to get the type on an enumeration type (resulting in NulSym) which causes the meta resolver to spin. Some PHBuild rules (building records need to be copied from P3Build so that hidden types are resolved in order across the compile. gcc/m2/ChangeLog: PR modula2/109264 * gm2-compiler/M2Quads.mod (BuildConstFunctionCall): Comment out ErrorString in debugging block. (BuildConstructorStart): Replace Assert with a call to MetaErrorT3. Import MetaErrorT3. * gm2-compiler/PCSymBuild.mod (buildConstFunction): Rename local variables. (WalkFunctionParam): Remove test for IsEnumeration when resolving MIN or MAX parameters. * gm2-compiler/PHBuild.bnf (BlockAssert): New procedure. (ErrorArrayat): New procedure. (Expect): Renamed parameter t to tok. (PushQualident): New rule. (ConstSetOrQualidentOrFunction): Force AutoOn. (TypeDeclaration): Add debugging assert. (SimpleType): Add debugging assert. (DefaultRecordAttributes): New rule (and bugfix). (FieldPragmaExpression): New rule (and bugfix). (PragmaConstExpression): New rule (and bugfix). (SetOrDesignatorOrFunction): Add debugging assert. (Block): Add debugging assert. * gm2-gcc/m2expr.cc (m2expr_ConstantExpressionWarning): int to bool. * gm2-gcc/m2expr.h (m2expr_TreeOverflow): int to bool. (m2expr_GetBooleanTrue): Remove. (m2expr_GetBooleanFalse): Remove. * gm2-gcc/m2options.h (M2Options_SetStatistics): Replace int with bool. gcc/testsuite/ChangeLog: PR modula2/109264 * gm2/iso/extended-opaque/pass/iso-extended-opaque-pass.exp: New test. * gm2/iso/extended-opaque/pass/stressset.def: New test. * gm2/iso/extended-opaque/pass/stressset.mod: New test. * gm2/iso/extended-opaque/pass/testset.mod: New test. * gm2/projects/iso/small/run/pass/iso-extended-opaque-run-pass.exp: New test. * gm2/projects/iso/small/run/pass/stressset.def: New test. * gm2/projects/iso/small/run/pass/stressset.mod: New test. * gm2/projects/iso/small/run/pass/test1.mod: New test. * gm2/projects/iso/small/run/pass/testlib.def: New test. * gm2/projects/iso/small/run/pass/testlib.mod: New test. * gm2/projects/iso/small/run/pass/testset.mod: New test. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
2023-03-23tree-optimization/107569 - avoid wrecking earlier folding in FRE/PRERichard Biener2-6/+40
The following avoids picking up dead code left over from folding during FRE/PRE, effectively undoing propagations. PR tree-optimization/107569 * tree-ssa-sccvn.cc (eliminate_dom_walker::eliminate_stmt): Do not push SSA names with zero uses as available leader. (process_bb): Likewise. * g++.dg/opt/pr107569.C: New testcase.
2023-03-23tree-optimization/109262 - ICE with non-call EH and forwpropRichard Biener2-8/+38
The recent combining of complex part loads to a complex load missed to account for non-call EH. PR tree-optimization/109262 * tree-ssa-forwprop.cc (pass_forwprop::execute): When combining a piecewise complex load avoid touching loads that throw internally. Use fun, not cfun throughout. * g++.dg/torture/pr109262.C: New testcase.
2023-03-23ranger: Ranger meets aspellJakub Jelinek25-106/+106
I've noticed a comment typo in tree-vrp.cc and decided to quickly skim aspell -c on the ranger sources (with quick I on everything that looked ok or roughly ok). But not being a native English speaker, I could get stuff wrong. 2023-03-23 Jakub Jelinek <jakub@redhat.com> * value-range.cc (irange::irange_union, irange::intersect): Fix comment spelling bugs. * gimple-range-trace.cc (range_tracer::do_header): Likewise. * gimple-range-trace.h: Likewise. * gimple-range-edge.cc: Likewise. (gimple_outgoing_range_stmt_p, gimple_outgoing_range::switch_edge_range, gimple_outgoing_range::edge_range_p): Likewise. * gimple-range.cc (gimple_ranger::prefill_stmt_dependencies, gimple_ranger::fold_stmt, gimple_ranger::register_transitive_infer, assume_query::assume_query, assume_query::calculate_phi): Likewise. * gimple-range-edge.h: Likewise. * value-range.h (Value_Range::set, Value_Range::lower_bound, Value_Range::upper_bound, frange::set_undefined): Likewise. * gimple-range-gori.h (range_def_chain::depend, gori_map::m_outgoing, gori_compute): Likewise. * gimple-range-fold.h (fold_using_range): Likewise. * gimple-range-path.cc (path_range_query::compute_ranges_in_phis): Likewise. * gimple-range-gori.cc (range_def_chain::in_chain_p, range_def_chain::dump, gori_map::calculate_gori, gori_compute::compute_operand_range_switch, gori_compute::logical_combine, gori_compute::refine_using_relation, gori_compute::compute_operand1_range, gori_compute::may_recompute_p): Likewise. * gimple-range.h: Likewise. (enable_ranger): Likewise. * range-op.h (empty_range_varying): Likewise. * value-query.h (value_query): Likewise. * gimple-range-cache.cc (block_range_cache::set_bb_range, block_range_cache::dump, ssa_global_cache::clear_global_range, temporal_cache::temporal_value, temporal_cache::current_p, ranger_cache::range_of_def, ranger_cache::propagate_updated_value, ranger_cache::range_from_dom, ranger_cache::register_inferred_value): Likewise. * gimple-range-fold.cc (fur_edge::get_phi_operand, fur_stmt::get_operand, gimple_range_adjustment, fold_using_range::range_of_phi, fold_using_range::relation_fold_and_or): Likewise. * value-range-storage.h (irange_storage_slot::MAX_INTS): Likewise. * value-query.cc (range_query::value_of_expr, range_query::value_on_edge, range_query::query_relation): Likewise. * tree-vrp.cc (remove_unreachable::remove_and_update_globals, intersect_range_with_nonzero_bits): Likewise. * gimple-range-infer.cc (gimple_infer_range::check_assume_func, exit_range): Likewise. * value-relation.h: Likewise. (equiv_oracle, relation_trio::relation_trio, value_relation, value_relation::value_relation, pe_min): Likewise. * range-op-float.cc (range_operator_float::rv_fold, frange_arithmetic, foperator_unordered_equal::op1_range, foperator_div::rv_fold): Likewise. * gimple-range-op.cc (cfn_clz::fold_range): Likewise. * value-relation.cc (equiv_oracle::query_relation, equiv_oracle::register_equiv, equiv_oracle::add_equiv_to_block, value_relation::apply_transitive, relation_chain_head::find_relation, dom_oracle::query_relation, dom_oracle::find_relation_block, dom_oracle::find_relation_dom, path_oracle::register_equiv): Likewise. * range-op.cc (range_operator::wi_fold_in_parts_equiv, create_possibly_reversed_range, adjust_op1_for_overflow, operator_mult::wi_fold, operator_exact_divide::op1_range, operator_cast::lhs_op1_relation, operator_cast::fold_pair, operator_cast::fold_range, operator_abs::wi_fold, range_op_cast_tests, range_op_lshift_tests): Likewise.
2023-03-23Skip gnat.dg/div_zero.adb on Aarch64Eric Botcazou1-1/+1
gcc/testsuite/ * gnat.dg/div_zero.adb: Skip for aarch64*-*-* targets.
2023-03-23c++: further -Wdangling-reference refinement [PR107532]Marek Polacek3-26/+72
Based on <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107532#c24>, it seems like we should treat *any* class with a reference member as a reference wrapper. To suppress the warning in int i = 42; auto const& v = std::get<0>(std::tuple<int&>(i)); we have to look into base classes as well. For std::tuple, this means that we have to check the _Head_base subobject, which is a non-direct base class of std::tuple. So I've employed a DFS walk. PR c++/107532 gcc/cp/ChangeLog: * call.cc (class_has_reference_member_p): New. (class_has_reference_member_p_r): New. (reference_like_class_p): Don't look for a specific constructor. Use a DFS walk with class_has_reference_member_p_r. gcc/testsuite/ChangeLog: * g++.dg/warn/Wdangling-reference11.C: New test. * g++.dg/warn/Wdangling-reference12.C: New test.