Skip to content

Fix passing/getting packed structs to/from foreign functions.#16584

Merged
bors merged 3 commits intorust-lang:masterfrom
luqmana:psfo
Aug 20, 2014
Merged

Fix passing/getting packed structs to/from foreign functions.#16584
bors merged 3 commits intorust-lang:masterfrom
luqmana:psfo

Conversation

@luqmana
Copy link
Contributor

@luqmana luqmana commented Aug 18, 2014

Fixes #16574.

Copy link
Contributor

Choose a reason for hiding this comment

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

nit: line this up with the rest of the arguments

bors added a commit that referenced this pull request Aug 19, 2014
@bors bors closed this Aug 20, 2014
@bors bors merged commit 7382554 into rust-lang:master Aug 20, 2014
@luqmana luqmana deleted the psfo branch July 15, 2015 23:59
bors added a commit to rust-lang-ci/rust that referenced this pull request Mar 31, 2024
feat: Implement ATPIT

Resolves rust-lang#16584

Note: This implementation only works for ATPIT, not for TAIT.
The main hinderence that blocks the later is the defining sites of TAIT can be inner blocks like in;
```rust
type X = impl Default;

mod foo {
    fn bar() -> super::X {
        ()
    }
}
```
So, to figure out we are defining it or not, we should recursively probe for nested modules and bodies.

For ATPIT, we can just look into current body because `error[E0401]: can't use 'Self' from outer item` prevent such nested structures;

```rust
trait Foo {
    type Item;
    fn foo() -> Self::Item;
}

struct Bar;

impl Foo for Bar {
    type Item = impl Default;
    fn foo() -> Self::Item {
        fn bar() -> Self::Item {
                    ^^^^^^^^^^
                    |
                    use of `Self` from outer item
                    refer to the type directly here instead
            5
        }
        bar()
    }
}
```

But this implementation does not checks for unification of same ATPIT between different bodies, monomorphization, nor layout for similar reason. (But these can be done with lazyness if we can utilize something like "mutation of interned value" with `db`. I coundn't find such thing but I would appreciate it if such thing exists and you could let me know 😅)
flip1995 added a commit to flip1995/rust that referenced this pull request Mar 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Packed structs are passed incorrectly to foreign functions on x86_64

5 participants