public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/99969] New: g++ incorrectly thinks a private destructor is available
@ 2021-04-08 10:50 Steffen.Kiess at ipvs dot uni-stuttgart.de
  2021-07-28  3:13 ` [Bug c++/99969] " pinskia at gcc dot gnu.org
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Steffen.Kiess at ipvs dot uni-stuttgart.de @ 2021-04-08 10:50 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99969

            Bug ID: 99969
           Summary: g++ incorrectly thinks a private destructor is
                    available
           Product: gcc
           Version: 10.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: Steffen.Kiess at ipvs dot uni-stuttgart.de
  Target Milestone: ---

Created attachment 50527
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50527&action=edit
Test case

The attached test case will fail to compile (because g++ chooses thinks the
first overload should match, even though the destructor of C is private and
"delete std::declval<T *>()" therefore should note compile). This is somehow
related to the fact the "decltype(test((C *)nullptr))" is referred to from a
template context before it is used in main() (if the struct S is removed or
moved below the main() function the code will compile).

The problem occurs with gcc 10.2.0 (but also with older versions, at least back
to 4.9).

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug c++/99969] g++ incorrectly thinks a private destructor is available
  2021-04-08 10:50 [Bug c++/99969] New: g++ incorrectly thinks a private destructor is available Steffen.Kiess at ipvs dot uni-stuttgart.de
@ 2021-07-28  3:13 ` pinskia at gcc dot gnu.org
  2021-08-02  9:27 ` redi at gcc dot gnu.org
  2021-08-02  9:27 ` redi at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-07-28  3:13 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99969

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
This seems fixed since GCC 11.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug c++/99969] g++ incorrectly thinks a private destructor is available
  2021-04-08 10:50 [Bug c++/99969] New: g++ incorrectly thinks a private destructor is available Steffen.Kiess at ipvs dot uni-stuttgart.de
  2021-07-28  3:13 ` [Bug c++/99969] " pinskia at gcc dot gnu.org
@ 2021-08-02  9:27 ` redi at gcc dot gnu.org
  2021-08-02  9:27 ` redi at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: redi at gcc dot gnu.org @ 2021-08-02  9:27 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99969

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
             Status|UNCONFIRMED                 |RESOLVED

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Fixed by r11-1350

    c++: Improve access checking inside templates [PR41437]

    This patch generalizes our existing functionality for deferring access
    checking of typedefs when parsing a function or class template to now
    defer all kinds of access checks until template instantiation time,
    including member function and member object accesses.

    Since all access checks eventually go through enforce_access, the main
    component of this patch is new handling inside enforce_access to defer
    the current access check if we're inside a template.  The bulk of the
    rest of the patch consists of removing now-unneeded code pertaining to
    suppressing access checks inside templates or pertaining to
    typedef-specific access handling.  Renamings and other changes with no
    functional impact have been split off into the followup patch.

    gcc/cp/ChangeLog:

            PR c++/41437
            PR c++/47346
            * call.c (enforce_access): Move to semantics.c.
            * cp-tree.h (enforce_access): Delete.
            (get_types_needing_access_check): Delete.
            (add_typedef_to_current_template_for_access_check): Delete.
            * decl.c (make_typename_type): Adjust accordingly.  Use
            check_accessibility_of_qualified_id instead of directly using
            perform_or_defer_access_check.
            * parser.c (cp_parser_template_declaration_after_parameters):
            Don't push a dk_no_check access state when parsing a template.
            * pt.c (get_types_needing_access_check): Delete.
            (append_type_to_template_for_access_check_1): Delete.
            (perform_typedefs_access_check): Adjust.  If type_decl is a
            FIELD_DECL, also check its DECL_CONTEXT for dependence. Use
            tsubst_copy instead of tsubst to substitute into type_decl so
            that we substitute into the DECL_CONTEXT of a FIELD_DECL.
            (append_type_to_template_for_access_check): Delete.
            * search.c (accessible_p): Remove the processing_template_decl
            early exit.
            * semantics.c (enforce_access): Moved from call.c.  If we're
            parsing a template and the access check failed, add the check to
            TI_TYPEDEFS_NEEDING_ACCESS_CHECKING.
            (perform_or_defer_access_check): Adjust comment.
            (add_typedef_to_current_template_for_access_check): Delete.
            (check_accessibility_of_qualified_id):  Adjust accordingly.
            Exit early if the scope is dependent.

    gcc/testsuite/ChangeLog:

            PR c++/41437
            PR c++/47346
            * g++.dg/cpp2a/concepts-using2.C: Adjust.
            * g++.dg/lto/20081219_1.C: Adjust.
            * g++.dg/lto/20091002-1_0.C: Adjust.
            * g++.dg/lto/pr65475c_0.C: Adjust.
            * g++.dg/opt/dump1.C: Adjust.
            * g++.dg/other/pr53574.C: Adjust.
            * g++.dg/template/access30.C: New test.
            * g++.dg/template/access31.C: New test.
            * g++.dg/wrappers/wrapper-around-type-pack-expansion.C: Adjust.

    libstdc++-v3/ChangeLog:

            PR libstdc++/94003
            * testsuite/20_util/is_constructible/94003.cc: New test.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug c++/99969] g++ incorrectly thinks a private destructor is available
  2021-04-08 10:50 [Bug c++/99969] New: g++ incorrectly thinks a private destructor is available Steffen.Kiess at ipvs dot uni-stuttgart.de
  2021-07-28  3:13 ` [Bug c++/99969] " pinskia at gcc dot gnu.org
  2021-08-02  9:27 ` redi at gcc dot gnu.org
@ 2021-08-02  9:27 ` redi at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: redi at gcc dot gnu.org @ 2021-08-02  9:27 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99969

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |11.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-08-02  9:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-08 10:50 [Bug c++/99969] New: g++ incorrectly thinks a private destructor is available Steffen.Kiess at ipvs dot uni-stuttgart.de
2021-07-28  3:13 ` [Bug c++/99969] " pinskia at gcc dot gnu.org
2021-08-02  9:27 ` redi at gcc dot gnu.org
2021-08-02  9:27 ` redi at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).