public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
@ 2024-06-25 13:02 redi at gcc dot gnu.org
  2024-06-25 13:06 ` [Bug c++/115645] " redi at gcc dot gnu.org
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: redi at gcc dot gnu.org @ 2024-06-25 13:02 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 115645
           Summary: [11/12/13/14/15 Regression] new S[1][1]() requires
                    non-explicit default ctor since r11-3092
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
                CC: mpolacek at gcc dot gnu.org
  Target Milestone: ---

struct S {
  explicit S() { }
};

auto p = new S[1][1]();

expl.cc:5:22: error: converting to ‘S’ from initializer list would use explicit
constructor ‘S::S()’
    5 | auto p = new S[1][1]();
      |                      ^


Clang and EDG accept this.

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

* [Bug c++/115645] [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
  2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
@ 2024-06-25 13:06 ` redi at gcc dot gnu.org
  2024-06-25 13:07 ` redi at gcc dot gnu.org
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: redi at gcc dot gnu.org @ 2024-06-25 13:06 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to work|                            |10.5.0
      Known to fail|                            |11.1.0, 11.4.0, 12.3.0,
                   |                            |13.3.0, 14.1.0, 15.0

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
LWG just approved a change to the standard which requires this to work:
https://cplusplus.github.io/LWG/issue3436

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

* [Bug c++/115645] [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
  2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
  2024-06-25 13:06 ` [Bug c++/115645] " redi at gcc dot gnu.org
@ 2024-06-25 13:07 ` redi at gcc dot gnu.org
  2024-06-25 14:14 ` rguenth at gcc dot gnu.org
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: redi at gcc dot gnu.org @ 2024-06-25 13:07 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(although an explicit default ctor is unusual, so it's not going to really
affect anybody in practice)

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

