aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-08-20Daily bump.GCC Administrator10-1/+204
2021-08-20Fold more constants during veclower pass.Roger Sayle2-4/+7
An issue with a backend patch I've been investigating has revealed a missed optimization opportunity during GCC's vector lowering pass. An unrecognized insn for "(set (reg:SI) (not:SI (const_int 0))" revealed that not only was my expander not expecting a NOT with a constant operand, but also that veclower was producing the dubious tree expression ~0. The attached patch replaces a call to gimple_build_assign with a call to either gimplify_build1 or gimplify_build2 depending upon whether the operation takes one or two operands. The net effect is that where GCC previously produced the following optimized gimple for testsuite/c-c++common/Wunused-var-16.c (notice the ~0 and the "& 0"): void foo () { V x; V y; vector(16) unsigned char _1; unsigned char _7; unsigned char _8; y_2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; x_3 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; _7 = ~0; _1 = {_7, _7, _7, _7, _7, _7, _7, _7, _7, _7, _7, _7, _7, _7, _7, _7}; _8 = 0 & _7; y_4 = {_8, _8, _8, _8, _8, _8, _8, _8, _8, _8, _8, _8, _8, _8, _8, _8}; v = y_4; return; } With this patch we now generate: void foo () { V x; V y; vector(16) unsigned char _1; y_2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; x_3 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; _1 = { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 2 55, 255 }; y_4 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; v = y_4; return; } 2021-08-20 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * tree-vect-generic.c (expand_vector_operations_1): Use either gimplify_build1 or gimplify_build2 instead of gimple_build_assign when constructing scalar splat expressions. gcc/testsuite/ChangeLog * c-c++-common/Wunused-var-16.c: Add an extra check that ~0 is optimized away.
2021-08-19rs6000: Fix ICE expanding lxvp and stxvp gimple built-ins [PR101849]Peter Bergner2-0/+28
PR101849 shows we ICE on a test case when we pass a non __vector_pair * pointer to the __builtin_vsx_lxvp and __builtin_vsx_stxvp built-ins that is cast to __vector_pair *. The problem is that when we expand the built-in, the cast has already been removed from gimple and we are only given the base pointer. The solution used here (which fixes the ICE) is to catch this case and convert the pointer to a __vector_pair * pointer when expanding the built-in. 2021-08-19 Peter Bergner <bergner@linux.ibm.com> gcc/ PR target/101849 * config/rs6000/rs6000-call.c (rs6000_gimple_fold_mma_builtin): Cast pointer to __vector_pair *. gcc/testsuite/ PR target/101849 * gcc.target/powerpc/pr101849.c: New test.
2021-08-19Fortran - simplify length of substring with constant boundsHarald Anlauf2-1/+127
gcc/fortran/ChangeLog: PR fortran/100950 * simplify.c (substring_has_constant_len): New. (gfc_simplify_len): Handle case of substrings with constant bounds. gcc/testsuite/ChangeLog: PR fortran/100950 * gfortran.dg/pr100950.f90: New test.
2021-08-19Document enable_ranger and disable_ranger.Martin Sebor2-0/+10
gcc: * gimple-range.cc: Add comments. * gimple-range.h: Same.
2021-08-19Release resources acquired by enable_ranger() [PR101984].Martin Sebor1-0/+4
Resolves: PR middle-end/101984 - gimple-ssa-warn-access memory leak gcc/ChangeLog: PR middle-end/101984 * gimple-ssa-warn-access.cc (pass_waccess::execute): Also call disable_ranger.
2021-08-19Objective-C, NeXT runtime: Correct the default for fobjc-nilcheck.Iain Sandoe1-0/+4
It is intended that the default for the NeXT runtime at ABI 2 is to check for nil message receivers. This updates this to match the documented behaviour and to match the behaviour of the system tools. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/objc/ChangeLog: * objc-next-runtime-abi-02.c (objc_next_runtime_abi_02_init): Default receiver nilchecks on.
2021-08-19Drop stabs from h8/300 and v850 portsJeff Law2-11/+4
gcc/ * config.gcc (h8300-*-elf*): Do not include dbxelf.h. (h8300-*-linux*, v850-*-rtems*, v850*-elf*): Likewise. * config/v850/v850.h (DEFAULT_GDB_EXTENSIONS): Remove.
2021-08-19Define STAGE1_LIBS to link against libcl.a in stage1 on hpux.John David Anglin1-0/+4
2021-08-19 Arnaud Charlet <charlet@adacore.com> PR ada/101924 gcc/ada/ChangeLog: * gcc-interface/Make-lang.in (STAGE1_LIBS): Define on hpux.
2021-08-19libstdc++: Move status table entry to be with other ranges papersJonathan Wakely2-16/+15
Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * doc/xml/manual/status_cxx2020.xml: Move row earlier in table. * doc/html/manual/status.html: Regenerate.
2021-08-19libstdc++: Update Doxygen config template to Doxygen 1.9.2Jonathan Wakely1-69/+6
This adds my new SHOW_HEADERFILE option, and removes some obsolete options. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * doc/doxygen/user.cfg.in: Update to Doxygen 1.9.2
2021-08-19libstdc++: Don't check always-true condition [PR101965]Jonathan Wakely1-4/+2
Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: PR libstdc++/101965 * include/std/charconv (__to_chars_i): Remove redundant check.
2021-08-19c++: Fix PR number in testcase [PR101803]Patrick Palka2-3/+3
Also clarify the description of CONSTRUCTOR_BRACES_ELIDED_P. PR c++/101803 gcc/cp/ChangeLog: * cp-tree.h (CONSTRUCTOR_IS_PAREN_INIT): Clarify comment. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/class-deduction-aggr12.C: Fix PR number.
2021-08-19Fix PR number for r12-2991 in ChangeLogsPatrick Palka2-2/+2
2021-08-19libstdc++: Fix move construction of std::tuple with array elements [PR101960]Jonathan Wakely2-1/+9
An array member cannot be direct-initialized in a ctor-initializer-list, so use the base class' move constructor, which does the right thing for both arrays and non-arrays. This constructor could be defaulted, but that would make it trivial for some specializations, which would change the argument passing ABI. Do that for the versioned namespace only. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: PR libstdc++/101960 * include/std/tuple (_Tuple_impl(_Tuple_impl&&)): Use base class' move constructor. Define as defaulted for versioned namespace. * testsuite/20_util/tuple/cons/101960.cc: New test.
2021-08-19libstdc++: Document P1739R4 status [PR100139]Jonathan Wakely2-1/+15
We should document the status of this unimplemented feature. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: PR libstdc++/100139 * doc/xml/manual/status_cxx2020.xml: Add P1739R4 to status table. * doc/html/manual/status.html: Regenerate.
2021-08-19libstdc++: Improve doxygen docs for smart pointersJonathan Wakely2-1/+21
Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/bits/shared_ptr.h: Add @since and @headerfile tags. * include/bits/unique_ptr.h: Add @headerfile tags.
2021-08-19libstdc++: Improve overflow check for file timestampsJonathan Wakely1-1/+1
The current code assumes that system_clock::duration is nanoseconds, and also performs a value-changing conversion from nanoseconds::max() to double (which doesn't matter after dividing by 1e9, but triggers a warning with Clang nonetheless). A better solution is to use system_clock::duration::max() and perform the comparison entirely using the std::chrono types, rather than with dimensionless arithmetic types. This doesn't address the FIXME in the function, so the overflow check still rejects some values that could be represented by the file_clock. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * src/filesystem/ops-common.h (filesystem::file_time): Improve overflow check by using system_clock::duration::max().
2021-08-19libstdc++: Tweak whitespaceJonathan Wakely1-1/+1
Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/bits/stl_tree.h: Tweak whitespace.
2021-08-19expand: Add new clrsb fallback expansion [PR101950]Jakub Jelinek3-0/+118
As suggested in the PR, the following patch adds two new clrsb expansion possibilities if target doesn't have clrsb_optab for the requested nor wider modes, but does have clz_optab for the requested mode. One expansion is clrsb (op0) expands as clz (op0 ^ (((stype)op0) >> (prec-1))) - 1 which is usable if CLZ_DEFINED_VALUE_AT_ZERO is 2 with value of prec, because the clz argument can be 0 and clrsb should give prec-1 in that case. The other expansion is clz (((op0 << 1) ^ (((stype)op0) >> (prec-1))) | 1) where the clz argument is never 0, but it is one operation longer. E.g. on x86_64-linux with -O2 -mno-lzcnt, this results for int foo (int x) { return __builtin_clrsb (x); } in - subq $8, %rsp - movslq %edi, %rdi - call __clrsbdi2 - addq $8, %rsp - subl $32, %eax + leal (%rdi,%rdi), %eax + sarl $31, %edi + xorl %edi, %eax + orl $1, %eax + bsrl %eax, %eax + xorl $31, %eax and with -O2 -mlzcnt: + movl %edi, %eax + sarl $31, %eax + xorl %edi, %eax + lzcntl %eax, %eax + subl $1, %eax On armv7hl-linux-gnueabi with -O2: - push {r4, lr} - bl __clrsbsi2 - pop {r4, pc} + @ link register save eliminated. + eor r0, r0, r0, asr #31 + clz r0, r0 + sub r0, r0, #1 + bx lr As it (at least usually) will make code larger, it is disabled for -Os or cold instructions. 2021-08-19 Jakub Jelinek <jakub@redhat.com> PR middle-end/101950 * optabs.c (expand_clrsb_using_clz): New function. (expand_unop): Use it as another clrsb expansion fallback. * gcc.target/i386/pr101950-1.c: New test. * gcc.target/i386/pr101950-2.c: New test.
2021-08-19openmp: Fix ICE on requires clause with atomic_default_mem_order (Jakub Jelinek3-6/+26
When working on error directive, I've noticed the C FE ICEs on #pragma omp requires atomic_default_mem_order ( where it tries to peek 2nd token after the CPP_PRAGMA_EOL (or CPP_EOF) in there in order to improve error-recovery on say atomic_default_mem_order (acquire) or atomic_default_mem_order (seqcst) etc. The C++ FE didn't ICE, but it is better to follow the same thing there. 2021-08-19 Jakub Jelinek <jakub@redhat.com> gcc/c/ * c-parser.c (c_parser_omp_requires): Don't call c_parser_peek_2nd_token and optionally consume token if current token is CPP_EOF, CPP_PRAGMA_EOL or CPP_CLOSE_PAREN. gcc/cp/ * parser.c (cp_parser_omp_requires): Don't call cp_lexer_nth_token_is and optionally consume token if current token is CPP_EOF, CPP_PRAGMA_EOL or CPP_CLOSE_PAREN. gcc/testsuite/ * c-c++-common/gomp/requires-3.c: Add testcase for atomic_default_mem_order ( at the end of line without corresponding ).
2021-08-19testsuite, JIT, Darwin: Adjust asm tests for Mach-O.Iain Sandoe2-0/+25
This provides adjusted assembler fragments that are suitable for x86_64 Mach-O. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/testsuite/ChangeLog: * jit.dg/test-asm.c: Provide Mach-O fragment. * jit.dg/test-asm.cc: Likewise.
2021-08-19openmp: For C++ ensure nothing directive has no operandsJakub Jelinek2-1/+3
When working on error directive, I've noticed that while C FE diagnosed clauses on nothing directive which doesn't allow any, the C++ FE silently accepted it. 2021-08-19 Jakub Jelinek <jakub@redhat.com> * parser.c (cp_parser_omp_nothing): Use cp_parser_require_pragma_eol instead of cp_parser_skip_to_pragma_eol. * c-c++-common/gomp/nothing-2.c: New test.
2021-08-19JIT, testsuite, Darwin: Initial testsuite fixes.Iain Sandoe5-4/+347
The testsuite setup for jit is not compatible with Darwin since it assumes that all targets support --export-dynamic. - this is fixed by adding '-rdynamic' conditionally upon target support for that (-rdynamic will be converted to the appropriate linker option). There is also an assumption that a suitable version of dejagnu.h is present in some default include search path that is usable from the testsuite. This is not the case for Darwin (dejagnu.h is not installed, and would not, in general, be found in any default include search path if installed via one of the main 'distros'). Also the upstream dejagnu.h has a definition of 'wait()' that clashes with a libc routines and therefore causes fails in the testsuite. - This patch imports the header from dejagnu-1.6.2 and * renames it to 'jit-dejagnu.h' * patches it to avoid unused variable warnings and the clash with the libc definition of wait () * In accordance with the advice in the expect man page, ensures that the final output of the 'totals' print is stable. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/jit/ChangeLog: * docs/examples/tut04-toyvm/toyvm.c: Include jit-dejagnu.h. * docs/examples/tut04-toyvm/toyvm.cc: Likewise. * jit-dejagnu.h: New file, imported from dejagnu-1.6.2 and patched for this application. gcc/testsuite/ChangeLog: * jit.dg/harness.h: Include jit-dejagnu.h. * jit.dg/jit.exp: Use -rdynamic conditionally on target support, instead of unconditional -Wl,--export-dynamic.
2021-08-19Fix up 'gcc.dg/pr78213.c' for '--enable-checking=release' etc.Thomas Schwinge1-1/+2
Fix up for r242748 (commit 3615816da830d41f67a5d8955ae588eba7f0b6fb) "[PR target/78213] Do not ICE on non-empty -fself-test", as made apparent by recent commit a42467bdb70650cd2f421e67b6c3418f74feaec2 "Restore 'gcc.dg/pr78213.c' testing", after the test case had gotten disabled in r243681 (commit ecfc21ff34ddc6f8aa517251fb51494c68ff741f) "Introduce selftest::locate_file" shortly after its original introduction. gcc/testsuite/ PR testsuite/101969 * gcc.dg/pr78213.c: Fix up for '--enable-checking=release' etc.
2021-08-19Revert "Add the member integer_to_sse to processor_cost as a cost simulation ↵liuhongt4-33/+2
for movd/pinsrd. It will be used to calculate the cost of vec_construct." This reverts commit 872da9a6f664a06d73c987aa0cb2e5b830158a10. PR target/101936 PR target/101929
2021-08-19Daily bump.GCC Administrator17-1/+381
2021-08-18Fortran: Add OpenMP's nothing directive support (con't)Tobias Burnus2-1/+1
Fix directory to enable -fopenmp processing. gcc/testsuite/ PR testsuite/101963 * gfortran.dg/nothing-1.f90: Moved to ... * gfortran.dg/gomp/nothing-1.f90: ... here. * gfortran.dg/nothing-2.f90: Moved to ... * gfortran.dg/gomp/nothing-2.f90: ... here; avoid $ issue in $OMP in dg-error.
2021-08-18Darwin, jit: Fix build [PR100613].Iain Sandoe1-1/+62
The generic unix build is not completely suitable for Darwin platforms: * It is a convention to encode the library versioning in the binary and to have only one level of symlink for the installed files. This needs to be applied to the installation too. * The library needs to be built with its correct install name so that two-level library naming works. * The extension for shared libraries should be .dylib Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> PR jit/100613 - libgccjit should produce dylib on macOS PR jit/100613 gcc/jit/ChangeLog: * Make-lang.in: Provide clauses for Darwin hosts.
2021-08-18configure: Allow host fragments to react to --enable-host-shared.Iain Sandoe3-0/+14
This makes the host_shared value available to host makefile fragments. It uses this to adjust Darwin's mdynamic-no-pic in the case that shared host resources are required. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> ChangeLog: * Makefile.in: Regenerate. * Makefile.tpl: Make the state of the configured host shared flag available to makefile fragements. config/ChangeLog: * mh-darwin: Require a non-shared host configuration to enable mdynamic-no-pic where that is supported.
2021-08-18Objective-C: fix crash with -fobjc-nilcheckIain Sandoe8-22/+108
When -fobjc-nilcheck is enabled, messages that result in a struct type should yield a zero-initialized struct when sent to nil. Currently, the frontend crashes when it encounters this situation. This patch fixes the crash by generating the tree for the `{}` initializer. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> Co-authored-by: Matt Jacobson <mhjacobson@me.com> PR objc/101666 gcc/objc/ChangeLog: * objc-act.c (objc_build_constructor): Handle empty constructor lists. * objc-next-runtime-abi-02.c (build_v2_objc_method_fixup_call): Handle nil receivers. (build_v2_build_objc_method_call): Likewise. gcc/testsuite/ChangeLog: * obj-c++.dg/pr101666-0.mm: New test. * obj-c++.dg/pr101666-1.mm: New test. * obj-c++.dg/pr101666.inc: New. * objc.dg/pr101666-0.m: New test. * objc.dg/pr101666-1.m: New test. * objc.dg/pr101666.inc: New.
2021-08-18libiberty, Darwin : Fix simple-object LTO table for cross-endian case.Iain Sandoe1-0/+5
We encapsulate streamed IR in three special sections with a table that describes their entries. The table is expected to be written with native endianness for the target, but for cross-endian cross- compilation the swapping was omitted. Fixed thus. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> libiberty/ChangeLog: * simple-object-mach-o.c (simple_object_mach_o_write_segment): Arrange to swap the LTO index tables where needed.
2021-08-18Darwin: Handle the -rpath command line option.Iain Sandoe2-2/+3
This handles the command line '-rpath' option by passing it through to the static linker. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> gcc/ChangeLog: * config.gcc: Include rpath.opt for Darwin. * config/darwin.h (DRIVER_SELF_SPECS): Handle -rpath.
2021-08-18analyzer: detect and analyze virtual function callsAnkur Saini5-0/+212
2021-08-15 Ankur Saini <arsenic@sourceware.org> gcc/analyzer/ChangeLog: PR analyzer/97114 * region-model.cc (region_model::get_rvalue_1): Add case for OBJ_TYPE_REF. gcc/testsuite/ChangeLog: PR analyzer/97114 * g++.dg/analyzer/vfunc-2.C: New test. * g++.dg/analyzer/vfunc-3.C: New test. * g++.dg/analyzer/vfunc-4.C: New test. * g++.dg/analyzer/vfunc-5.C: New test.
2021-08-18analyzer: detect and analyze calls via function pointerAnkur Saini17-54/+481
2021-07-29 Ankur Saini <arsenic@sourceware.org> gcc/analyzer/ChangeLog: PR analyzer/100546 * analysis-plan.cc (analysis_plan::use_summary_p): Don't use call summaries if there is no callgraph edge * checker-path.cc (call_event::call_event): Handle calls events that are not represented by a supergraph call edge (return_event::return_event): Likewise. (call_event::get_desc): Work with new call_event structure. (return_event::get_desc): Likeise. * checker-path.h (call_event::m_src_snode): New field. (call_event::m_dest_snode): New field. (return_event::m_src_snode): New field. (return_event::m_dest_snode): New field. * diagnostic-manager.cc (diagnostic_manager::prune_for_sm_diagnostic)<case EK_CALL_EDGE>: Refactor to work with edges without callgraph edge. (diagnostic_manager::prune_for_sm_diagnostic)<case EK_RETURN_EDGE>: Likewise. * engine.cc (dynamic_call_info_t::update_model): New function. (dynamic_call_info_t::add_events_to_path): New function. (exploded_graph::create_dynamic_call): New function. (exploded_graph::process_node): Work with dynamically discovered calls. * exploded-graph.h (class dynamic_call_info_t): New class. (exploded_graph::create_dynamic_call): New decl. * program-point.cc (program_point::push_to_call_stack): New function. (program_point::pop_from_call_stack): New function. * program-point.h (program_point::push_to_call_stack): New decl. (program_point::pop_from_call_stack): New decl. * program-state.cc (program_state::push_call): New function. (program_state::returning_call): New function. * program-state.h (program_state::push_call): New decl. (program_state::returning_call): New decl. * region-model.cc (region_model::update_for_gcall) New function. (region_model::update_for_return_gcall): New function. (egion_model::update_for_call_superedge): Get the underlying gcall and update for gcall. (region_model::update_for_return_superedge): Likewise. * region-model.h (region_model::update_for_gcall): New decl. (region_model::update_for_return_gcall): New decl. * state-purge.cc (state_purge_per_ssa_name::process_point): Update to work with calls without underlying cgraph edge. * supergraph.cc (supergraph::supergraph) Split snodes at every callsite. * supergraph.h (supernode::get_returning_call) New accessor. gcc/testsuite/ChangeLog: PR analyzer/100546 * gcc.dg/analyzer/function-ptr-4.c: New test. * gcc.dg/analyzer/pr100546.c: New test.
2021-08-18Make 'gcc/hash-map-tests.c:test_map_of_type_with_ctor_and_dtor_expand' work ↵Thomas Schwinge1-3/+14
on 32-bit architectures [PR101959] Bug fix for recent commit e4f16e9f357a38ec702fb69a0ffab9d292a6af9b "Add more self-tests for 'hash_map' with Value type with non-trivial constructor/destructor". gcc/ PR bootstrap/101959 * hash-map-tests.c (test_map_of_type_with_ctor_and_dtor_expand): Use an 'int_hash'.
2021-08-18aarch64: Fix float <-> int errors in vld4[q]_lane intrinsicsJonathan Wright1-4/+4
A previous commit "aarch64: Remove macros for vld4[q]_lane Neon intrinsics" introduced some float <-> int type conversion errors. This patch fixes those errors. gcc/ChangeLog: 2021-08-18 Jonathan Wright <jonathan.wright@arm.com> * config/aarch64/arm_neon.h (vld3_lane_f64): Use float RTL pattern and type cast. (vld4_lane_f32): Use float RTL pattern. (vld4q_lane_f64): Use float type cast.
2021-08-18libstdc++: Improve doxygen documentation for std::unique_ptrJonathan Wakely1-19/+65
Add more detailed documentation for unique_ptr and related components. The new alias templates for the _MakeUniq SFINAE helper make the generated docs look better too. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/bits/unique_ptr.h (default_delete): Add @since tag. (unique_ptr, unique_ptr<T[]>): Likewise. Improve @brief. (make_unique, make_unique_for_overwrite): Likewise. Add @tparam, @param, and @returns. (_MakeUniq): Move to __detail namespace. Add alias template helpers.
2021-08-18libstdc++: Improve doxygen comments in <bits/stl_function.h>Jonathan Wakely1-60/+74
Add notes about deprecation and modern replacements. Fix bogus "memory_adaptors" group name. Use markdown for formatting. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/bits/stl_function.h: Improve doxygen comments.
2021-08-18libstdc++: Enable doxygen processing for C++20 componentsJonathan Wakely3-18/+65
Improve grouping, add @since and @deprecated information. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * doc/doxygen/user.cfg.in (PREDEFINED): Enable doxygen processing for C++20 components and components that depend on compiler features. * include/bits/stl_algo.h (random_shuffle): Use @deprecated. * include/std/type_traits: Improve doxygen comments for C++20 traits.
2021-08-18libstdc++: Simplify n-ary arithmetic promotion traitsJonathan Wakely2-30/+15
The std::complex partial specializations have been unnecessary since 774c3d8647cc7012937cfc9d2d6dacc85b6cf8e9 Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/ext/type_traits.h (__promote_2, __promote_3) (__promote_4): Redfine as alias templates using __promoted_t. * include/std/complex (__promote_2): Remove partial specializations for std::complex.
2021-08-18libstdc++: Minor optimization for min/max/minmaxJonathan Wakely1-28/+50
The debug mode checks for a valid range are redundant when we have an initializer_list argument, because we know it's a valid range already. By making std::min(initialier_list<T>) call the internal __min_element function directly we avoid a function call and skip those checks. The same can be done for the overload taking a comparison function, and also for the std::max and std::minmax overloads for initializer_list arguments. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/bits/stl_algo.h (min(initializer_list<T>)) (min(initializer_list<T>, Compare)): Call __min_element directly to avoid redundant debug checks for valid ranges. (max(initializer_list<T>), max(initializer_list<T>, Compare)): Likewise, for __max_element. (minmax(initializer_list<T>), minmax(initializer_list<T>, Compare)): Likewise, for __minmax_element.
2021-08-18libstdc++: Fix CTAD for debug sequence containersJonathan Wakely4-4/+24
This fixes some 23_containers/*/cons/deduction.cc failures seen with -std=c++17/-D_GLIBCXX_DEBUG, caused by non-immediate errors when substituting template arguments into an incorrect specialization of the std::__cxx1998 base class. This happens because the size_type member of the debug container is _Base_type::size_type, so is non-deducible, and the deduced types get substituted into _Base_type, triggering the static_assert that checks the allocator's value_type matches the container's. The solution is to make the C(size_type, const T&, const Alloc&) constructors of the debug sequence containers non-deducible. In order to make CTAD work again deduction guides that use std::size_t for the first argument are added. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * include/debug/deque (deque(size_type, const T&, const A&)): Prevent class template argument deduction and replace with a deduction guide. * include/debug/forward_list (forward_list(size_type, const T&, const A&)): Likewise. * include/debug/list (list(size_type, const T&, const A&)): Likewise. * include/debug/vector (vector(size_type, const T&, const A&)): Likewise.
2021-08-18libstdc++: Fix vector<bool> printer tests to work in debug modeJonathan Wakely3-19/+19
This fixes a compilation error in debug mode, due to std::_Bit_reference not being defined, because it's in namespace std::__cxx1998 instead. We can refer to it as vector<bool>::reference instead, which always works. That fixes some compilation errors in debug mode, but the tests fail at run-time instead because the printers for vector<bool> helpers are only registered for the std namespace, not std::__cxx1998. That is fixed by using add_container to register the printers instead of add_version, as the former registers them in the std and std::__cxx1998 namespaces. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> libstdc++-v3/ChangeLog: * python/libstdcxx/v6/printers.py (StdBitReferencePrinter): Use 'std::vector<bool>::reference' as type name, not _Bit_reference. (build_libstdcxx_dictionary): Register printers for vector<bool> types in debug mode too. * testsuite/libstdc++-prettyprinters/simple.cc: Adjust expected output for invalid _Bit_reference. Use vector<bool>::reference instead of _Bit_reference. * testsuite/libstdc++-prettyprinters/simple11.cc: Likewise.
2021-08-18Fortran: Add OpenMP's nothing directive supportTobias Burnus5-0/+50
Fortran version of commit 5079b7781a2c506dcdfb241347d74c7891268225 gcc/fortran/ChangeLog: * match.h (gfc_match_omp_nothing): New. * openmp.c (gfc_match_omp_nothing): New. * parse.c (decode_omp_directive): Match 'nothing' directive. gcc/testsuite/ChangeLog: * gfortran.dg/nothing-1.f90: New test. * gfortran.dg/nothing-2.f90: New test.
2021-08-18c++: aggregate CTAD and brace elision [PR101344]Patrick Palka5-10/+65
Here the problem is ultimately that collect_ctor_idx_types always recurses into an eligible sub-CONSTRUCTOR regardless of whether the corresponding pair of braces was elided in the original initializer. This causes us to reject some completely-braced forms of aggregate CTAD as in the first testcase below, because collect_ctor_idx_types effectively assumes that the original initializer is always minimally braced (and so the aggregate deduction candidate is given a function type that's incompatible with the original completely-braced initializer). In order to fix this, collect_ctor_idx_types needs to somehow know the shape of the original initializer when iterating over the reshaped initializer. To that end this patch makes reshape_init flag sub-ctors that were built to undo brace elision in the original ctor, so that collect_ctor_idx_types that determine whether to recurse into a sub-ctor by simply inspecting this flag. This happens to also fix PR101820, which is about aggregate CTAD using designated initializers, for much the same reasons. A curious case is the "intermediately-braced" initialization of 'e3' (which we reject) in the first testcase below. It seems to me we're behaving as specified here (according to [over.match.class.deduct]/1) because the initializer element x_1={1, 2, 3, 4} corresponds to the subobject e_1=E::t, hence the type T_1 of the first function parameter of the aggregate deduction candidate is T(&&)[2][2], but T can't be deduced from x_1 using this parameter type (as opposed to say T(&&)[4]). PR c++/101344 PR c++/101820 gcc/cp/ChangeLog: * cp-tree.h (CONSTRUCTOR_BRACES_ELIDED_P): Define. * decl.c (reshape_init_r): Set it. * pt.c (collect_ctor_idx_types): Recurse into a sub-CONSTRUCTOR iff CONSTRUCTOR_BRACES_ELIDED_P. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/class-deduction-aggr11.C: New test. * g++.dg/cpp2a/class-deduction-aggr12.C: New test.
2021-08-18c++: ignore explicit dguides during NTTP CTAD [PR101883]Patrick Palka2-1/+10
Since (template) argument passing is a copy-initialization context, we mustn't consider explicit deduction guides when deducing a CTAD placeholder type of an NTTP. PR c++/101883 gcc/cp/ChangeLog: * pt.c (convert_template_argument): Pass LOOKUP_IMPLICIT to do_auto_deduction. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/nontype-class49.C: New test.
2021-08-18Fix thinko in latest change for GNAT encodingsEric Botcazou1-3/+3
gcc/ada/ * gcc-interface/decl.c (gnat_to_gnu_entity) <discrete_type>: Fix thinko in latest change.
2021-08-18Add EAF_NOREAD check to tree-ssa-uninitJan Hubicka1-1/+1
gcc/ChangeLog: 2021-08-18 Jan Hubicka <hubicka@ucw.cz> * tree-ssa-uninit.c (maybe_warn_pass_by_reference): Check also EAF_NOREAD.
2021-08-18Add more self-tests for 'hash_map' with Value type with non-trivial ↵Thomas Schwinge1-0/+152
constructor/destructor ... to document the current behavior. gcc/ * hash-map-tests.c (test_map_of_type_with_ctor_and_dtor): Extend. (test_map_of_type_with_ctor_and_dtor_expand): Add function. (hash_map_tests_c_tests): Call it.