public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/115424] New: 'auto' type inference not working when struct declared in rhs, even when the final type is not anonymous
@ 2024-06-11 0:30 malekwryyy at gmail dot com
2024-06-11 4:11 ` [Bug c/115424] " pinskia at gcc dot gnu.org
2024-06-11 15:21 ` jsm28 at gcc dot gnu.org
0 siblings, 2 replies; 3+ messages in thread
From: malekwryyy at gmail dot com @ 2024-06-11 0:30 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115424
Bug ID: 115424
Summary: 'auto' type inference not working when struct declared
in rhs, even when the final type is not anonymous
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: malekwryyy at gmail dot com
Target Milestone: ---
for example this code:
```
int main()
{
auto x = (struct { int i; }){1}.i;
}
```
Compiling the above with gcc 15.0 give the following error:
```
<source>: In function 'main':
<source>:6:15: error: 'struct <anonymous>' defined in underspecified object
initializer
6 | auto x = (struct { int i; }){1}.i;
| ^~~~~~
Compiler returned: 1
```
When I replace it with 'typeof' it compiles fine:
```
int main()
{
typeof((struct { int i; }){1}.i) x = (struct { int i; }){1}.i;
}
```
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c/115424] 'auto' type inference not working when struct declared in rhs, even when the final type is not anonymous
2024-06-11 0:30 [Bug c/115424] New: 'auto' type inference not working when struct declared in rhs, even when the final type is not anonymous malekwryyy at gmail dot com
@ 2024-06-11 4:11 ` pinskia at gcc dot gnu.org
2024-06-11 15:21 ` jsm28 at gcc dot gnu.org
1 sibling, 0 replies; 3+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-06-11 4:11 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115424
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Hmm from the commit message (r13-3620-ge3c898e12d0ace):
```
* The standard feature disallows the declaration from declaring
anything that's not an ordinary identifier (thus, the initializer
cannot declare a tag or the members of a structure or union), while
making it undefined behavior for it to declare more than one
ordinary identifier. (For the latter, while I keep the existing
error from __auto_type in the case of more than one declarator, I
don't restrict other ordinary identifiers from being declared in
inner scopes such as GNU statement expressions. I do however
disallow defining the members of an enumeration inside the
initializer (if the enum definition has no tag, that doesn't
actually violate a constraint), to avoid an enum type becoming
accessible beyond where it would have been without auto.
(Preventing new types from escaping the initializer - thus, ensuring
that anything written with auto corresponds to something that could
have been written without auto, modulo multiple evaluation of VLA
size expressions when not using auto - is a key motivation for some
restrictions on what can be declared in the initializer.)
The rule on shadowing and restrictions on other declarations in the
initializer are actually general rules for what C2x calls
underspecified declarations, a description that covers constexpr as
well as auto (in particular, this disallows a constexpr initializer
from referencing the variable being initialized). Thus, some of the
code added for those restrictions will also be of use in implementing
C2x constexpr.
```
So this might be expected.
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Bug c/115424] 'auto' type inference not working when struct declared in rhs, even when the final type is not anonymous
2024-06-11 0:30 [Bug c/115424] New: 'auto' type inference not working when struct declared in rhs, even when the final type is not anonymous malekwryyy at gmail dot com
2024-06-11 4:11 ` [Bug c/115424] " pinskia at gcc dot gnu.org
@ 2024-06-11 15:21 ` jsm28 at gcc dot gnu.org
1 sibling, 0 replies; 3+ messages in thread
From: jsm28 at gcc dot gnu.org @ 2024-06-11 15:21 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115424
--- Comment #2 from Joseph S. Myers <jsm28 at gcc dot gnu.org> ---
These cases were later changed to implementation-defined, so we aren't actually
required to diagnose them in the final version of the feature in C23.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-06-11 15:21 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-06-11 0:30 [Bug c/115424] New: 'auto' type inference not working when struct declared in rhs, even when the final type is not anonymous malekwryyy at gmail dot com
2024-06-11 4:11 ` [Bug c/115424] " pinskia at gcc dot gnu.org
2024-06-11 15:21 ` jsm28 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).