Skip to content

Add missing #[repr(C)] in UI, codegen and assembly tests - #162956

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
beetrees:test-repr-c-struct
Sep 19, 2026
Merged

rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
beetrees:test-repr-c-struct

Conversation

@beetrees

@beetrees beetrees commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

There are quite a few tests which omit the #[repr(C)] on structs that are then used in non-Rustic ABIs. I've gone through the tests in ui/abi, ui/ffi, codegen-llvm and assembly-llvm and added #[repr(C)] where it was missing. I also converted #[allow(improper_ctypes{,_definitions})] to #[expect(improper_ctypes{,_definitions})] where possible, and removed it where the lint no longer triggers.

I haven't done it in this PR, but I think it's worth making codegen and assembly tests deny warnings by default. With UI tests improper_ctypes{,_definitions} has to be either allowed or will show up in the output, meaning it should be fairly obvious to reviewers, but with codegen and assembly tests warnings just get ignored if the test passes.

Fixes #53858

r? @folkertdev
cc @RalfJung

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Sep 18, 2026

@folkertdev folkertdev left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, thanks!

I think it's worth making codegen and assembly tests deny warnings by default

Do you have any idea what the fallout of that will be? If it's a lot of churn that might need an MCP?

@bors r+ rollup

View changes since this review

@rust-bors

rust-bors Bot commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

📌 Commit c60430f has been approved by folkertdev

It is now in the queue for this repository.

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Sep 18, 2026
@beetrees

Copy link
Copy Markdown
Contributor Author

Do you have any idea what the fallout of that will be? If it's a lot of churn that might need an MCP?

A quick local check shows over 500 test failures (revisions are counting separately), so it definitely in needs MCP. I imagine the PR adding the change would just add a //@ compile-flags: -Awarnings to all the failing tests with a FIXME, allowing follow-up PRs to refine which warnings need to be allowed and which ones are actual problems.

Zalathar added a commit to Zalathar/rust that referenced this pull request Sep 19, 2026
…kertdev

Add missing `#[repr(C)]` in UI, codegen and assembly tests

There are quite a few tests which omit the `#[repr(C)]` on structs that are then used in non-Rustic ABIs. I've gone through the tests in `ui/abi`, `ui/ffi`, `codegen-llvm` and `assembly-llvm` and added `#[repr(C)]` where it was missing. I also converted `#[allow(improper_ctypes{,_definitions})]` to `#[expect(improper_ctypes{,_definitions})]` where possible, and removed it where the lint no longer triggers.

I haven't done it in this PR, but I think it's worth making codegen and assembly tests deny warnings by default. With UI tests `improper_ctypes{,_definitions}` has to be either allowed or will show up in the output, meaning it should be fairly obvious to reviewers, but with codegen and assembly tests warnings just get ignored if the test passes.

Fixes rust-lang#53858

r? @folkertdev
cc @RalfJung
rust-bors Bot pushed a commit that referenced this pull request Sep 19, 2026
Rollup of 18 pull requests

Successful merges:

 - #162499 (`rustc_codegen_gcc` subtree update)
 - #161424 (implement `VaArgSafe` for `f128`)
 - #161777 (Add Natvis visualiser and debuginfo tests for `f128`)
 - #162506 (Avoid suggesting imports of traits declared inside fn bodies)
 - #162591 (Move parse error recovery for expression operators "out of line" & refactor in the area)
 - #162669 ([rustdoc] Correctly handle intra-doc links on inlined same item with different names)
 - #162733 (Add useful APIs to `Unique(Arc|Rc)`)
 - #162913 (Refactor LivenessResults into LivenessComputation, without typeck)
 - #162950 (More AST lowering cleanups)
 - #162964 (Update `browser-ui-test` version to `0.25.2`)
 - #162979 (mark `f128` as reliable on `powerpc64` with `+vsx`)
 - #161743 (Add performance notes for the floating-point round method)
 - #162797 (yeet AliasConstKind::opt_def_id)
 - #162836 (Ping T-libs-ping instead of T-libs-fcp for backports)
 - #162873 (Adjust `bug!`/`span_bug!` emission)
 - #162875 (Add .seek_read_exact(), .seek_write_all() to std::os::windows::fs::FileExt)
 - #162956 (Add missing `#[repr(C)]` in UI, codegen and assembly tests)
 - #162981 (rustc-dev-guide subtree update)