* [Bug c++/115645] [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
  2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
  2024-06-25 13:06 ` [Bug c++/115645] " redi at gcc dot gnu.org
  2024-06-25 13:07 ` redi at gcc dot gnu.org
@ 2024-06-25 14:14 ` rguenth at gcc dot gnu.org
  2024-06-25 14:58 ` mpolacek at gcc dot gnu.org
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: rguenth at gcc dot gnu.org @ 2024-06-25 14:14 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |11.5

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

* [Bug c++/115645] [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
  2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2024-06-25 14:14 ` rguenth at gcc dot gnu.org
@ 2024-06-25 14:58 ` mpolacek at gcc dot gnu.org
  2024-07-10 16:36 ` cvs-commit at gcc dot gnu.org
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2024-06-25 14:58 UTC (permalink / raw)
  To: gcc-bugs

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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2024-06-25
           Assignee|unassigned at gcc dot gnu.org      |mpolacek at gcc dot gnu.org
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |ASSIGNED

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

* [Bug c++/115645] [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
  2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2024-06-25 14:58 ` mpolacek at gcc dot gnu.org
@ 2024-07-10 16:36 ` cvs-commit at gcc dot gnu.org
  2024-07-10 16:38 ` [Bug c++/115645] [11/12/13/14 " mpolacek at gcc dot gnu.org
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-07-10 16:36 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:

https://gcc.gnu.org/g:fde96e8205f343e6471a11cc9def967bb5dd5362

commit r15-1946-gfde96e8205f343e6471a11cc9def967bb5dd5362
Author: Marek Polacek <polacek@redhat.com>
Date:   Tue Jul 2 15:22:39 2024 -0400

    c++: array new with value-initialization [PR115645]

    This extends the r11-5179 fix which doesn't work with multidimensional
    arrays.  In particular,

      struct S {
        explicit S() { }
      };
      auto p = new S[1][1]();

    should not say "converting to S from initializer list would use
    explicit constructor" because there's no {}.  However, since we
    went into the block where we create a {}, we got confused.  We
    should not have gotten there but we did because array_p was true.

    This patch refines the check once more.

            PR c++/115645

    gcc/cp/ChangeLog:

            * init.cc (build_new): Don't do any deduction for arrays with
            bounds if it's value-initialized.

    gcc/testsuite/ChangeLog:

            * g++.dg/expr/anew7.C: New test.

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

* [Bug c++/115645] [11/12/13/14 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
  2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2024-07-10 16:36 ` cvs-commit at gcc dot gnu.org
@ 2024-07-10 16:38 ` mpolacek at gcc dot gnu.org
  2024-07-11 22:34 ` redi at gcc dot gnu.org
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2024-07-10 16:38 UTC (permalink / raw)
  To: gcc-bugs

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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|[11/12/13/14/15 Regression] |[11/12/13/14 Regression]
                   |new S[1][1]() requires      |new S[1][1]() requires
                   |non-explicit default ctor   |non-explicit default ctor
                   |since r11-3092              |since r11-3092

--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Fixed on trunk so far.

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

* [Bug c++/115645] [11/12/13/14 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
  2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
                   ` (5 preceding siblings ...)
  2024-07-10 16:38 ` [Bug c++/115645] [11/12/13/14 " mpolacek at gcc dot gnu.org
@ 2024-07-11 22:34 ` redi at gcc dot gnu.org
  2024-07-11 22:37 ` mpolacek at gcc dot gnu.org
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: redi at gcc dot gnu.org @ 2024-07-11 22:34 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
This has started to fail since r15-1946

using size_t = decltype(sizeof(0));

void* operator new(size_t, void* p) { return p; }
void* operator new[](size_t, void* p) { return p; }

#define VERIFY(C) if (!(C)) throw

namespace std {
  template<typename T>
    constexpr T* construct_at(T* p)
    {
      if constexpr (__is_array(T))
        return ::new((void*)p) T[1]();
      else
        return ::new((void*)p) T();
    }
}

constexpr void
test_array()
{
  int arr[1] { 99 };
  std::construct_at(&arr);
  VERIFY( arr[0] == 0 );

  union U {
    long long x = -1;
    int arr[4];
  } u;

  auto p = std::construct_at(&u.arr);
  VERIFY( (*p)[0] == 0 );
}

static_assert( [] { test_array(); return true; }() );

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

* [Bug c++/115645] [11/12/13/14 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
  2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
                   ` (6 preceding siblings ...)
  2024-07-11 22:34 ` redi at gcc dot gnu.org
@ 2024-07-11 22:37 ` mpolacek at gcc dot gnu.org
  2024-07-18 10:37 ` rguenth at gcc dot gnu.org
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2024-07-11 22:37 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Sorry :(.  I'll take a look.

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

* [Bug c++/115645] [11/12/13/14 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
  2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
                   ` (7 preceding siblings ...)
  2024-07-11 22:37 ` mpolacek at gcc dot gnu.org
@ 2024-07-18 10:37 ` rguenth at gcc dot gnu.org
  2024-07-19 13:25 ` [Bug c++/115645] [12/13/14 " rguenth at gcc dot gnu.org
  2024-07-31 12:50 ` cvs-commit at gcc dot gnu.org
  10 siblings, 0 replies; 12+ messages in thread
From: rguenth at gcc dot gnu.org @ 2024-07-18 10:37 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P2
      Known to work|                            |15.0
      Known to fail|15.0                        |

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

* [Bug c++/115645] [12/13/14 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
  2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
                   ` (8 preceding siblings ...)
  2024-07-18 10:37 ` rguenth at gcc dot gnu.org
@ 2024-07-19 13:25 ` rguenth at gcc dot gnu.org
  2024-07-31 12:50 ` cvs-commit at gcc dot gnu.org
  10 siblings, 0 replies; 12+ messages in thread
From: rguenth at gcc dot gnu.org @ 2024-07-19 13:25 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|11.5                        |12.5

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
GCC 11 branch is being closed.

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

* [Bug c++/115645] [12/13/14 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092
  2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
                   ` (9 preceding siblings ...)
  2024-07-19 13:25 ` [Bug c++/115645] [12/13/14 " rguenth at gcc dot gnu.org
@ 2024-07-31 12:50 ` cvs-commit at gcc dot gnu.org
  10 siblings, 0 replies; 12+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2024-07-31 12:50 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:

https://gcc.gnu.org/g:bbc9c0423ca754e8e6ff80e08948ff52986337a0

commit r15-2435-gbbc9c0423ca754e8e6ff80e08948ff52986337a0
Author: Marek Polacek <polacek@redhat.com>
Date:   Wed Jul 17 15:44:26 2024 -0400

    c++: array new with value-initialization, again [PR115645]

    Unfortunately, my r15-1946 fix broke the attached testcase; the
    constexpr evaluation reported an error about not being able to
    evaluate the code emitted by build_vec_init.  Jason figured out
    it's because we were wrongly setting try_const to false, where
    in fact it should have been true.  Value-initialization of scalars
    is constexpr, so we should check that alongside of
    type_has_constexpr_default_constructor.

            PR c++/115645

    gcc/cp/ChangeLog:

            * init.cc (build_vec_init): When initializing a scalar type, try to
            create a constant initializer.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/constexpr-new23.C: New test.

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

end of thread, other threads:[~2024-07-31 12:50 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-06-25 13:02 [Bug c++/115645] New: [11/12/13/14/15 Regression] new S[1][1]() requires non-explicit default ctor since r11-3092 redi at gcc dot gnu.org
2024-06-25 13:06 ` [Bug c++/115645] " redi at gcc dot gnu.org
2024-06-25 13:07 ` redi at gcc dot gnu.org
2024-06-25 14:14 ` rguenth at gcc dot gnu.org
2024-06-25 14:58 ` mpolacek at gcc dot gnu.org
2024-07-10 16:36 ` cvs-commit at gcc dot gnu.org
2024-07-10 16:38 ` [Bug c++/115645] [11/12/13/14 " mpolacek at gcc dot gnu.org
2024-07-11 22:34 ` redi at gcc dot gnu.org
2024-07-11 22:37 ` mpolacek at gcc dot gnu.org
2024-07-18 10:37 ` rguenth at gcc dot gnu.org
2024-07-19 13:25 ` [Bug c++/115645] [12/13/14 " rguenth at gcc dot gnu.org
2024-07-31 12:50 ` cvs-commit 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).