aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
AgeCommit message (Collapse)AuthorFilesLines
2021-09-13Merged current trunk to branch.Thomas Koenig5534-33462/+190545
2021-01-17Add test cases for atomic subroutines, remove atomics from TODO.Thomas Koenig3-0/+89
libgfortran/ChangeLog: * caf_shared/README.native_coarrays: Remove atomics from list of unsupported features.
2021-01-05Fix CO_REDUCE with RESULT_IMAGE.Thomas Koenig1-0/+24
gcc/fortran/ChangeLog: * trans-array.c (gfc_conv_ss_descriptor): Use correct ref. * trans-intrinsic.c (trans_argument): Use gfc_conv_expr_reference. * trans-decl.c (gfc_build_builtin_function_decls): Correct spec for array. libgfortran/ChangeLog: * caf_shared/collective_subroutine.c (collsub_reduce_array): Fix off by one error for result. gcc/testsuite/ChangeLog: * gfortran.dg/caf-shared/co_reduce_1.f90: New test.
2021-01-03Merge branch 'master' into devel/coarray_nativeThomas Koenig4731-23820/+115961
2021-01-01Make SYNC IMAGES(*) work by handling size of -1 in library.Thomas Koenig2-0/+18
libgfortran/ChangeLog: * caf_shared/sync.c (sync_table): Change size argument and index to int. * caf_shared/sync.h (sync_table): Adjust prototype. * caf_shared/wrapper.c (cas_sync_images): Add s argument to int, adjust call to sync_table. gcc/testsuite/ChangeLog: * gfortran.dg/caf-shared/sync_images_1.f90: New test. * gfortran.dg/caf-shared/sync_images_2.f90: New test.
2020-12-31match.pd: Add clz(X) == 0 -> (int)X < 0 etc. simpifications [PR94802]Jakub Jelinek1-0/+68
The following patch adds some clz simplifications. If clz is 0, then the MSB of the argument is set, and if clz is prec-1, then the argument is 1. 2020-12-31 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94802 * match.pd (clz(X) == 0 -> (int)X < 0): New simplification. (clz(X) == (prec-1) -> X == 1): Likewise. * gcc.dg/tree-ssa/pr94802-1.c: New test.
2020-12-31match.pd: Add (-(X < 0) | 1) * X -> abs (X) etc. simplifications [PR94785]Jakub Jelinek1-0/+36
The following patch adds two simplifications to recognize idioms for ABS_EXPR resp. ABSU_EXPR. 2020-12-31 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/94785 * match.pd ((-(X < 0) | 1) * X -> abs (X)): New simplification. ((-(X < 0) | 1U) * X -> absu (X)): Likewise. * gcc.dg/tree-ssa/pr94785.c: New test.
2020-12-31wide-int: Fix wi::to_mpz [PR98474]Jakub Jelinek1-0/+30
The following testcase is miscompiled, because niter analysis miscomputes the number of iterations to 0. The problem is that niter analysis uses mpz_t (wonder why, wouldn't widest_int do the same job?) and when wi::to_mpz is called e.g. on the TYPE_MAX_VALUE of __uint128_t, it initializes the mpz_t result with wrong value. wi::to_mpz has code to handle negative wide_ints in signed types by inverting all bits, importing to mpz and complementing it, which is fine, but doesn't handle correctly the case when the wide_int's len (times HOST_BITS_PER_WIDE_INT) is smaller than precision when wi::neg_p. E.g. the 0xffffffffffffffffffffffffffffffff TYPE_MAX_VALUE is represented in wide_int as 0xffffffffffffffff len 1, and wi::to_mpz would create 0xffffffffffffffff mpz_t value from that. This patch handles it by adding the needed -1 host wide int words (and has also code to deal with precision that aren't multiple of HOST_BITS_PER_WIDE_INT). 2020-12-31 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/98474 * wide-int.cc (wi::to_mpz): If wide_int has MSB set, but type is unsigned and excess negative, append set bits after len until precision. * gcc.c-torture/execute/pr98474.c: New test.
2020-12-31fold-const: Avoid (cast) ((cast2) x p+ y) folding for -fsanitize=alignment ↵Jakub Jelinek1-0/+31
[PR98206] The following testcase is diagnosed by UBSan as invalid, even when it is valid. We have a derived type Base2 at offset 1 with alignment 1 and do: (const Derived &) ((const Base2 *) this + -1) but the folder before ubsan in the FE gets a chance to instrument it optimizes that into: (const Derived &) this + -1 and so we require that this has 8-byte alignment which Derived class needs. Fixed by avoiding such an optimization when -fsanitize=alignment is in effect if it would affect the alignments (and guarded with !in_gimple_form because we don't really care during GIMPLE, though pointer conversions are useless then and so such folding isn't needed very much during GIMPLE). 2020-12-31 Jakub Jelinek <jakub@redhat.com> PR c++/98206 * fold-const.c: Include asan.h. (fold_unary_loc): Don't optimize (ptr_type) (((ptr_type2) x) p+ y) into ((ptr_type) x) p+ y if sanitizing alignment in GENERIC and ptr_type points to type with higher alignment than ptr_type2. * g++.dg/ubsan/align-4.C: New test.
2020-12-31reassoc: Optimize x > 0x1fff || y > 0x1fff into (x | y) > 0x1fff [PR56719]Jakub Jelinek1-0/+33
The following patch adds an optimization mentioned in PR56719 #c8. We already have the x != 0 && y != 0 && z != 0 into (x | y | z) != 0 and x != -1 && y != -1 && y != -1 into (x & y & z) != -1 optimizations, this patch just extends that to x < C && y < C && z < C for power of two constants C into (x | y | z) < C (for unsigned comparisons). I didn't want to create too many buckets (there can be TYPE_PRECISION such constants), so the patch instead just uses one buckets for all such constants and loops over that bucket up to TYPE_PRECISION times. 2020-12-31 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/56719 * tree-ssa-reassoc.c (optimize_range_tests_cmp_bitwise): Also optimize x < C && y < C && z < C when C is a power of two constant into (x | y | z) < C. * gcc.dg/tree-ssa/pr56719.c: New test.
2020-12-31d: Mangled Symbols now back reference types and identifiersIain Buclaw8-62/+158
Symbols with extern(D) linkage are now mangled using back references to types and identifiers if these occur more than once in the mangled name as emitted before. This reduces symbol length, especially with chained expressions of templated functions with Voldemort return types. For example, the average symbol length of the 127000+ symbols created by a libphobos unittest build is reduced by a factor of about 3, while the longest symbol shrinks from 416133 to 1142 characters. Reviewed-on: https://github.com/dlang/dmd/pull/12079 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 2bd4fc3fe.
2020-12-31Daily bump.GCC Administrator1-0/+6
2020-12-30Make STAT and ERRMSG work on ALLOCATE, move error handling to library.Thomas Koenig4-1/+55
This makes STAT and ERRMSG work on ALLOCATE. It also separates the allocation of coarrays into two functions: One without error checking, which is called by compiler-generated code, and one with error checking for call from user code. In the course of looking at this, it was also noticed that allocatable coarrays were not automatically deallocated; this is now also fixed. Also, saved allocatable coarrays are now saved. gcc/fortran/ChangeLog: * trans-array.c (gfc_allocate_shared_coarray): Remove extra arguments, just build the call. (allocate_shared_coarray_chk): New function. (gfc_array_allocate): Adjust where to set the offset. Error handling is done in the library for shared coarrays. (gfc_trans_deferred_array): No early return for allocatable shared coarrays. * trans-array.h (gfc_array_allocate): Adjust prototype. (gfc_allocate_shared_coarray): Likewise. * trans-decl.c: Rename gfor_fndecl_cas_coarray_allocate to gfor_fndecl_cas_coarray_alloc for brevity. Add gfor_fndecl_cas_coarray_alloc_chk. (gfc_build_builtin_function_decls): Likewise. (gfc_trans_shared_coarray): Adjust calling sequence for gfc_allocate_shared_coarray. (gfc_trans_deferred_vars): Correct handling of saved allocatable shared coarrays. * trans-stmt.c (gfc_trans_sync): Adjust whitespace.o (coarray_alloc_p): Remove. (gfc_trans_allocate): Add shared_coarray variable to adjust status and errmsg handling. * trans.h: Rename gfor_fndecl_cas_coarray_allocate to gfor_fndecl_cas_coarray_alloc for brevity. Add gfor_fndecl_cas_coarray_alloc_chk. libgfortran/ChangeLog: * caf_shared/coarraynative.c (test_for_cas_errors): Correct handling of stat. * caf_shared/libcoarraynative.h (STAT_ERRMSG_ENTRY_CHECK): Use unlikely in condition. (STAT_ERRMSG_ENTRY_CHECK_RET): Likewise. * caf_shared/wrapper.c (cas_coarray_alloc): Adjust arguments. Call cas_coarray_alloc_work. (cas_coarray_alloc_chk): New function. (cas_coarray_alloc_work): New function. gcc/testsuite/ChangeLog: * gfortran.dg/caf-shared/allocate_1.f90: Adjust number of calls to sync_all. * gfortran.dg/caf-shared/allocate_status_1.f90: New test. * gfortran.dg/caf-shared/automatic_deallocate_1.f90: New test. * gfortran.dg/caf-shared/save_allocatable_1.f90: New test.
2020-12-30i386: Optimize pmovmskb on inverted vector to inversion of pmovmskb result ↵Jakub Jelinek2-0/+104
[PR98461] The following patch adds combine splitters to optimize: - vpcmpeqd %ymm1, %ymm1, %ymm1 - vpandn %ymm1, %ymm0, %ymm0 vpmovmskb %ymm0, %eax + notl %eax etc. (for vectors with less than 32 elements with xorl instead of notl). 2020-12-30 Jakub Jelinek <jakub@redhat.com> PR target/98461 * config/i386/sse.md (<sse2_avx2>_pmovmskb): Add splitters for pmovmskb of NOT vector. * gcc.target/i386/sse2-pr98461.c: New test. * gcc.target/i386/avx2-pr98461.c: New test.
2020-12-30Daily bump.GCC Administrator1-0/+18
2020-12-29Fortran: Correct missing structure constructor comps. [PR97612].Paul Thomas1-0/+21
2020-12-29 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/97612 * primary.c (build_actual_constructor): Missing allocatable components are set unallocated using EXPR_NULL. Then missing components are tested for a default initializer. gcc/testsuite/ PR fortran/97612 * gfortran.dg/structure_constructor_17.f90: New test.
2020-12-29Fortran: Fix deferred character lengths in array constructors [PR93833].Paul Thomas1-0/+16
2020-12-29 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/93833 * trans-array.c (get_array_ctor_var_strlen): If the character length backend_decl cannot be found, convert the expression and use the string length. Clear up some minor white space issues in the rest of the file. gcc/testsuite/ PR fortran/93833 * gfortran.dg/deferred_character_36.f90 : New test.
2020-12-29arc: Update test pattern.Claudiu Zissulescu1-1/+1
gcc/testsuite 2020-12-29 Claudiu Zissulescu <claziss@synopsys.com> * gcc.target/arc/loop-3.c: Update test pattern. Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
2020-12-29arc: Fix cached to uncached moves.Claudiu Zissulescu1-0/+39
We need an temporary register when moving data from a cached memory to an uncached memory. Fix this issue and add a test for it. gcc/ 2020-12-29 Claudiu Zissulescu <claziss@synopsys.com> * config/arc/arc.c (prepare_move_operands): Use a temporary registers when we have cached mem-to-uncached mem moves. gcc/testsuite/ 2020-12-29 Vladimir Isaev <isaev@synopsys.com> * gcc.target/arc/uncached-9.c: New test. Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
2020-12-29Daily bump.GCC Administrator1-0/+11
2020-12-28i386: Fix __builtin_rint with FE_DOWNWARD rounding direction [PR96793]Uros Bizjak1-0/+28
x86_expand_rint expander uses x86_sse_copysign_to_positive, which is unable to change the sign from - to +. When FE_DOWNWARD rounding direction is in effect, the expanded sequence that involves subtraction can trigger x - x = -0.0 special rule. x86_sse_copysign_to_positive fails to change the sign of the intermediate value, assumed to always be positive, back to positive. The patch adds one extra fabs that strips the sign from the intermediate value when flag_rounding_math is in effect. 2020-12-28 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/96793 * config/i386/i386-expand.c (ix86_expand_rint): Remove the sign of the intermediate value for flag_rounding_math. gcc/testsuite/ PR target/96793 * gcc.target/i386/pr96793-2.c: New test.
2020-12-28Fix standard name for zero/sign extend expandersHongyu Wang3-0/+620
gcc/ChangeLog: * config/i386/i386.md (optab): New code attr. * config/i386/sse.md (<code>v32qiv32hi2): Rename to ... (<optab>v32qiv32hi2) ... this. (<code>v16qiv16hi2): Likewise. (<code>v8qiv8hi2): Likewise. (<code>v16qiv16si2): Likewise. (<code>v8qiv8si2): Likewise. (<code>v4qiv4si2): Likewise. (<code>v16hiv16si2): Likewise. (<code>v8hiv8si2): Likewise. (<code>v4hiv4si2): Likewise. (<code>v8qiv8di2): Likewise. (<code>v4qiv4di2): Likewise. (<code>v2qiv2di2): Likewise. (<code>v8hiv8di2): Likewise. (<code>v4hiv4di2): Likewise. (<code>v2hiv2di2): Likewise. (<code>v8siv8di2): Likewise. (<code>v4siv4di2): Likewise. (<code>v2siv2di2): Likewise. gcc/testsuite/ChangeLog: * gcc.target/i386/pr92658-avx2-2.c: New test. * gcc.target/i386/pr92658-avx512bw-2.c: Likewise. * gcc.target/i386/pr92658-sse4-2.c: Likewise.
2020-12-28Daily bump.GCC Administrator1-0/+11
2020-12-27Fix regressions for iq2000-elf after recent changesJeff Law2-0/+8
gcc/testsuite * gcc.dg/tree-ssa/asm-2.c: Use different register for iq2000. * gcc.dg/tree-ssa/asm-3.c: Likewise.
2020-12-27Fix errors introduced by last commit.Thomas Koenig1-1/+1
gcc/fortran/ChangeLog: * trans-array.c (gfc_conv_array_ref): Before discarding offset, check if this is a coarray and we are building shared coarrays. * trans-decl.c (gfc_build_builtin_function_decls): Clear up types for cas_coarray_allocate. (gfc_trans_shared_coarray): Pass NULL_TREEs to status and errmsg. libgfortran/ChangeLog: * caf_shared/util.h (CAS_DEBUG_PR): New macro. gcc/testsuite/ChangeLog: * gfortran.dg/caf-shared/cas.exp: Add -g to debug flags to allow better backtrace.
2020-12-27Fortran: Fix some select rank issues [PR97694 and 97723].Paul Thomas1-0/+44
2020-12-27 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/97694 PR fortran/97723 * check.c (allocatable_check): Select rank temporaries are permitted even though they are treated as associate variables. * resolve.c (gfc_resolve_code): Break on select rank as well as select type so that the block os resolved. * trans-stmt.c (trans_associate_var): Class associate variables that are optional dummies must use the backend_decl. gcc/testsuite/ PR fortran/97694 PR fortran/97723 * gfortran.dg/select_rank_5.f90: New test.
2020-12-27Daily bump.GCC Administrator1-0/+15
2020-12-26Objective-C++ : Fix up testcase EOF diagnostics.Iain Sandoe4-4/+4
Some Objective-C++ testcases need modification in reponse to the solution to PR 96045. gcc/testsuite/ChangeLog: PR c++/96045 * obj-c++.dg/property/property-neg-6.mm: Adjust EOF diagnostic location. * obj-c++.dg/syntax-error-10.mm: Likewise. * obj-c++.dg/syntax-error-8.mm: Likewise. * obj-c++.dg/syntax-error-9.mm: Likewise.
2020-12-26Fortran: Correction to recent patch in light of comments [PR98022].Paul Thomas1-12/+18
2020-12-26 Paul Thomas <pault@gcc.gnu.org> gcc/fortran PR fortran/98022 * data.c (gfc_assign_data_value): Throw an error for inquiry references. Follow with corrected code that would provide the expected result and provides clean error recovery. gcc/testsuite/ PR fortran/98022 * gfortran.dg/data_inquiry_ref.f90: Change to dg-compile and add errors for inquiry references.
2020-12-26Daily bump.GCC Administrator1-0/+5
2020-12-25PR93685 - ICE in gfc_constructor_append_expr, at fortran/constructor.c:135Harald Anlauf2-0/+38
Fix handling of F2018 enhancements to DATA statements that allows initialization of pointer components to derived types, and adjust error handling for the CHARACTER case. gcc/fortran/ChangeLog: * data.c (gfc_assign_data_value): Restrict use of create_character_initializer to constant initializers. * trans-expr.c (gfc_conv_initializer): Ensure that character initializer is constant, otherwise fall through to get the same error handling as for non-character cases. gcc/testsuite/ChangeLog: * gfortran.dg/pr93685_1.f90: New test. * gfortran.dg/pr93685_2.f90: New test.
2020-12-24Daily bump.GCC Administrator1-0/+97
2020-12-23PR middle-end/98160 - ICE in warn_dealloc_offset on member placement new and ↵Martin Sebor1-0/+30
delete gcc/ChangeLog: PR middle-end/98160 * builtins.c (warn_dealloc_offset): Avoid assuming calls are made through declared functions and not pointers. gcc/testsuite/ChangeLog: PR middle-end/98160 * g++.dg/warn/pr98160.C: New test.
2020-12-23PR c++/98413 - ICE on placement new and member pointerMartin Sebor1-0/+23
gcc/ChangeLog: PR c++/98413 * builtins.c (get_offset_range): Avoid non-integers/-pointers. gcc/testsuite/ChangeLog: PR c++/98413 * g++.dg/warn/pr98413.C: New test.
2020-12-23mark some tests in gcc.target/arm as requiring "fpic" supportJoel Brobecker8-8/+16
Require effective target fpic support in tests using pic flags. for gcc/testsuite/ChangeLog * gcc.target/arm/data-rel-1.c: Require "fpic" support. * gcc.target/arm/data-rel-2.c: Likewise. * gcc.target/arm/data-rel-3.c: Ditto. * gcc.target/arm/pr44788.c: Ditto. * gcc.target/arm/pr52006.c: Ditto. * gcc.target/arm/pr59858.c: Ditto. * gcc.target/arm/tlscall.c: Ditto. * gcc.target/arm/require-pic-register-loc.c: Ditto. Adjust line numbers.
2020-12-23c++: EOF location [PR 96045]Nathan Sidwell47-60/+49
Setting the EOF token location to be the start of a line just after the ending newline is not most helpful. While that location is probably the right place to report preprocessing and lexing issues, when parsing, the location just after the last token is better. That way we get to point at some actual text. Setting the location from the previous token has the advantage over just setting the location to be the end of the final line, in that any ending comments do not get considered, which I think is better. PR c++/96045 gcc/cp/ * parser.c (cp_lexer_new_main): Adjust EOF token location. gcc/testsuite/ * g++.dg/diagnostic/pr96045-1.C: New. * g++.dg/diagnostic/pr96045-2.C: New. * g++.dg/diagnostic/pr96045-3.C: New. * c-c++-common/goacc/pr79428-1.c: Adjust EOF diagnostic location. * c-c++-common/gomp/pr79428-2.c: Likewise * c-c++-common/raw-string-6.c: Likewise * g++.dg/cpp0x/decltype63.C: Likewise * g++.dg/cpp0x/gen-attrs-64.C: Likewise * g++.dg/cpp0x/pr68726.C: Likewise * g++.dg/cpp0x/pr78341.C: Likewise * g++.dg/cpp1y/pr65202.C: Likewise * g++.dg/cpp1y/pr65340.C: Likewise * g++.dg/cpp1y/pr68578.C: Likewise * g++.dg/cpp1z/class-deduction44.C: Likewise * g++.dg/diagnostic/unclosed-extern-c.C: Likewise * g++.dg/diagnostic/unclosed-function.C: Likewise * g++.dg/diagnostic/unclosed-namespace.C: Likewise * g++.dg/diagnostic/unclosed-struct.C: Likewise * g++.dg/ext/pr84598.C: Likewise * g++.dg/other/switch4.C: Likewise * g++.dg/parse/attr4.C: Likewise * g++.dg/parse/cond4.C: Likewise * g++.dg/parse/crash10.C: Likewise * g++.dg/parse/crash18.C: Likewise * g++.dg/parse/crash27.C: Likewise * g++.dg/parse/crash34.C: Likewise * g++.dg/parse/crash35.C: Likewise * g++.dg/parse/crash52.C: Likewise * g++.dg/parse/crash59.C: Likewise * g++.dg/parse/crash61.C: Likewise * g++.dg/parse/crash67.C: Likewise * g++.dg/parse/error14.C: Likewise * g++.dg/parse/error56.C: Likewise * g++.dg/parse/invalid1.C: Likewise * g++.dg/parse/parameter-declaration-1.C: Likewise * g++.dg/parse/parser-pr28152-2.C: Likewise * g++.dg/parse/parser-pr28152.C: Likewise * g++.dg/parse/pr68722.C: Likewise * g++.dg/parse/pr96258.C: Likewise * g++.dg/pr46852.C: Likewise * g++.dg/pr46868.C: Likewise * g++.dg/template/crash115.C: Likewise * g++.dg/template/crash43.C: Likewise * g++.dg/template/crash90.C: Likewise * g++.dg/template/error-recovery1.C: Likewise * g++.dg/template/error57.C: Likewise * g++.old-deja/g++.other/crash31.C: Likewise
2020-12-23c++: Fix initializing empty base from prvalue [PR97597]Jason Merrill1-0/+18
unsafe_return_slot_p wasn't recognizing an empty base as potentially-overlapping, which it definitely is. The change to build_base_path is to make the virtual conversion also recognized by is_empty_base_ref; unsafe_return_slot_p doesn't to handle virtual conversions, but hypothetical future callers might. gcc/cp/ChangeLog: PR c++/97597 * class.c (is_empty_base_ref): New. (build_base_path): Add NOP_EXPR after offset. * cp-tree.h (is_empty_base_ref): Declare it. * call.c (unsafe_return_slot_p): Call it. gcc/testsuite/ChangeLog: PR c++/97597 * g++.dg/init/empty3.C: New test.
2020-12-23c++: Improve testcase [PR98332]Jason Merrill1-1/+3
gcc/testsuite/ChangeLog: * g++.dg/cpp0x/constexpr-overflow3.C: Use INT_MAX.
2020-12-23c++: Fix constexpr array ICE [PR98332]Jason Merrill1-0/+5
The element initializer was non-constant, so its CONSTRUCTOR element ended up NULL, so unshare_constructor crashed trying to look at it. This patch fixes this in two places: First, by returning when we see a non-constant initializer; second, by not crashing on NULL. gcc/cp/ChangeLog: PR c++/98332 * constexpr.c (unshare_constructor): Check for NULL. (cxx_eval_vec_init_1): Always exit early if non-constant. gcc/testsuite/ChangeLog: PR c++/98332 * g++.dg/cpp0x/constexpr-overflow3.C: New test.
2020-12-23d: Force TYPE_MODE of classes and non-POD structs as BLKmodeIain Buclaw1-0/+23
Without this being forced, the optimizer could still make decisions that require objects of the non-POD types to need a temporary, which would result in an ICE during the expand to RTL passes. gcc/d/ChangeLog: PR d/98427 * types.cc (TypeVisitor::visit (TypeStruct *)): Set TYPE_MODE of all non-trivial types as BLKmode. (TypeVisitor::visit (TypeClass *)): Likewise. gcc/testsuite/ChangeLog: PR d/98427 * gdc.dg/pr98427.d: New test.
2020-12-23i386: Fix __builtin_trunc with FE_DOWNWARD rounding direction [PR96793]Uros Bizjak1-0/+28
x86_expand_truncdf_32 expander uses x86_sse_copysign_to_positive, which is unable to change the sign from - to +. When FE_DOWNWARD rounding direction is in effect, the expanded sequence that involves subtraction can trigger x - x = -0.0 special rule. x86_sse_copysign_to_positive fails to change the sign of the intermediate value, assumed to always be positive, back to positive. The patch adds one extra fabs that strips the sign from the intermediate value when flag_rounding_math is in effect. 2020-12-23 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/96793 * config/i386/i386-expand.c (ix86_expand_truncdf_32): Remove the sign of the intermediate value for flag_rounding_math. gcc/testsuite/ PR target/96793 * gcc.target/i386/pr96793-1.c: New test.
2020-12-23Add offset to allocatable shared coarrays.Thomas Koenig1-0/+27
This adds the calculation of the offset for allocatable coarrays, which was missing before, and fixes the resulting fallout for ALLOCATED. Additionally, it prepares the way for STAT and ERRMSG for ALLOCATE of coarrays, but that still needs changes to gfc_trans_allocate. gcc/fortran/ChangeLog: * trans-array.c (gfc_conv_array_ref): If se->address_only is set, throw away all the offset calculation. (gfc_allocate_shared_coarray): Add arguments stat, errmsg and errlen to call to allocate. Calculate offset for allocatable coarrays. (gfc_array_allocate): Adjust call to gfc_allocate_shared_coarray. * trans-array.h (gfc_allocate_shared_coarray): Change prototype of cas_coarray_alloc. * trans-decl.c (gfc_build_builtin_function_decls): Adjust cas_coarray_alloc to changed prototypes. (gfc_trans_shared_coarray): Adjust call to gfc_allocate_shared_coarray. * trans-intrinsic.c (gfc_conv_allocated): Set address_only on se. * trans.h: Add flag address_only to gfc_se. libgfortran/ChangeLog: * caf_shared/wrapper.c (cas_coarray_alloc): Add status, error and errmsg arguments and their checking.
2020-12-23Daily bump.GCC Administrator1-0/+847
2020-12-22testsuite: C++ module testsNathan Sidwell833-0/+10400
This adds most of the modules tests. I do not include the tests that excercise system & C++ library header files. Those will be later. gcc/testsuite/ * g++.dg/modules/access-1_a.C: New.: New. * g++.dg/modules/access-1_b.C: New. * g++.dg/modules/access-1_c.C: New. * g++.dg/modules/adhoc-1_a.C: New. * g++.dg/modules/adhoc-1_b.C: New. * g++.dg/modules/adl-1_a.C: New. * g++.dg/modules/adl-1_b.C: New. * g++.dg/modules/adl-1_c.C: New. * g++.dg/modules/adl-2_a.C: New. * g++.dg/modules/adl-2_b.C: New. * g++.dg/modules/adl-2_c.C: New. * g++.dg/modules/adl-3_a.C: New. * g++.dg/modules/adl-3_b.C: New. * g++.dg/modules/adl-3_c.C: New. * g++.dg/modules/adl-4_a.C: New. * g++.dg/modules/adl-4_b.C: New. * g++.dg/modules/adl-5_a.c: New. * g++.dg/modules/adl-5_b.C: New. * g++.dg/modules/adl-5_c.C: New. * g++.dg/modules/adl-5_d.C: New. * g++.dg/modules/alias-1_a.H: New. * g++.dg/modules/alias-1_b.C: New. * g++.dg/modules/alias-1_c.C: New. * g++.dg/modules/alias-1_d.C: New. * g++.dg/modules/alias-1_e.C: New. * g++.dg/modules/alias-1_f.C: New. * g++.dg/modules/alias-2_a.H: New. * g++.dg/modules/alias-2_b.C: New. * g++.dg/modules/align-type-1_a.C: New. * g++.dg/modules/align-type-1_b.C: New. * g++.dg/modules/ambig-1_a.C: New. * g++.dg/modules/ambig-1_b.C: New. * g++.dg/modules/anon-1_a.C: New. * g++.dg/modules/anon-1_b.C: New. * g++.dg/modules/anon-1_c.C: New. * g++.dg/modules/anon-2.h: New. * g++.dg/modules/anon-2_a.H: New. * g++.dg/modules/anon-2_b.C: New. * g++.dg/modules/atom-decl-0_a.C: New. * g++.dg/modules/atom-decl-0_b.C: New. * g++.dg/modules/atom-decl-0_c.C: New. * g++.dg/modules/atom-decl-2.C: New. * g++.dg/modules/atom-decl-3.C: New. * g++.dg/modules/atom-pragma-1.C: New. * g++.dg/modules/atom-pragma-3.C: New. * g++.dg/modules/atom-preamble-1.C: New. * g++.dg/modules/atom-preamble-2_a.C: New. * g++.dg/modules/atom-preamble-2_b.C: New. * g++.dg/modules/atom-preamble-2_c.C: New. * g++.dg/modules/atom-preamble-2_d.C: New. * g++.dg/modules/atom-preamble-2_e.C: New. * g++.dg/modules/atom-preamble-2_f.C: New. * g++.dg/modules/atom-preamble-3.C: New. * g++.dg/modules/atom-preamble-4.C: New. * g++.dg/modules/auto-1.h: New. * g++.dg/modules/auto-1_a.H: New. * g++.dg/modules/auto-1_b.C: New. * g++.dg/modules/auto-2.h: New. * g++.dg/modules/auto-2_a.H: New. * g++.dg/modules/auto-2_b.C: New. * g++.dg/modules/bad-mapper-1.C: New. * g++.dg/modules/bad-mapper-2.C: New. * g++.dg/modules/bad-mapper-3.C: New. * g++.dg/modules/ben-1.map: New. * g++.dg/modules/ben-1_a.C: New. * g++.dg/modules/ben-1_b.C: New. * g++.dg/modules/bfield-1_a.C: New. * g++.dg/modules/bfield-1_b.C: New. * g++.dg/modules/bfield-2_a.C: New. * g++.dg/modules/bfield-2_b.C: New. * g++.dg/modules/bool-1.h: New. * g++.dg/modules/bool-1_a.H: New. * g++.dg/modules/bool-1_b.H: New. * g++.dg/modules/bool-1_c.C: New. * g++.dg/modules/bug-1_a.C: New. * g++.dg/modules/bug-1_b.C: New. * g++.dg/modules/builtin-1_a.C: New. * g++.dg/modules/builtin-1_b.C: New. * g++.dg/modules/builtin-2.C: New. * g++.dg/modules/builtin-3_b.C: New. * g++.dg/modules/builtin-4_a.H: New. * g++.dg/modules/builtin-4_b.C: New. * g++.dg/modules/builtin-5_a.H: New. * g++.dg/modules/builtin-5_b.C: New. * g++.dg/modules/builtin-6_a.H: New. * g++.dg/modules/builtin-6_b.C: New. * g++.dg/modules/builtin-7_a.H: New. * g++.dg/modules/builtin-7_b.C: New. * g++.dg/modules/by-name-1.C: New. * g++.dg/modules/cexpr-1_a.C: New. * g++.dg/modules/cexpr-1_b.C: New. * g++.dg/modules/cexpr-2_a.C: New. * g++.dg/modules/cexpr-2_b.C: New. * g++.dg/modules/circ-1_a.C: New. * g++.dg/modules/circ-1_b.C: New. * g++.dg/modules/circ-1_c.C: New. * g++.dg/modules/circ-1_d.C: New. * g++.dg/modules/class-1_a.C: New. * g++.dg/modules/class-1_b.C: New. * g++.dg/modules/class-1_c.C: New. * g++.dg/modules/class-2_a.C: New. * g++.dg/modules/class-2_b.C: New. * g++.dg/modules/class-3_a.C: New. * g++.dg/modules/class-3_b.C: New. * g++.dg/modules/class-3_c.C: New. * g++.dg/modules/class-3_d.C: New. * g++.dg/modules/class-4_a.C: New. * g++.dg/modules/class-4_b.C: New. * g++.dg/modules/class-5_a.C: New. * g++.dg/modules/class-5_b.C: New. * g++.dg/modules/class-5_c.C: New. * g++.dg/modules/class-6_a.C: New. * g++.dg/modules/class-6_b.C: New. * g++.dg/modules/class-6_c.C: New. * g++.dg/modules/class-7_a.C: New. * g++.dg/modules/class-7_b.C: New. * g++.dg/modules/class-7_c.C: New. * g++.dg/modules/class-8_a.C: New. * g++.dg/modules/class-8_b.C: New. * g++.dg/modules/clone-1_a.C: New. * g++.dg/modules/clone-1_b.C: New. * g++.dg/modules/concept-1_a.C: New. * g++.dg/modules/concept-1_b.C: New. * g++.dg/modules/concept-2_a.C: New. * g++.dg/modules/concept-2_b.C: New. * g++.dg/modules/concept-3_a.C: New. * g++.dg/modules/concept-3_b.C: New. * g++.dg/modules/concept-4.H: New. * g++.dg/modules/concept-5.h: New. * g++.dg/modules/concept-5_a.H: New. * g++.dg/modules/concept-5_b.C: New. * g++.dg/modules/concept-6.h: New. * g++.dg/modules/concept-6_a.H: New. * g++.dg/modules/concept-6_b.C: New. * g++.dg/modules/constrained-partial-1_a.C: New. * g++.dg/modules/constrained-partial-1_b.C: New. * g++.dg/modules/convop-1_a.C: New. * g++.dg/modules/convop-1_b.C: New. * g++.dg/modules/cpp-1.C: New. * g++.dg/modules/cpp-2_a.H: New. * g++.dg/modules/cpp-2_b.H: New. * g++.dg/modules/cpp-2_c.C: New. * g++.dg/modules/cpp-3.C: New. * g++.dg/modules/cpp-4.C: New. * g++.dg/modules/cpp-4.h: New. * g++.dg/modules/cpp-5_a.H: New. * g++.dg/modules/cpp-5_b.C: New. * g++.dg/modules/cpp-5_c.C: New. * g++.dg/modules/cpp-6_a.H: New. * g++.dg/modules/cpp-6_b.H: New. * g++.dg/modules/cpp-6_c.C: New. * g++.dg/modules/debug-1_a.C: New. * g++.dg/modules/debug-1_b.C: New. * g++.dg/modules/decomp-1_a.C: New. * g++.dg/modules/decomp-1_b.C: New. * g++.dg/modules/deferred-1.h: New. * g++.dg/modules/deferred-1_a.H: New. * g++.dg/modules/deferred-1_b.C: New. * g++.dg/modules/dep-1_a.C: New. * g++.dg/modules/dep-1_b.C: New. * g++.dg/modules/dep-2.C: New. * g++.dg/modules/dep-3.C: New. * g++.dg/modules/dir-only-1.C: New. * g++.dg/modules/dir-only-2_a.H: New. * g++.dg/modules/dir-only-2_b.C: New. * g++.dg/modules/dir-only-3.C: New. * g++.dg/modules/dir-only-4.C: New. * g++.dg/modules/dir-recovery.C: New. * g++.dg/modules/enum-1_a.C: New. * g++.dg/modules/enum-1_b.C: New. * g++.dg/modules/enum-2_a.C: New. * g++.dg/modules/enum-2_b.C: New. * g++.dg/modules/enum-3_a.C: New. * g++.dg/modules/enum-3_b.C: New. * g++.dg/modules/enum-4_a.C: New. * g++.dg/modules/enum-4_b.C: New. * g++.dg/modules/enum-5_a.H: New. * g++.dg/modules/enum-5_b.C: New. * g++.dg/modules/enum-6_a.H: New. * g++.dg/modules/enum-6_b.C: New. * g++.dg/modules/enum-7.C: New. * g++.dg/modules/enum-8_a.H: New. * g++.dg/modules/enum-8_b.H: New. * g++.dg/modules/enum-8_c.C: New. * g++.dg/modules/enum-8_d.C: New. * g++.dg/modules/enum-bad-1_a.H: New. * g++.dg/modules/enum-bad-1_b.C: New. * g++.dg/modules/err-1_a.C: New. * g++.dg/modules/err-1_b.C: New. * g++.dg/modules/err-1_c.C: New. * g++.dg/modules/err-1_d.C: New. * g++.dg/modules/except-1.C: New. * g++.dg/modules/except-2.h: New. * g++.dg/modules/except-2_a.H: New. * g++.dg/modules/except-2_b.C: New. * g++.dg/modules/except-3.h: New. * g++.dg/modules/except-3_a.H: New. * g++.dg/modules/except-3_b.C: New. * g++.dg/modules/exp-xlate-1_a.H: New. * g++.dg/modules/exp-xlate-1_b.C: New. * g++.dg/modules/export-1.C: New. * g++.dg/modules/extern-tpl-1_a.H: New. * g++.dg/modules/extern-tpl-1_b.C: New. * g++.dg/modules/extern-tpl-1_c.C: New. * g++.dg/modules/extern-tpl-2_a.H: New. * g++.dg/modules/extern-tpl-2_b.H: New. * g++.dg/modules/extern-tpl-2_c.C: New. * g++.dg/modules/extern-tpl-2_d.C: New. * g++.dg/modules/flag-1_a.C: New. * g++.dg/modules/flag-1_b.C: New. * g++.dg/modules/fn-inline-1_a.C: New. * g++.dg/modules/fn-inline-1_b.C: New. * g++.dg/modules/fn-inline-1_c.C: New. * g++.dg/modules/freeze-1_a.C: New. * g++.dg/modules/freeze-1_b.C: New. * g++.dg/modules/freeze-1_c.C: New. * g++.dg/modules/freeze-1_d.C: New. * g++.dg/modules/friend-1_a.C: New. * g++.dg/modules/friend-1_b.C: New. * g++.dg/modules/friend-1_c.C: New. * g++.dg/modules/friend-2_a.C: New. * g++.dg/modules/friend-2_b.C: New. * g++.dg/modules/friend-3.C: New. * g++.dg/modules/friend-4_a.C: New. * g++.dg/modules/friend-4_b.C: New. * g++.dg/modules/friend-5_a.C: New. * g++.dg/modules/friend-5_b.C: New. * g++.dg/modules/gc-1_a.C: New. * g++.dg/modules/gc-1_b.C: New. * g++.dg/modules/gc-1_c.C: New. * g++.dg/modules/gc-1_d.C: New. * g++.dg/modules/gc-2.map: New. * g++.dg/modules/gc-2_a.C: New. * g++.dg/modules/global-1_a.C: New. * g++.dg/modules/global-1_b.C: New. * g++.dg/modules/gmf-1_a.C: New. * g++.dg/modules/gmf-1_b.C: New. * g++.dg/modules/gmf-2_a.H: New. * g++.dg/modules/gmf-2_b.C: New. * g++.dg/modules/gmf-2_c.C: New. * g++.dg/modules/gmf-2_d.C: New. * g++.dg/modules/gvar_a.C: New. * g++.dg/modules/gvar_b.C: New. * g++.dg/modules/hdr-1_a.H: New. * g++.dg/modules/hdr-1_b.H: New. * g++.dg/modules/hdr-1_c.C: New. * g++.dg/modules/hdr-init-1_a.H: New. * g++.dg/modules/hdr-init-1_b.H: New. * g++.dg/modules/hdr-init-1_c.C: New. * g++.dg/modules/horcrux-1_a.C: New. * g++.dg/modules/horcrux-1_b.C: New. * g++.dg/modules/ice-1.C: New. * g++.dg/modules/imp-inline-1_a.C: New. * g++.dg/modules/imp-inline-1_b.C: New. * g++.dg/modules/imp-member-1_a.C: New. * g++.dg/modules/imp-member-1_b.C: New. * g++.dg/modules/imp-member-1_c.C: New. * g++.dg/modules/imp-member-1_d.C: New. * g++.dg/modules/imp-member-1_e.C: New. * g++.dg/modules/imp-member-2_a.C: New. * g++.dg/modules/imp-member-2_b.C: New. * g++.dg/modules/imp-member-2_c.C: New. * g++.dg/modules/imp-member-3.H: New. * g++.dg/modules/import-1_a.C: New. * g++.dg/modules/import-1_b.C: New. * g++.dg/modules/import-1_c.C: New. * g++.dg/modules/import-1_d.C: New. * g++.dg/modules/import-1_e.C: New. * g++.dg/modules/import-1_f.C: New. * g++.dg/modules/import-1_g.C: New. * g++.dg/modules/import-2.C: New. * g++.dg/modules/inc-xlate-1.map: New. * g++.dg/modules/inc-xlate-1_a.H: New. * g++.dg/modules/inc-xlate-1_b.H: New. * g++.dg/modules/inc-xlate-1_c.C: New. * g++.dg/modules/inc-xlate-1_e.C: New. * g++.dg/modules/indirect-1_a.C: New. * g++.dg/modules/indirect-1_b.C: New. * g++.dg/modules/indirect-1_c.C: New. * g++.dg/modules/indirect-2_a.C: New. * g++.dg/modules/indirect-2_b.C: New. * g++.dg/modules/indirect-2_c.C: New. * g++.dg/modules/indirect-3_a.C: New. * g++.dg/modules/indirect-3_b.C: New. * g++.dg/modules/indirect-3_c.C: New. * g++.dg/modules/indirect-4_a.C: New. * g++.dg/modules/indirect-4_b.C: New. * g++.dg/modules/indirect-4_c.C: New. * g++.dg/modules/inext-1.H: New. * g++.dg/modules/inh-tmpl-ctor-1.h: New. * g++.dg/modules/inh-tmpl-ctor-1_a.H: New. * g++.dg/modules/inh-tmpl-ctor-1_b.C: New. * g++.dg/modules/init-1_a.C: New. * g++.dg/modules/init-1_b.C: New. * g++.dg/modules/init-2_a.C: New. * g++.dg/modules/init-2_b.C: New. * g++.dg/modules/init-2_c.C: New. * g++.dg/modules/inst-1_a.C: New. * g++.dg/modules/inst-1_b.C: New. * g++.dg/modules/inst-2_a.C: New. * g++.dg/modules/inst-2_b.C: New. * g++.dg/modules/inst-3_a.C: New. * g++.dg/modules/inst-3_b.C: New. * g++.dg/modules/inst-4_a.C: New. * g++.dg/modules/inst-4_b.C: New. * g++.dg/modules/inst-5_a.H: New. * g++.dg/modules/inst-5_b.C: New. * g++.dg/modules/internal-1.C: New. * g++.dg/modules/internal-2_a.H: New. * g++.dg/modules/internal-2_b.H: New. * g++.dg/modules/internal-2_c.C: New. * g++.dg/modules/isalnum.H: New. * g++.dg/modules/keyword-1_a.C: New. * g++.dg/modules/keyword-1_b.C: New. * g++.dg/modules/lambda-1_a.C: New. * g++.dg/modules/lambda-1_b.C: New. * g++.dg/modules/lambda-2.h: New. * g++.dg/modules/lambda-2_a.H: New. * g++.dg/modules/lambda-2_b.C: New. * g++.dg/modules/lambda-2_c.C: New. * g++.dg/modules/lambda-3.h: New. * g++.dg/modules/lambda-3_a.H: New. * g++.dg/modules/lambda-3_b.C: New. * g++.dg/modules/lambda-3_c.C: New. * g++.dg/modules/lambda-4.h: New. * g++.dg/modules/lambda-4_a.H: New. * g++.dg/modules/lambda-4_b.C: New. * g++.dg/modules/lang-1_a.H: New. * g++.dg/modules/lang-1_b.C: New. * g++.dg/modules/lang-1_c.C: New. * g++.dg/modules/lang-2_a.C: New. * g++.dg/modules/lang-2_b.C: New. * g++.dg/modules/late-ret-1.H: New. * g++.dg/modules/late-ret-2_a.H: New. * g++.dg/modules/late-ret-2_b.H: New. * g++.dg/modules/late-ret-2_c.C: New. * g++.dg/modules/late-ret-3_a.H: New. * g++.dg/modules/late-ret-3_b.H: New. * g++.dg/modules/late-ret-3_c.C: New. * g++.dg/modules/lazy-1_a.C: New. * g++.dg/modules/lazy-1_b.C: New. * g++.dg/modules/leg-merge-1_a.H: New. * g++.dg/modules/leg-merge-1_b.H: New. * g++.dg/modules/leg-merge-1_c.C: New. * g++.dg/modules/leg-merge-1_d.C: New. * g++.dg/modules/leg-merge-2_a.H: New. * g++.dg/modules/leg-merge-2_b.H: New. * g++.dg/modules/leg-merge-2_c.C: New. * g++.dg/modules/leg-merge-3_a.H: New. * g++.dg/modules/leg-merge-3_b.H: New. * g++.dg/modules/leg-merge-3_c.C: New. * g++.dg/modules/leg-merge-3_d.C: New. * g++.dg/modules/leg-merge-4_a.H: New. * g++.dg/modules/leg-merge-4_b.H: New. * g++.dg/modules/leg-merge-4_c.C: New. * g++.dg/modules/leg-merge-5_a.H: New. * g++.dg/modules/leg-merge-5_b.H: New. * g++.dg/modules/leg-merge-5_c.C: New. * g++.dg/modules/leg-merge-6_a.H: New. * g++.dg/modules/leg-merge-6_b.H: New. * g++.dg/modules/leg-merge-6_c.C: New. * g++.dg/modules/leg-merge-7_a.H: New. * g++.dg/modules/leg-merge-7_b.H: New. * g++.dg/modules/leg-merge-7_c.C: New. * g++.dg/modules/leg-merge-8_a.H: New. * g++.dg/modules/leg-merge-8_b.H: New. * g++.dg/modules/leg-merge-8_c.C: New. * g++.dg/modules/leg-merge-9_a.H: New. * g++.dg/modules/leg-merge-9_b.H: New. * g++.dg/modules/leg-merge-9_c.C: New. * g++.dg/modules/legacy-1_a.H: New. * g++.dg/modules/legacy-1_b.C: New. * g++.dg/modules/legacy-1_c.C: New. * g++.dg/modules/legacy-2.h: New. * g++.dg/modules/legacy-2.map: New. * g++.dg/modules/legacy-2_a.H: New. * g++.dg/modules/legacy-2_b.H: New. * g++.dg/modules/legacy-2_c.C: New. * g++.dg/modules/legacy-2_d.C: New. * g++.dg/modules/legacy-3.h: New. * g++.dg/modules/legacy-3_a.H: New. * g++.dg/modules/legacy-3_b.H: New. * g++.dg/modules/legacy-3_c.H: New. * g++.dg/modules/legacy-6.map: New. * g++.dg/modules/legacy-6_a.H: New. * g++.dg/modules/legacy-6_b.H: New. * g++.dg/modules/legacy-6_c.C: New. * g++.dg/modules/legacy-6_d.C: New. * g++.dg/modules/legacy-6_e.C: New. * g++.dg/modules/legacy-6_f.C: New. * g++.dg/modules/legacy-7_a.H: New. * g++.dg/modules/legacy-7_b.C: New. * g++.dg/modules/legacy-8_a.H: New. * g++.dg/modules/legacy-8_b.H: New. * g++.dg/modules/legacy-8_c.C: New. * g++.dg/modules/legacy-8_d.C: New. * g++.dg/modules/legacy-8_e.C: New. * g++.dg/modules/libfn-1_a.C: New. * g++.dg/modules/libfn-1_b.C: New. * g++.dg/modules/literals-1_a.C: New. * g++.dg/modules/literals-1_b.C: New. * g++.dg/modules/loc-1_a.C: New. * g++.dg/modules/loc-1_b.C: New. * g++.dg/modules/loc-1_c.C: New. * g++.dg/modules/loc-2_a.C: New. * g++.dg/modules/loc-2_b.C: New. * g++.dg/modules/loc-2_c.C: New. * g++.dg/modules/loc-2_d.C: New. * g++.dg/modules/loc-2_e.C: New. * g++.dg/modules/loc-2_f.C: New. * g++.dg/modules/loc-wrapper-1.h: New. * g++.dg/modules/loc-wrapper-1_a.H: New. * g++.dg/modules/loc-wrapper-1_b.C: New. * g++.dg/modules/local-1_a.C: New. * g++.dg/modules/local-1_b.C: New. * g++.dg/modules/local-extern-1.C: New. * g++.dg/modules/local-extern-2.H: New. * g++.dg/modules/local-struct-1_a.C: New. * g++.dg/modules/local-struct-1_b.C: New. * g++.dg/modules/macloc-1_a.C: New. * g++.dg/modules/macloc-1_b.C: New. * g++.dg/modules/macloc-1_c.C: New. * g++.dg/modules/macloc-1_d.C: New. * g++.dg/modules/macloc-2_a.H: New. * g++.dg/modules/macloc-2_b.C: New. * g++.dg/modules/macro-1_a.H: New. * g++.dg/modules/macro-1_b.C: New. * g++.dg/modules/macro-2_a.H: New. * g++.dg/modules/macro-2_b.H: New. * g++.dg/modules/macro-2_c.H: New. * g++.dg/modules/macro-2_d.C: New. * g++.dg/modules/macro-3_a.H: New. * g++.dg/modules/macro-3_b.H: New. * g++.dg/modules/macro-3_c.C: New. * g++.dg/modules/macro-4_a.H: New. * g++.dg/modules/macro-4_b.H: New. * g++.dg/modules/macro-4_c.H: New. * g++.dg/modules/macro-4_d.C: New. * g++.dg/modules/macro-4_e.C: New. * g++.dg/modules/macro-4_f.C: New. * g++.dg/modules/macro-4_g.C: New. * g++.dg/modules/macro-5_a.H: New. * g++.dg/modules/macro-5_b.H: New. * g++.dg/modules/macro-5_c.C: New. * g++.dg/modules/macro-6_a.H: New. * g++.dg/modules/macro-6_b.C: New. * g++.dg/modules/macro-6_c.C: New. * g++.dg/modules/macro-7_a.C: New. * g++.dg/modules/macro-7_b.C: New. * g++.dg/modules/macro-7_c.C: New. * g++.dg/modules/map-1.map: New. * g++.dg/modules/map-1_a.C: New. * g++.dg/modules/map-1_b.C: New. * g++.dg/modules/map-1_b.map: New. * g++.dg/modules/map-2.C: New. * g++.dg/modules/map-2.map: New. * g++.dg/modules/member-def-1_a.C: New. * g++.dg/modules/member-def-1_b.C: New. * g++.dg/modules/member-def-1_c.C: New. * g++.dg/modules/member-def-1_d.C: New. * g++.dg/modules/member-def-2_a.C: New. * g++.dg/modules/member-def-2_b.C: New. * g++.dg/modules/member-def-2_c.C: New. * g++.dg/modules/member-def-2_d.C: New. * g++.dg/modules/memref-1_a.C: New. * g++.dg/modules/memref-1_b.C: New. * g++.dg/modules/merge-10.h: New. * g++.dg/modules/merge-10_a.H: New. * g++.dg/modules/merge-10_b.C: New. * g++.dg/modules/merge-11.h: New. * g++.dg/modules/merge-11_a.H: New. * g++.dg/modules/merge-11_b.C: New. * g++.dg/modules/merge-12.h: New. * g++.dg/modules/merge-12_a.H: New. * g++.dg/modules/merge-12_b.C: New. * g++.dg/modules/merge-13.h: New. * g++.dg/modules/merge-13_a.H: New. * g++.dg/modules/merge-13_b.C: New. * g++.dg/modules/merge-14.h: New. * g++.dg/modules/merge-14_a.H: New. * g++.dg/modules/merge-14_b.C: New. * g++.dg/modules/merge-15.h: New. * g++.dg/modules/merge-15_a.H: New. * g++.dg/modules/merge-15_b.C: New. * g++.dg/modules/merge-1_a.C: New. * g++.dg/modules/merge-1_b.C: New. * g++.dg/modules/merge-2_a.H: New. * g++.dg/modules/merge-2_b.C: New. * g++.dg/modules/merge-3_a.H: New. * g++.dg/modules/merge-3_b.C: New. * g++.dg/modules/merge-4.h: New. * g++.dg/modules/merge-4_a.H: New. * g++.dg/modules/merge-4_b.C: New. * g++.dg/modules/merge-5.h: New. * g++.dg/modules/merge-5_a.H: New. * g++.dg/modules/merge-5_b.C: New. * g++.dg/modules/merge-6.h: New. * g++.dg/modules/merge-6_a.H: New. * g++.dg/modules/merge-6_b.C: New. * g++.dg/modules/merge-7.h: New. * g++.dg/modules/merge-7_a.H: New. * g++.dg/modules/merge-7_b.C: New. * g++.dg/modules/merge-8.h: New. * g++.dg/modules/merge-8_a.H: New. * g++.dg/modules/merge-8_b.C: New. * g++.dg/modules/merge-9.h: New. * g++.dg/modules/merge-9_a.H: New. * g++.dg/modules/merge-9_b.C: New. * g++.dg/modules/mod-exp-1_a.C: New. * g++.dg/modules/mod-exp-1_b.C: New. * g++.dg/modules/mod-imp-1_a.C: New. * g++.dg/modules/mod-imp-1_b.C: New. * g++.dg/modules/mod-imp-1_c.C: New. * g++.dg/modules/mod-imp-1_d.C: New. * g++.dg/modules/mod-impl-1_a.C: New. * g++.dg/modules/mod-impl-1_b.C: New. * g++.dg/modules/mod-impl-1_c.C: New. * g++.dg/modules/mod-impl-1_d.C: New. * g++.dg/modules/mod-indirect-1_a.C: New. * g++.dg/modules/mod-indirect-1_b.C: New. * g++.dg/modules/mod-indirect-1_c.C: New. * g++.dg/modules/mod-indirect-1_d.C: New. * g++.dg/modules/mod-indirect-1_e.C: New. * g++.dg/modules/mod-stamp-1_a.C: New. * g++.dg/modules/mod-stamp-1_b.C: New. * g++.dg/modules/mod-stamp-1_c.C: New. * g++.dg/modules/mod-stamp-1_d.C: New. * g++.dg/modules/mod-sym-1.C: New. * g++.dg/modules/mod-sym-2.C: New. * g++.dg/modules/mod-sym-3.C: New. * g++.dg/modules/mod-tpl-1_a.C: New. * g++.dg/modules/mod-tpl-1_b.C: New. * g++.dg/modules/mod-tpl-2_a.C: New. * g++.dg/modules/mod-tpl-2_b.C: New. * g++.dg/modules/mutual-friend.ii: New. * g++.dg/modules/namespace-1_a.C: New. * g++.dg/modules/namespace-1_b.C: New. * g++.dg/modules/namespace-1_c.C: New. * g++.dg/modules/namespace-2_a.C: New. * g++.dg/modules/namespace-2_b.C: New. * g++.dg/modules/namespace-3_a.C: New. * g++.dg/modules/namespace-3_b.C: New. * g++.dg/modules/namespace-4_a.C: New. * g++.dg/modules/namespace-4_b.C: New. * g++.dg/modules/namespace-4_c.C: New. * g++.dg/modules/nest-1_a.C: New. * g++.dg/modules/nest-1_b.C: New. * g++.dg/modules/nest-1_c.C: New. * g++.dg/modules/nested-1_a.C: New. * g++.dg/modules/nested-1_b.C: New. * g++.dg/modules/nested-1_c.C: New. * g++.dg/modules/nested-2_a.C: New. * g++.dg/modules/nested-2_b.C: New. * g++.dg/modules/nested-constr-1.h: New. * g++.dg/modules/nested-constr-1_a.H: New. * g++.dg/modules/nested-constr-1_b.C: New. * g++.dg/modules/nested-constr-2_a.C: New. * g++.dg/modules/nested-constr-2_b.C: New. * g++.dg/modules/nested-constr-2_c.C: New. * g++.dg/modules/nodes-1_a.C: New. * g++.dg/modules/nodes-1_b.C: New. * g++.dg/modules/noexcept-1.h: New. * g++.dg/modules/noexcept-1_a.H: New. * g++.dg/modules/noexcept-1_b.C: New. * g++.dg/modules/ns-alias-1_a.C: New. * g++.dg/modules/ns-alias-1_b.C: New. * g++.dg/modules/ns-alias-1_c.C: New. * g++.dg/modules/ns-dir-1_a.C: New. * g++.dg/modules/ns-dir-1_b.C: New. * g++.dg/modules/ns-dup-1_a.C: New. * g++.dg/modules/ns-dup-1_b.C: New. * g++.dg/modules/ns-imp-1_a.C: New. * g++.dg/modules/ns-imp-1_b.C: New. * g++.dg/modules/ns-imp-1_c.C: New. * g++.dg/modules/ns-part-1_a.C: New. * g++.dg/modules/ns-part-1_b.C: New. * g++.dg/modules/ns-part-1_c.C: New. * g++.dg/modules/nsdmi-1_a.C: New. * g++.dg/modules/nsdmi-1_b.C: New. * g++.dg/modules/nsdmi-2.C: New. * g++.dg/modules/omp-1_a.C: New. * g++.dg/modules/omp-1_b.C: New. * g++.dg/modules/omp-1_c.C: New. * g++.dg/modules/omp-2_a.C: New. * g++.dg/modules/omp-2_b.C: New. * g++.dg/modules/only-1.C: New. * g++.dg/modules/only-2.C: New. * g++.dg/modules/only-3.C: New. * g++.dg/modules/operator-1_a.C: New. * g++.dg/modules/operator-1_b.C: New. * g++.dg/modules/p0713-1.C: New. * g++.dg/modules/p0713-2.C: New. * g++.dg/modules/p0713-3.C: New. * g++.dg/modules/part-1_a.C: New. * g++.dg/modules/part-1_b.C: New. * g++.dg/modules/part-1_c.C: New. * g++.dg/modules/part-2_a.C: New. * g++.dg/modules/part-2_b.C: New. * g++.dg/modules/part-2_c.C: New. * g++.dg/modules/part-2_d.C: New. * g++.dg/modules/part-2_e.C: New. * g++.dg/modules/part-3_a.C: New. * g++.dg/modules/part-3_b.C: New. * g++.dg/modules/part-3_c.C: New. * g++.dg/modules/part-3_d.C: New. * g++.dg/modules/part-4_a.C: New. * g++.dg/modules/part-4_b.C: New. * g++.dg/modules/part-4_c.C: New. * g++.dg/modules/part-6_a.C: New. * g++.dg/modules/part-6_b.C: New. * g++.dg/modules/part-6_c.C: New. * g++.dg/modules/part-6_d.C: New. * g++.dg/modules/part-6_e.C: New. * g++.dg/modules/part-7_a.C: New. * g++.dg/modules/part-7_b.C: New. * g++.dg/modules/part-7_c.C: New. * g++.dg/modules/part-hdr-1_a.H: New. * g++.dg/modules/part-hdr-1_b.C: New. * g++.dg/modules/part-hdr-1_c.C: New. * g++.dg/modules/part-mac-1_a.H: New. * g++.dg/modules/part-mac-1_b.C: New. * g++.dg/modules/part-mac-1_c.C: New. * g++.dg/modules/partial-1.h: New. * g++.dg/modules/partial-1_a.H: New. * g++.dg/modules/partial-1_b.C: New. * g++.dg/modules/pmf-1.h: New. * g++.dg/modules/pmf-1_a.H: New. * g++.dg/modules/pmf-1_b.C: New. * g++.dg/modules/pmf-2.h: New. * g++.dg/modules/pmf-2_a.H: New. * g++.dg/modules/pmf-2_b.C: New. * g++.dg/modules/pmp-1_a.C: New. * g++.dg/modules/pmp-1_b.C: New. * g++.dg/modules/pmp-2.C: New. * g++.dg/modules/pmp-3.C: New. * g++.dg/modules/pragma-1_a.H: New. * g++.dg/modules/pragma-1_b.C: New. * g++.dg/modules/predef-1.C: New. * g++.dg/modules/predef-1.h: New. * g++.dg/modules/predef-2.h: New. * g++.dg/modules/predef-2_a.C: New. * g++.dg/modules/predef-2_b.C: New. * g++.dg/modules/preproc-1.C: New. * g++.dg/modules/preproc-2_a.H: New. * g++.dg/modules/preproc-2_b.C: New. * g++.dg/modules/printf-1_a.H: New. * g++.dg/modules/printf-1_b.C: New. * g++.dg/modules/reparent-1_a.C: New. * g++.dg/modules/reparent-1_b.C: New. * g++.dg/modules/reparent-1_c.C: New. * g++.dg/modules/scc-1.C: New. * g++.dg/modules/scc-2.C: New. * g++.dg/modules/shadow-1_a.C: New. * g++.dg/modules/shadow-1_b.C: New. * g++.dg/modules/stat-tpl-1_a.H: New. * g++.dg/modules/static-1_a.C: New. * g++.dg/modules/static-1_b.C: New. * g++.dg/modules/static-1_c.C: New. * g++.dg/modules/std-1_a.C: New. * g++.dg/modules/std-1_b.C: New. * g++.dg/modules/stdns_a.C: New. * g++.dg/modules/stdns_b.C: New. * g++.dg/modules/sv-1.h: New. * g++.dg/modules/sv-1_a.C: New. * g++.dg/modules/sv-1_b.C: New. * g++.dg/modules/sym-subst-1.C: New. * g++.dg/modules/sym-subst-2_a.C: New. * g++.dg/modules/sym-subst-2_b.C: New. * g++.dg/modules/sym-subst-3_a.C: New. * g++.dg/modules/sym-subst-3_b.C: New. * g++.dg/modules/sym-subst-4.C: New. * g++.dg/modules/sym-subst-5.C: New. * g++.dg/modules/sym-subst-6.C: New. * g++.dg/modules/sys/alias-2_a.H: New. * g++.dg/modules/sys/inext-1.H: New. * g++.dg/modules/tdef-1_a.C: New. * g++.dg/modules/tdef-1_b.C: New. * g++.dg/modules/tdef-2_a.C: New. * g++.dg/modules/tdef-2_b.C: New. * g++.dg/modules/tdef-2_c.C: New. * g++.dg/modules/tdef-3_a.C: New. * g++.dg/modules/tdef-3_b.C: New. * g++.dg/modules/tdef-3_c.C: New. * g++.dg/modules/tdef-4_a.C: New. * g++.dg/modules/tdef-4_b.C: New. * g++.dg/modules/tdef-4_c.C: New. * g++.dg/modules/tdef-5_a.C: New. * g++.dg/modules/tdef-5_b.C: New. * g++.dg/modules/tdef-6_a.H: New. * g++.dg/modules/tdef-6_b.C: New. * g++.dg/modules/tdef-7.h: New. * g++.dg/modules/tdef-7_a.H: New. * g++.dg/modules/tdef-7_b.C: New. * g++.dg/modules/tdef-8_a.C: New. * g++.dg/modules/tdef-8_b.C: New. * g++.dg/modules/tdef-inst-1.h: New. * g++.dg/modules/tdef-inst-1_a.C: New. * g++.dg/modules/tdef-inst-1_b.C: New. * g++.dg/modules/thunk-1_a.C: New. * g++.dg/modules/thunk-1_b.C: New. * g++.dg/modules/tmpl-part-req-1.h: New. * g++.dg/modules/tmpl-part-req-1_a.H: New. * g++.dg/modules/tmpl-part-req-1_b.C: New. * g++.dg/modules/tmpl-part-req-2.h: New. * g++.dg/modules/tmpl-part-req-2_a.H: New. * g++.dg/modules/tmpl-part-req-2_b.C: New. * g++.dg/modules/token-1.C: New. * g++.dg/modules/token-2_a.C: New. * g++.dg/modules/token-2_b.C: New. * g++.dg/modules/token-3.C: New. * g++.dg/modules/token-4.C: New. * g++.dg/modules/token-5.C: New. * g++.dg/modules/tpl-alias-1.h: New. * g++.dg/modules/tpl-alias-1_a.H: New. * g++.dg/modules/tpl-alias-1_b.C: New. * g++.dg/modules/tpl-ary-1.h: New. * g++.dg/modules/tpl-ary-1_a.H: New. * g++.dg/modules/tpl-ary-1_b.C: New. * g++.dg/modules/tpl-extern-fn-1_a.H: New. * g++.dg/modules/tpl-extern-fn-1_b.C: New. * g++.dg/modules/tpl-extern-var-1_a.H: New. * g++.dg/modules/tpl-extern-var-1_b.C: New. * g++.dg/modules/tpl-friend-1_a.C: New. * g++.dg/modules/tpl-friend-1_b.C: New. * g++.dg/modules/tpl-friend-2_a.C: New. * g++.dg/modules/tpl-friend-2_b.C: New. * g++.dg/modules/tpl-friend-3_a.C: New. * g++.dg/modules/tpl-friend-3_b.C: New. * g++.dg/modules/tpl-friend-4_a.C: New. * g++.dg/modules/tpl-friend-4_b.C: New. * g++.dg/modules/tpl-friend-5_a.C: New. * g++.dg/modules/tpl-friend-5_b.C: New. * g++.dg/modules/tpl-friend-6_a.C: New. * g++.dg/modules/tpl-friend-6_b.C: New. * g++.dg/modules/tpl-friend-7_a.C: New. * g++.dg/modules/tpl-friend-7_b.C: New. * g++.dg/modules/tpl-friend-merge-1.cc: New. * g++.dg/modules/tpl-friend-merge-1.h: New. * g++.dg/modules/tpl-friend-merge-1_a.H: New. * g++.dg/modules/tpl-friend-merge-1_b.H: New. * g++.dg/modules/tpl-friend-merge-1_c.H: New. * g++.dg/modules/tpl-friend-merge-1_d.C: New. * g++.dg/modules/tpl-friend-merge-1_e.C: New. * g++.dg/modules/tpl-friend-merge-1_f.C: New. * g++.dg/modules/tpl-spec-1_a.C: New. * g++.dg/modules/tpl-spec-1_b.C: New. * g++.dg/modules/tpl-spec-2_a.C: New. * g++.dg/modules/tpl-spec-2_b.C: New. * g++.dg/modules/tpl-spec-2_c.C: New. * g++.dg/modules/tpl-spec-2_d.C: New. * g++.dg/modules/tpl-spec-3_a.C: New. * g++.dg/modules/tpl-spec-3_b.C: New. * g++.dg/modules/tpl-spec-4_a.C: New. * g++.dg/modules/tpl-spec-4_b.C: New. * g++.dg/modules/tpl-spec-5_a.C: New. * g++.dg/modules/tpl-spec-5_b.C: New. * g++.dg/modules/tpl-spec-6_a.C: New. * g++.dg/modules/tpl-spec-6_b.C: New. * g++.dg/modules/tpl-spec-7.C: New. * g++.dg/modules/tpl-tpl-friend-1_a.C: New. * g++.dg/modules/tpl-tpl-friend-1_b.C: New. * g++.dg/modules/tpl-tpl-mem-1_a.C: New. * g++.dg/modules/tpl-tpl-mem-1_b.C: New. * g++.dg/modules/tpl-tpl-merge-1.h: New. * g++.dg/modules/tpl-tpl-merge-1_a.H: New. * g++.dg/modules/tpl-tpl-merge-1_b.C: New. * g++.dg/modules/tpl-tpl-merge-2.h: New. * g++.dg/modules/tpl-tpl-merge-2_a.H: New. * g++.dg/modules/tpl-tpl-merge-2_b.C: New. * g++.dg/modules/tpl-tpl-parm-1_a.H: New. * g++.dg/modules/tpl-tpl-parm-1_b.C: New. * g++.dg/modules/tpl-tpl-parm-2.h: New. * g++.dg/modules/tpl-tpl-parm-2_a.H: New. * g++.dg/modules/tpl-tpl-parm-2_b.C: New. * g++.dg/modules/tplmem-1_a.C: New. * g++.dg/modules/tplmem-1_b.C: New. * g++.dg/modules/tplmem-3_a.C: New. * g++.dg/modules/tplmem-3_b.C: New. * g++.dg/modules/ttp-1_a.C: New. * g++.dg/modules/ttp-1_b.C: New. * g++.dg/modules/ttp-2_a.C: New. * g++.dg/modules/ttp-2_b.C: New. * g++.dg/modules/ttp-3_a.C: New. * g++.dg/modules/ttp-3_b.C: New. * g++.dg/modules/typename-1_a.C: New. * g++.dg/modules/typename-1_b.C: New. * g++.dg/modules/unnamed-1_a.C: New. * g++.dg/modules/unnamed-1_b.C: New. * g++.dg/modules/unnamed-2.C: New. * g++.dg/modules/used-1_a.H: New. * g++.dg/modules/used-1_b.H: New. * g++.dg/modules/used-1_c.C: New. * g++.dg/modules/using-1_a.C: New. * g++.dg/modules/using-1_b.C: New. * g++.dg/modules/using-1_c.C: New. * g++.dg/modules/using-2_a.C: New. * g++.dg/modules/using-2_b.C: New. * g++.dg/modules/using-2_c.C: New. * g++.dg/modules/using-3.C: New. * g++.dg/modules/using-4_a.C: New. * g++.dg/modules/using-4_b.C: New. * g++.dg/modules/using-5_a.C: New. * g++.dg/modules/using-5_b.C: New. * g++.dg/modules/using-6_a.C: New. * g++.dg/modules/using-6_b.C: New. * g++.dg/modules/using-7.C: New. * g++.dg/modules/using-8_a.C: New. * g++.dg/modules/using-8_b.C: New. * g++.dg/modules/using-enum-1_a.H: New. * g++.dg/modules/using-enum-1_b.C: New. * g++.dg/modules/var-1_a.C: New. * g++.dg/modules/var-1_b.C: New. * g++.dg/modules/var-tpl-1_a.C: New. * g++.dg/modules/var-tpl-1_b.C: New. * g++.dg/modules/var-tpl-concept-1.h: New. * g++.dg/modules/var-tpl-concept-1_a.C: New. * g++.dg/modules/var-tpl-concept-1_b.C: New. * g++.dg/modules/virt-1_a.C: New. * g++.dg/modules/virt-1_b.C: New. * g++.dg/modules/virt-2_a.C: New. * g++.dg/modules/virt-2_b.C: New. * g++.dg/modules/virt-2_c.C: New. * g++.dg/modules/vmort-1_a.C: New. * g++.dg/modules/vmort-1_b.C: New. * g++.dg/modules/vmort-2_a.C: New. * g++.dg/modules/vmort-2_b.C: New. * g++.dg/modules/vmort-2_c.C: New. * g++.dg/modules/vtt-1_a.C: New. * g++.dg/modules/vtt-1_b.C: New. * g++.dg/modules/vtt-1_c.C: New. * g++.dg/modules/vtt-2.h: New. * g++.dg/modules/vtt-2_a.H: New. * g++.dg/modules/vtt-2_b.C: New.
2020-12-22c++: Handle array members in build_comparison_op [PR93480]Jakub Jelinek2-0/+73
http://eel.is/c++draft/class.compare.default#6 says for the expanded list of subobjects: "In that list, any subobject of array type is recursively expanded to the sequence of its elements, in the order of increasing subscript." but build_comparison_op just tried to compare the whole arrays, which failed and therefore the defaulted comparison was deleted. The following patch instead compares the array elements, and if info.defining, adds runtime loops around it so that it iterates over increasing subscripts. For flexible array members it punts, we don't know how large those will be, for zero sized arrays it doesn't even try to compare the elements, because if there are no elements, there is nothing to compare, and for [1] arrays it will not emit a loop because it is enough to use [0] array ref to cover everything. 2020-12-21 Jakub Jelinek <jakub@redhat.com> PR c++/93480 * method.c (common_comparison_type): If comps[i] is a TREE_LIST, use its TREE_VALUE instead. (build_comparison_op): Handle array members. * g++.dg/cpp2a/spaceship-synth10.C: New test. * g++.dg/cpp2a/spaceship-synth-neg5.C: New test.
2020-12-22i386: Fix __builtin_floor with FE_DOWNWARD rounding direction [PR96793]Uros Bizjak1-0/+28
x86_expand_floorceil expander uses x86_sse_copysign_to_positive, which is unable to change the sign from - to +. When FE_DOWNWARD rounding direction is in effect, the expanded sequence that involves subtraction can trigger x - x = -0.0 special rule. x86_sse_copysign_to_positive fails to change the sign of the intermediate value, assumed to always be positive, back to positive. The patch adds one extra fabs that strips the sign from the intermediate value when flag_rounding_math is in effect. 2020-12-22 Uroš Bizjak <ubizjak@gmail.com> gcc/ PR target/96793 * config/i386/i386-expand.c (ix86_expand_floorceil): Remove the sign of the intermediate value for flag_rounding_math. (ix86_expand_floorceildf_32): Ditto. gcc/testsuite/ PR target/96793 * gcc.target/i386/pr96793.c: New test.
2020-12-22Daily bump.GCC Administrator1-0/+15
2020-12-22gimplify: Gimplify value in gimplify_init_ctor_eval_range [PR98353]Jakub Jelinek1-0/+17
gimplify_init_ctor_eval_range wasn't gimplifying value, so if it wasn't a gimple val, verification at the end of gimplification would ICE (or with release checking some random pass later on would ICE or misbehave). 2020-12-21 Jakub Jelinek <jakub@redhat.com> PR c++/98353 * gimplify.c (gimplify_init_ctor_eval_range): Gimplify value before storing it into cref. * g++.dg/opt/pr98353.C: New test.
2020-12-21fold-const: Fix up a buffer overflow in native_encode_initializer [PR98407]Jakub Jelinek1-0/+10
For flexible array members we need to incrementally clear just from ptr + total_bytes up to new ptr + total_bytes, but memset has been called with the length from ptr, so was missing - total_bytes. Additionally, in this code off is guaranteed to be -1 and thus o 0, so don't bother pretending we could handle anything else, it would be more complicated than that. 2020-12-21 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/98407 * fold-const.c (native_encode_initializer): When handling flexible array members, fix up computation of length for memset. Also remove " - o" as o is always guaranteed to be 0 in this code path. * gcc.c-torture/compile/pr98407.c: New test.
2020-12-21openmp: Fix up handling of addressable temporaries in simd lb, b and incr ↵Jakub Jelinek1-0/+18
expressions [PR98383] For simd, we have code to artificially add locally defined variables into private clauses if they are addressable, so that omplower turns them into "omp simd array" variables. As the testcase shows, this is undesirable if those temporaries only show in the lb, b or incr expressions and nowhere else, if it is just used there, we really want normal scalar temporaries. This patch implements that by making sure we don't set for those GOVD_LOCAL-ish temporaries turned into GOVD_PRIVATE the GOVD_SEEN flag during gimplification of the lb, b and incr expressions, which means that the private clause isn't added for those. 2020-12-21 Jakub Jelinek <jakub@redhat.com> PR c++/98383 * gimplify.c (struct gimplify_omp_ctx): Add in_for_exprs flag. (gimple_add_tmp_var): For addressable temporaries appearing in simd lb, b or incr expressions, don't add a private clause unless it is seen also outside of those expressions in the simd body. (omp_notice_variable): Likewise. (gimplify_omp_for): Set and reset in_for_exprs around gimplification of lb, b or incr expressions. * g++.dg/gomp/pr98383.C: New test.