os-rust/tests/ui/rfcs
bors 63d16b5a98 Auto merge of #117472 - jmillikin:stable-c-str-literals, r=Nilstrieb
Stabilize C string literals

RFC: https://rust-lang.github.io/rfcs/3348-c-str-literal.html

Tracking issue: https://github.com/rust-lang/rust/issues/105723

Documentation PR (reference manual): https://github.com/rust-lang/reference/pull/1423

# Stabilization report

Stabilizes C string and raw C string literals (`c"..."` and `cr#"..."#`), which are expressions of type [`&CStr`](https://doc.rust-lang.org/stable/core/ffi/struct.CStr.html). Both new literals require Rust edition 2021 or later.

```rust
const HELLO: &core::ffi::CStr = c"Hello, world!";
```

C strings may contain any byte other than `NUL` (`b'\x00'`), and their in-memory representation is guaranteed to end with `NUL`.

## Implementation

Originally implemented by PR https://github.com/rust-lang/rust/pull/108801, which was reverted due to unintentional changes to lexer behavior in Rust editions < 2021.

The current implementation landed in PR https://github.com/rust-lang/rust/pull/113476, which restricts C string literals to Rust edition >= 2021.

## Resolutions to open questions from the RFC

* Adding C character literals (`c'.'`) of type `c_char` is not part of this feature.
  * Support for `c"..."` literals does not prevent `c'.'` literals from being added in the future.
* C string literals should not be blocked on making `&CStr` a thin pointer.
  * It's possible to declare constant expressions of type `&'static CStr` in stable Rust (as of v1.59), so C string literals are not adding additional coupling on the internal representation of `CStr`.
* The unstable `concat_bytes!` macro should not accept `c"..."` literals.
  * C strings have two equally valid `&[u8]` representations (with or without terminal `NUL`), so allowing them to be used in `concat_bytes!` would be ambiguous.
* Adding a type to represent C strings containing valid UTF-8 is not part of this feature.
  * Support for a hypothetical `&Utf8CStr` may be explored in the future, should such a type be added to Rust.
2023-12-01 13:33:55 +00:00
..
rfc-0107-bind-by-move-pattern-guards Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-1014-stdout-existential-crisis Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-1445-restrict-constants-in-patterns Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-1623-static Add a note to duplicate diagnostics 2023-10-05 01:04:41 +00:00
rfc-1717-dllimport Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-1789-as-cell Move /src/test to /tests 2023-01-11 09:32:08 +00:00
rfc-1857-stabilize-drop-order Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-1937-termination-trait Manual find replace updates 2023-11-24 21:04:51 +01:00
rfc-2005-default-binding-mode Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2008-non-exhaustive Auto merge of #117611 - Nadrieril:linear-pass-take-4, r=cjgillot 2023-11-26 00:14:14 +00:00
rfc-2027-object-safe-for-dispatch Only consider object candidates for object-safe dyn types 2023-08-15 01:01:44 +00:00
rfc-2091-track-caller Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2093-infer-outlives Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2126-crate-paths Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2126-extern-absolute-paths Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2151-raw-identifiers Move /src/test to /tests 2023-01-11 09:32:08 +00:00
rfc-2175-or-if-while-let Move /src/test to /tests 2023-01-11 09:32:08 +00:00
rfc-2294-if-let-guard Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2302-self-struct-ctor Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-2306-convert-id Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-2361-dbg-macro Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2396-target_feature-11 thir-unsafeck: print list of missing target features when calling a function with target features outside an unsafe block 2023-11-28 20:37:02 +01:00
rfc-2397-do-not-recommend Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2421-unreserve-pure-offsetof-sizeof-alignof Better group RFC ui tests together 2023-06-05 16:09:46 +00:00
rfc-2457-non-ascii-idents Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2497-if-let-chains Suggest let or == on typo'd let-chain 2023-11-28 18:07:52 +00:00
rfc-2528-type-changing-struct-update Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2565-param-attrs Show number in error message even for one error 2023-11-24 19:15:52 +01:00
rfc-2627-raw-dylib Manual find replace updates 2023-11-24 21:04:51 +01:00
rfc-2632-const-trait-impl Add with_opt_const_effect_param helper, simplify 2023-11-28 21:17:55 +00:00
rfc-3348-c-string-literals Stabilize C string literals 2023-11-01 09:16:34 +09:00