Failed merges:

 - #162177 (Properly implement the gpu-kernel ABI for amdgpu)
rust-bors Bot pushed a commit that referenced this pull request Sep 19, 2026
Rollup of 18 pull requests

Successful merges:

 - #162499 (`rustc_codegen_gcc` subtree update)
 - #161424 (implement `VaArgSafe` for `f128`)
 - #161777 (Add Natvis visualiser and debuginfo tests for `f128`)
 - #162506 (Avoid suggesting imports of traits declared inside fn bodies)
 - #162591 (Move parse error recovery for expression operators "out of line" & refactor in the area)
 - #162669 ([rustdoc] Correctly handle intra-doc links on inlined same item with different names)
 - #162733 (Add useful APIs to `Unique(Arc|Rc)`)
 - #162913 (Refactor LivenessResults into LivenessComputation, without typeck)
 - #162950 (More AST lowering cleanups)
 - #162964 (Update `browser-ui-test` version to `0.25.2`)
 - #162979 (mark `f128` as reliable on `powerpc64` with `+vsx`)
 - #161743 (Add performance notes for the floating-point round method)
 - #162797 (yeet AliasConstKind::opt_def_id)
 - #162836 (Ping T-libs-ping instead of T-libs-fcp for backports)
 - #162873 (Adjust `bug!`/`span_bug!` emission)
 - #162875 (Add .seek_read_exact(), .seek_write_all() to std::os::windows::fs::FileExt)
 - #162956 (Add missing `#[repr(C)]` in UI, codegen and assembly tests)
 - #162981 (rustc-dev-guide subtree update)

Failed merges:

 - #162177 (Properly implement the gpu-kernel ABI for amdgpu)
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Sep 19, 2026
…kertdev

Add missing `#[repr(C)]` in UI, codegen and assembly tests

There are quite a few tests which omit the `#[repr(C)]` on structs that are then used in non-Rustic ABIs. I've gone through the tests in `ui/abi`, `ui/ffi`, `codegen-llvm` and `assembly-llvm` and added `#[repr(C)]` where it was missing. I also converted `#[allow(improper_ctypes{,_definitions})]` to `#[expect(improper_ctypes{,_definitions})]` where possible, and removed it where the lint no longer triggers.

I haven't done it in this PR, but I think it's worth making codegen and assembly tests deny warnings by default. With UI tests `improper_ctypes{,_definitions}` has to be either allowed or will show up in the output, meaning it should be fairly obvious to reviewers, but with codegen and assembly tests warnings just get ignored if the test passes.

Fixes rust-lang#53858

r? @folkertdev
cc @RalfJung
rust-bors Bot pushed a commit that referenced this pull request Sep 19, 2026
…uwer

Rollup of 22 pull requests

Successful merges:

 - #163001 (Temporarily disable `test-x86_64-fuchsia`)
 - #162880 (Mini optimization in `rustc_hir_typeck::upvar::restrict_precision_for_drop_types`)
 - #161424 (implement `VaArgSafe` for `f128`)
 - #161777 (Add Natvis visualiser and debuginfo tests for `f128`)
 - #162506 (Avoid suggesting imports of traits declared inside fn bodies)
 - #162591 (Move parse error recovery for expression operators "out of line" & refactor in the area)
 - #162669 ([rustdoc] Correctly handle intra-doc links on inlined same item with different names)
 - #162733 (Add useful APIs to `Unique(Arc|Rc)`)
 - #162913 (Refactor LivenessResults into LivenessComputation, without typeck)
 - #162924 (Remove applying inline attributes at the callsite)
 - #162940 (Use spawned `SBDebugger` instance)
 - #162950 (More AST lowering cleanups)
 - #162964 (Update `browser-ui-test` version to `0.25.2`)
 - #162979 (mark `f128` as reliable on `powerpc64` with `+vsx`)
 - #161743 (Add performance notes for the floating-point round method)
 - #162797 (yeet AliasConstKind::opt_def_id)
 - #162836 (Ping T-libs-ping instead of T-libs-fcp for backports)
 - #162873 (Adjust `bug!`/`span_bug!` emission)
 - #162956 (Add missing `#[repr(C)]` in UI, codegen and assembly tests)
 - #162971 (libtest harness: avoid 'extern crate test' with custom runner)
 - #162981 (rustc-dev-guide subtree update)
 - #162985 (Error on invalid placements for unstable attributes)
