Files
rust/tests/ui
Stuart Cook dd4f062b07 Rollup merge of #128399 - mammothbane:master, r=Amanieu,tgross35
liballoc: introduce String, Vec const-slicing

This change `const`-qualifies many methods on `Vec` and `String`, notably `as_slice`, `as_str`, `len`. These changes are made behind the unstable feature flag `const_vec_string_slice`.

## Motivation
This is to support simultaneous variance over ownership and constness. I have an enum type that may contain either `String` or `&str`, and I want to produce a `&str` from it in a possibly-`const` context.

```rust
enum StrOrString<'s> {
    Str(&'s str),
    String(String),
}

impl<'s> StrOrString<'s> {
    const fn as_str(&self) -> &str {
        match self {
             // In a const-context, I really only expect to see this variant, but I can't switch the implementation
             // in some mode like #[cfg(const)] -- there has to be a single body
             Self::Str(s) => s,

             // so this is a problem, since it's not `const`
             Self::String(s) => s.as_str(),
        }
    }
}
```

Currently `String` and `Vec` don't support this, but can without functional changes. Similar logic applies for `len`, `capacity`, `is_empty`.

## Changes

The essential thing enabling this change is that `Unique::as_ptr` is `const`. This lets us convert `RawVec::ptr` -> `Vec::as_ptr` -> `Vec::as_slice` -> `String::as_str`.

I had to move the `Deref` implementations into `as_{str,slice}` because `Deref` isn't `#[const_trait]`, but I would expect this change to be invisible up to inlining. I moved the `DerefMut` implementations as well for uniformity.
2024-10-07 15:37:06 +11:00
..
2024-10-04 23:38:41 +00:00
2024-07-18 00:00:04 +00:00
2024-08-10 12:07:17 +02:00
2024-08-11 09:58:11 +01:00
2024-10-04 23:38:41 +00:00
2024-09-20 10:02:14 -07:00
2024-10-04 23:38:41 +00:00
2024-04-21 15:43:43 -03:00
2024-08-09 22:02:23 -04:00
2024-09-30 22:21:45 +08:00
2024-08-10 12:07:17 +02:00
2024-09-20 10:02:14 -07:00
2024-08-28 23:32:40 +01:00
2024-08-02 11:34:54 +00:00
2024-10-04 23:38:41 +00:00
2024-09-05 06:37:38 -04:00
2024-06-01 09:40:46 +08:00
2024-09-15 09:51:32 +02:00
2024-09-20 10:02:14 -07:00
2024-07-12 03:22:32 +00:00
2024-09-06 10:32:48 -04:00
2024-09-20 10:02:14 -07:00
2024-04-29 14:53:38 +02:00
2024-05-20 11:13:10 -04:00
2024-04-07 17:38:07 -03:00
2024-08-18 19:46:53 +02:00
2024-05-28 12:31:12 +02:00
2024-08-02 11:34:54 +00:00
2024-04-11 17:53:27 -04:00
2024-10-04 23:38:41 +00:00
2024-08-02 11:34:54 +00:00
2024-08-03 07:57:31 -04:00
2024-09-09 19:39:43 -07:00
2024-10-06 18:12:25 +02:00
2024-10-04 23:38:41 +00:00
2024-09-26 13:21:15 +02:00
2024-08-31 23:56:45 +02:00
2024-09-03 14:36:21 +02:00
2024-10-04 23:38:41 +00:00
2024-08-18 19:46:53 +02:00
2024-09-18 16:45:48 -04:00
2024-05-21 20:16:39 +00:00
2024-06-25 18:06:22 +02:00

UI Tests

This folder contains rustc's UI tests.

Test Directives (Headers)

Typically, a UI test will have some test directives / headers which are special comments that tell compiletest how to build and intepret a test.

As part of an on-going effort to rewrite compiletest (see https://github.com/rust-lang/compiler-team/issues/536), a major change proposal to change legacy compiletest-style headers // <directive> to ui_test-style headers //@ <directive> was accepted (see https://github.com/rust-lang/compiler-team/issues/512.

An example directive is ignore-test. In legacy compiletest style, the header would be written as

// ignore-test

but in ui_test style, the header would be written as

//@ ignore-test

compiletest is changed to accept only //@ directives for UI tests (currently), and will reject and report an error if it encounters any comments // <content> that may be parsed as an legacy compiletest-style test header. To fix this, you should migrate to the ui_test-style header //@ <content>.