public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/102000] New: Defaulted consteval default constructor that performs no initialization is not rejected @ 2021-08-20 14:41 johelegp at gmail dot com 2021-08-20 14:42 ` [Bug c++/102000] " redi at gcc dot gnu.org ` (4 more replies) 0 siblings, 5 replies; 6+ messages in thread From: johelegp at gmail dot com @ 2021-08-20 14:41 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102000 Bug ID: 102000 Summary: Defaulted consteval default constructor that performs no initialization is not rejected Product: gcc Version: 12.0 Status: UNCONFIRMED Keywords: accepts-invalid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: johelegp at gmail dot com CC: johelegp at gmail dot com Target Milestone: --- See https://godbolt.org/z/Te3nY7YeW and discussion at https://cpplang.slack.com/archives/C21PKDHSL/p1629467874085000. ```C++ struct X{ int i; consteval X() = default; }; constexpr void f() { [[maybe_unused]] X x_f; } int main () { [[maybe_unused]] X x_main; []() consteval { f(); }(); } ``` ``` An immediate invocation shall be a constant expression. -- https://eel.is/c++draft/expr.const#13.sentence-3 Lots of wording in between... 2 A variable or temporary object o is constant-initialized if (2.1) either it has an initializer or its default-initialization results in some initialization being performed, and -- https://eel.is/c++draft/expr.const#2 7 To default-initialize an object of type T means: (7.3) Otherwise, no initialization is performed. -- https://eel.is/c++draft/dcl.init.general#7 ``` ``` [W]hether it's defaulted or not, `i` is uninitialized so it should reject both. ``` ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/102000] Defaulted consteval default constructor that performs no initialization is not rejected 2021-08-20 14:41 [Bug c++/102000] New: Defaulted consteval default constructor that performs no initialization is not rejected johelegp at gmail dot com @ 2021-08-20 14:42 ` redi at gcc dot gnu.org 2021-08-20 15:02 ` johelegp at gmail dot com ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: redi at gcc dot gnu.org @ 2021-08-20 14:42 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102000 Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2021-08-20 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/102000] Defaulted consteval default constructor that performs no initialization is not rejected 2021-08-20 14:41 [Bug c++/102000] New: Defaulted consteval default constructor that performs no initialization is not rejected johelegp at gmail dot com 2021-08-20 14:42 ` [Bug c++/102000] " redi at gcc dot gnu.org @ 2021-08-20 15:02 ` johelegp at gmail dot com 2021-08-23 9:54 ` redi at gcc dot gnu.org ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: johelegp at gmail dot com @ 2021-08-20 15:02 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102000 --- Comment #1 from Johel Ernesto Guerrero Peña <johelegp at gmail dot com> --- Can https://bugs.llvm.org/show_bug.cgi?id=51560 be fixed as part of this? ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/102000] Defaulted consteval default constructor that performs no initialization is not rejected 2021-08-20 14:41 [Bug c++/102000] New: Defaulted consteval default constructor that performs no initialization is not rejected johelegp at gmail dot com 2021-08-20 14:42 ` [Bug c++/102000] " redi at gcc dot gnu.org 2021-08-20 15:02 ` johelegp at gmail dot com @ 2021-08-23 9:54 ` redi at gcc dot gnu.org 2021-08-23 21:43 ` johelegp at gmail dot com 2022-12-03 18:22 ` hstong at ca dot ibm.com 4 siblings, 0 replies; 6+ messages in thread From: redi at gcc dot gnu.org @ 2021-08-23 9:54 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102000 --- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Johel Ernesto Guerrero Peña from comment #1) > Can https://bugs.llvm.org/show_bug.cgi?id=51560 be fixed as part of this? That is: struct X{ int i; consteval X() = default; // consteval X() {} }; int main () { auto x = X(); (void)x; } Which is also accepts-invalid ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/102000] Defaulted consteval default constructor that performs no initialization is not rejected 2021-08-20 14:41 [Bug c++/102000] New: Defaulted consteval default constructor that performs no initialization is not rejected johelegp at gmail dot com ` (2 preceding siblings ...) 2021-08-23 9:54 ` redi at gcc dot gnu.org @ 2021-08-23 21:43 ` johelegp at gmail dot com 2022-12-03 18:22 ` hstong at ca dot ibm.com 4 siblings, 0 replies; 6+ messages in thread From: johelegp at gmail dot com @ 2021-08-23 21:43 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102000 --- Comment #3 from Johel Ernesto Guerrero Peña <johelegp at gmail dot com> --- https://bugs.llvm.org/show_bug.cgi?id=51560#c1 points out > I'm not sure what you think the problem is here. The constructor isn't getting called; see http://eel.is/c++draft/dcl.init.general#8 . It seems to me that they are right and the example above is well-formed. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [Bug c++/102000] Defaulted consteval default constructor that performs no initialization is not rejected 2021-08-20 14:41 [Bug c++/102000] New: Defaulted consteval default constructor that performs no initialization is not rejected johelegp at gmail dot com ` (3 preceding siblings ...) 2021-08-23 21:43 ` johelegp at gmail dot com @ 2022-12-03 18:22 ` hstong at ca dot ibm.com 4 siblings, 0 replies; 6+ messages in thread From: hstong at ca dot ibm.com @ 2022-12-03 18:22 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102000 Hubert Tong <hstong at ca dot ibm.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hstong at ca dot ibm.com --- Comment #4 from Hubert Tong <hstong at ca dot ibm.com> --- (In reply to Johel Ernesto Guerrero Peña from comment #3) > https://bugs.llvm.org/show_bug.cgi?id=51560#c1 points out > > I'm not sure what you think the problem is here. The constructor isn't getting called; see http://eel.is/c++draft/dcl.init.general#8 . > It seems to me that they are right and the example above is well-formed. That depends on what "the semantic constraints for default-initialization are checked" means. (In reply to Johel Ernesto Guerrero Peña from comment #0) > ``` > An immediate invocation shall be a constant expression. -- > https://eel.is/c++draft/expr.const#13.sentence-3 > > Lots of wording in between... > > 2 A variable or temporary object o is constant-initialized if > (2.1) either it has an initializer or its default-initialization results > in some initialization being performed, and > -- https://eel.is/c++draft/expr.const#2 > 7 To default-initialize an object of type T means: > (7.3) Otherwise, no initialization is performed. > -- https://eel.is/c++draft/dcl.init.general#7 > ``` That wording would be relevant for a similar case involving `constinit`. Here, the relevant wording is in 7.7 [expr.const] paragraph 12 (and the uninitialized `int` is fine with the current wording). The example needs to be changed to use pointers: ``` struct A { consteval A() = default; private: int *m; }; struct B { consteval B() = default; private: int *m, *n = 0; }; void f() { A a; // GCC accepts this despite pointer with indeterminate value B b; // GCC rejects this } ``` So it seems GCC just doesn't do certain checking when the constructor is trivial. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-12-03 18:22 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-08-20 14:41 [Bug c++/102000] New: Defaulted consteval default constructor that performs no initialization is not rejected johelegp at gmail dot com 2021-08-20 14:42 ` [Bug c++/102000] " redi at gcc dot gnu.org 2021-08-20 15:02 ` johelegp at gmail dot com 2021-08-23 9:54 ` redi at gcc dot gnu.org 2021-08-23 21:43 ` johelegp at gmail dot com 2022-12-03 18:22 ` hstong at ca dot ibm.com
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).