@rust-bors
rust-bors Bot merged commit 75e90b2 into rust-lang:main Sep 19, 2026
13 checks passed
@rustbot rustbot added this to the 1.100.0 milestone Sep 19, 2026
rust-bors Bot pushed a commit that referenced this pull request Sep 19, 2026
Rollup merge of #162956 - beetrees:test-repr-c-struct, r=folkertdev

Add missing `#[repr(C)]` in UI, codegen and assembly tests

There are quite a few tests which omit the `#[repr(C)]` on structs that are then used in non-Rustic ABIs. I've gone through the tests in `ui/abi`, `ui/ffi`, `codegen-llvm` and `assembly-llvm` and added `#[repr(C)]` where it was missing. I also converted `#[allow(improper_ctypes{,_definitions})]` to `#[expect(improper_ctypes{,_definitions})]` where possible, and removed it where the lint no longer triggers.

I haven't done it in this PR, but I think it's worth making codegen and assembly tests deny warnings by default. With UI tests `improper_ctypes{,_definitions}` has to be either allowed or will show up in the output, meaning it should be fairly obvious to reviewers, but with codegen and assembly tests warnings just get ignored if the test passes.

Fixes #53858

r? @folkertdev
cc @RalfJung
pull Bot pushed a commit to xtqqczze/rust-lang-miri that referenced this pull request Sep 20, 2026
…uwer

Rollup of 22 pull requests

Successful merges:

 - rust-lang/rust#163001 (Temporarily disable `test-x86_64-fuchsia`)
 - rust-lang/rust#162880 (Mini optimization in `rustc_hir_typeck::upvar::restrict_precision_for_drop_types`)
 - rust-lang/rust#161424 (implement `VaArgSafe` for `f128`)
 - rust-lang/rust#161777 (Add Natvis visualiser and debuginfo tests for `f128`)
 - rust-lang/rust#162506 (Avoid suggesting imports of traits declared inside fn bodies)
 - rust-lang/rust#162591 (Move parse error recovery for expression operators "out of line" & refactor in the area)
 - rust-lang/rust#162669 ([rustdoc] Correctly handle intra-doc links on inlined same item with different names)
 - rust-lang/rust#162733 (Add useful APIs to `Unique(Arc|Rc)`)
 - rust-lang/rust#162913 (Refactor LivenessResults into LivenessComputation, without typeck)
 - rust-lang/rust#162924 (Remove applying inline attributes at the callsite)
 - rust-lang/rust#162940 (Use spawned `SBDebugger` instance)
 - rust-lang/rust#162950 (More AST lowering cleanups)
 - rust-lang/rust#162964 (Update `browser-ui-test` version to `0.25.2`)
 - rust-lang/rust#162979 (mark `f128` as reliable on `powerpc64` with `+vsx`)
 - rust-lang/rust#161743 (Add performance notes for the floating-point round method)
 - rust-lang/rust#162797 (yeet AliasConstKind::opt_def_id)
 - rust-lang/rust#162836 (Ping T-libs-ping instead of T-libs-fcp for backports)
 - rust-lang/rust#162873 (Adjust `bug!`/`span_bug!` emission)
 - rust-lang/rust#162956 (Add missing `#[repr(C)]` in UI, codegen and assembly tests)
 - rust-lang/rust#162971 (libtest harness: avoid 'extern crate test' with custom runner)
 - rust-lang/rust#162981 (rustc-dev-guide subtree update)
 - rust-lang/rust#162985 (Error on invalid placements for unstable attributes)
@beetrees
beetrees deleted the test-repr-c-struct branch September 20, 2026 11:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Various FFI run-pass tests probably should be using repr(C) as lint is instructing.

3 participants