public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/114925] New: include/bits/fs_path.h#L841 deprecation note suggests UB
@ 2024-05-02 15:07 fabian_kessler at gmx dot de
2024-05-02 15:17 ` [Bug libstdc++/114925] " pinskia at gcc dot gnu.org
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: fabian_kessler at gmx dot de @ 2024-05-02 15:07 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114925
Bug ID: 114925
Summary: include/bits/fs_path.h#L841 deprecation note suggests
UB
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: fabian_kessler at gmx dot de
Target Milestone: ---
```
template<typename _Source,
typename _Require = __detail::_Path<_Source>,
typename _CharT =
__detail::__value_type_is_char_or_char8_t<_Source>>
_GLIBCXX20_DEPRECATED_SUGGEST("path((const char8_t*)&*source)")
inline path
u8path(const _Source& __source)
```
This is clearly undefined behavior, since it breaks aliasing rules. Even if
it's implementation vise ok, it might not be correct with other compilers.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug libstdc++/114925] include/bits/fs_path.h#L841 deprecation note suggests UB
2024-05-02 15:07 [Bug libstdc++/114925] New: include/bits/fs_path.h#L841 deprecation note suggests UB fabian_kessler at gmx dot de
@ 2024-05-02 15:17 ` pinskia at gcc dot gnu.org
2024-05-02 15:58 ` fabian_kessler at gmx dot de
2024-05-02 16:59 ` redi at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu.org @ 2024-05-02 15:17 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114925
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I thought char8_t is still a character type so aliasing wise it falls under
that rule.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug libstdc++/114925] include/bits/fs_path.h#L841 deprecation note suggests UB
2024-05-02 15:07 [Bug libstdc++/114925] New: include/bits/fs_path.h#L841 deprecation note suggests UB fabian_kessler at gmx dot de
2024-05-02 15:17 ` [Bug libstdc++/114925] " pinskia at gcc dot gnu.org
@ 2024-05-02 15:58 ` fabian_kessler at gmx dot de
2024-05-02 16:59 ` redi at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: fabian_kessler at gmx dot de @ 2024-05-02 15:58 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114925
--- Comment #2 from fabian_kessler at gmx dot de <fabian_kessler at gmx dot de> ---
(In reply to Andrew Pinski from comment #1)
> I thought char8_t is still a character type so aliasing wise it falls under
> that rule.
Actually no. They are distinct types and only 4 types are allowed to alias
everything. That's char, signed/unsigned char and std::byte.
Consider the following function:
```
void cringe(char*& a, char8_t*& b){
b = u8"Hello There!"
print(a);
}
```
```
int main(){
char8_t* obiwan = u8"Kenobi";
cringe((char*&)obiwan, obiwan); // Might output "Kenobi" instead of "Hello
There!"
}
```
That is, because the compiler is allowed to assume, that b can't alias a and no
change can't happen to a in that function.
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug libstdc++/114925] include/bits/fs_path.h#L841 deprecation note suggests UB
2024-05-02 15:07 [Bug libstdc++/114925] New: include/bits/fs_path.h#L841 deprecation note suggests UB fabian_kessler at gmx dot de
2024-05-02 15:17 ` [Bug libstdc++/114925] " pinskia at gcc dot gnu.org
2024-05-02 15:58 ` fabian_kessler at gmx dot de
@ 2024-05-02 16:59 ` redi at gcc dot gnu.org
2 siblings, 0 replies; 4+ messages in thread
From: redi at gcc dot gnu.org @ 2024-05-02 16:59 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114925
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2024-05-02
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
The suggestion is wrong anyway because _Source doesn't have to be a contiguous
iterator, or any kind of iterator at all.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-05-02 16:59 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-02 15:07 [Bug libstdc++/114925] New: include/bits/fs_path.h#L841 deprecation note suggests UB fabian_kessler at gmx dot de
2024-05-02 15:17 ` [Bug libstdc++/114925] " pinskia at gcc dot gnu.org
2024-05-02 15:58 ` fabian_kessler at gmx dot de
2024-05-02 16:59 ` 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).