rust/tests
bors acb4e8b625 Auto merge of #127537 - veluca93:struct_tf, r=BoxyUwU
Implement a first version of RFC 3525: struct target features

This PR is an attempt at implementing https://github.com/rust-lang/rfcs/pull/3525, behind a feature gate `struct_target_features`.

There's obviously a few tasks that ought to be done before this is merged; in no particular order:
- add proper error messages
- add tests
- create a tracking issue for the RFC
- properly serialize/deserialize the new target_features field in `rmeta` (assuming I even understood that correctly :-))

That said, as I am definitely not a `rustc` expert, I'd like to get some early feedback on the overall approach before fixing those things (and perhaps some pointers for `rmeta`...), hence this early PR :-)

Here's an example piece of code that I have been using for testing - with the new code, the calls to intrinsics get correctly inlined:
```rust
#![feature(struct_target_features)]

use std::arch::x86_64::*;

/*
// fails to compile
#[target_feature(enable = "avx")]
struct Invalid(u32);
*/

#[target_feature(enable = "avx")]
struct Avx {}

#[target_feature(enable = "sse")]
struct Sse();

/*
// fails to compile
extern "C" fn bad_fun(_: Avx) {}
*/

/*
// fails to compile
#[inline(always)]
fn inline_fun(_: Avx) {}
*/

trait Simd {
    fn do_something(&self);
}

impl Simd for Avx {
    fn do_something(&self) {
        unsafe {
            println!("{:?}", _mm256_setzero_ps());
        }
    }
}

impl Simd for Sse {
    fn do_something(&self) {
        unsafe {
            println!("{:?}", _mm_setzero_ps());
        }
    }
}

struct WithAvx {
    #[allow(dead_code)]
    avx: Avx,
}

impl Simd for WithAvx {
    fn do_something(&self) {
        unsafe {
            println!("{:?}", _mm256_setzero_ps());
        }
    }
}

#[inline(never)]
fn dosomething<S: Simd>(simd: &S) {
    simd.do_something();
}

fn main() {
    /*
    // fails to compile
    Avx {};
    */

    if is_x86_feature_detected!("avx") {
        let avx = unsafe { Avx {} };
        dosomething(&avx);
        dosomething(&WithAvx { avx });
    }
    if is_x86_feature_detected!("sse") {
        dosomething(&unsafe { Sse {} })
    }
}
```

Tracking:

- https://github.com/rust-lang/rust/issues/129107
2024-08-28 22:54:55 +00:00
..
assembly Implement RFC 3525. 2024-08-28 09:54:23 +02:00
auxiliary
codegen Rollup merge of #129421 - jdonszelmann:naked-repr-align-functions, r=workingjubilee,compiler-errors 2024-08-28 17:12:11 +02:00
codegen-units Fix and enable disabled codegen-units tests 2024-08-10 14:03:27 -04:00
coverage Finish blessing coverage/mcdc tests after LLVM 19 upgrade 2024-08-01 13:36:50 +10:00
coverage-run-rustdoc coverage: Extract hole spans from HIR instead of MIR 2024-07-08 21:22:56 +10:00
crashes safe transmute: Rename BikeshedIntrinsicFrom to TransmuteFrom 2024-08-27 14:05:54 +00:00
debuginfo Rollup merge of #128627 - khuey:DUMMY_SP-line-no, r=nnethercote 2024-08-21 18:15:01 +02:00
incremental Rollup merge of #127279 - bvanjoi:fix-112680, r=petrochenkov 2024-08-21 19:35:10 +02:00
mir-opt document & impl the transmutation modeled by BikeshedIntrinsicFrom 2024-08-23 14:37:36 +00:00
pretty stabilize raw_ref_op 2024-08-18 19:46:53 +02:00
run-make Rollup merge of #129641 - notriddle:notriddle/missing-crates-js-resource-suffix, r=GuillaumeGomez 2024-08-28 17:12:18 +02:00
run-pass-valgrind
rustdoc Rollup merge of #129560 - GuillaumeGomez:impl-assoc-type-source-link, r=notriddle 2024-08-27 00:42:01 +02:00
rustdoc-gui rustdoc: animate the :target highlight 2024-08-19 18:14:35 -07:00
rustdoc-js Add test for Self not being a generic in search index 2024-08-04 12:49:28 -07:00
rustdoc-js-std rustdoc: show exact case-sensitive matches first 2024-08-23 13:05:24 -04:00
rustdoc-json Stabilize opaque type precise capturing 2024-08-17 12:33:29 -04:00
rustdoc-ui Adjust expected errors for a rustdoc test 2024-08-18 22:52:54 -05:00
ui Auto merge of #127537 - veluca93:struct_tf, r=BoxyUwU 2024-08-28 22:54:55 +00:00
ui-fulldeps Rollup merge of #129246 - BoxyUwU:feature_gate_const_arg_path, r=cjgillot 2024-08-24 22:14:12 +02:00
COMPILER_TESTS.md