Skip to content

[PAC] FnAbi, llvm.ptrauth.resign and Session API change (2/8) - #159074

Open
jchlanda wants to merge 2 commits into
rust-lang:mainfrom
jchlanda:jakub/pac_ty_disc_PR_2
Open

[PAC] FnAbi, llvm.ptrauth.resign and Session API change (2/8)#159074
jchlanda wants to merge 2 commits into
rust-lang:mainfrom
jchlanda:jakub/pac_ty_disc_PR_2

Conversation

@jchlanda

@jchlanda jchlanda commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

View all comments

This patch introduces the following:

  • Extends FnAbi (callconv) with a ptrauth_type_discriminator field. This field is only used when emitting pointer authentication call bundles. It is stored in FnAbi because the call site is not guaranteed to have access to an Instance, so the discriminator cannot always be computed on demand.
  • Adds support for llvm.ptrauth.resign. This intrinsic will be used when support for semantic transmute is added.
  • Performs a minor API redesign as groundwork for allowing call sites to modify schemas in place.

The use of an extended FnAbi is dictated by the need to issue a ptrauth bundle for call-like instructions. At that point, we only have access to the FnAbi struct (Instance is not guaranteed to be available).

Fundamentally, the discriminator originates from the source-level function type. Deriving it at the codegen stage would introduce a layering violation: it would require relying on FnAbi's ArgAbi (for both return values and arguments) to preserve source-level type information. This is not a guarantee provided by these abstractions (and in code comments), as FnAbi represents a lowered calling convention rather than the original function signature.

Computing the discriminator at this stage would therefore create a hard dependency on type information being available where it is not intended to be preserved. Carrying the value explicitly avoids reconstructing source-level information from lowered ABI data and keeps the abstraction boundaries intact.


This is part 2 of a sequence of 8 PRs that together implement support for function pointer type discrimination:

  1. Encoder and hash
  2. FnAbi, llvm.ptrauth.resign and Session API change
  3. FPTR_TYPE_DISCR in ABI Version
  4. Static allocs
  5. Transmutes
  6. Propagate discriminator logic through remaining get_fn_ptr calls sites
  7. Minicore updates to support fn ptr type discriminator tests
  8. Fn ptr type discrimination tests

Useful links:

@rustbot rustbot added A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jul 10, 2026
@jchlanda jchlanda changed the title [WIP] 2 FnAbi, llvm.ptrauth.resign and Session API change [WIP] 2 - FnAbi, llvm.ptrauth.resign and Session API change Jul 10, 2026
@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch 2 times, most recently from 8f37395 to 0792cdd Compare July 14, 2026 07:27
@rust-log-analyzer

This comment has been minimized.

@rust-bors

This comment has been minimized.

@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch from 0792cdd to 281565d Compare July 14, 2026 08:51
@rust-log-analyzer

This comment has been minimized.

@rust-bors

This comment has been minimized.

@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch from 281565d to 360a700 Compare July 17, 2026 07:01
@rust-log-analyzer

This comment has been minimized.

@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch 2 times, most recently from 089232b to d85aa6b Compare July 17, 2026 09:47
let discriminator = if self.sess().pointer_authentication_fn_ptr_type_discrimination() {
fn_abi?.ptrauth_type_discriminator
} else {
0

@kovdan01 kovdan01 Jul 20, 2026

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.

Do we need this check here? As far as I can see, we already conditionally set ptrauth_type_discriminator to 0 if pointer_authentication_fn_ptr_type_discrimination() is false in compiler/rustc_ty_utils/src/abi.rs. Maybe we can even rename ptrauth_type_discriminator field in FnAbi to smth like just ptrauth_discriminator and assume it's storing the "effective" discriminator (either 0 or type discriminator)?

Just loudly thinking, I might easily miss smth - I would appreciate your explanation if I've got smth wrong

View changes since the review

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

You are right, we don't need it here, added comment about it though.

Also renaming to ptrauth_discriminator.

Comment thread compiler/rustc_ty_utils/src/abi.rs Outdated
),
ptrauth_type_discriminator: if tcx.sess.pointer_authentication_fn_ptr_type_discrimination()
{
compute_fn_ptr_type_discriminator_for(tcx, sig).unwrap_or(0).into()

@kovdan01 kovdan01 Jul 20, 2026

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.

Just in case: do I get it correct that the sequence of PRs is not about "at each point we are expected to have a successful build", it's about ease of review only?

I'm just not seeing compute_fn_ptr_type_discriminator_for defined at this point - was it intentional or should PR content split decisions be reconsidered?

View changes since the review

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

No, you do not. It is intended to be buildable at each stage.

The split is twofold: logical, to show the progression of the implementation, and functional, since each commit is expected to be independently buildable. They are not exactly atomic in the sense that the functionality will not be complete, so if you check out a commit in the middle of the sequence, it should build, but the generated code might not be fully correct.

The function you are referring to was added in the first PR of the series:
https://github.com/rust-lang/rust/pull/159071/changes#diff-40f6b89998ba7d54d3f76fde93944eab9b8ba5a16eb1d763c598e2802a180af7R166

/// Indicates if an unwind may happen across a call to this function.
pub can_unwind: bool,
/// Computed type discriminator for pointer authentication purpose.
pub ptrauth_type_discriminator: u64,

@kovdan01 kovdan01 Jul 20, 2026

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.

Just a future note: when submitting as final non-draft PR for mainline review, it might be worth to provide a summary why a new field in FnAbi is considered at this point the proper solution for our problem and why we really need that. The summary could be placed somewhere in the PR description/PR comments/elsewhere if a more appropriate place exists.

View changes since the review

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done, in the PR description.

@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch from d85aa6b to 7708e94 Compare July 20, 2026 12:44
@rust-log-analyzer

This comment has been minimized.

@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch 3 times, most recently from 5d74d74 to 69e4d08 Compare July 24, 2026 15:34
@jchlanda jchlanda changed the title [WIP] 2 - FnAbi, llvm.ptrauth.resign and Session API change [PAC] FnAbi, llvm.ptrauth.resign and Session API change (2/8) Jul 24, 2026
@jchlanda
jchlanda marked this pull request as ready for review July 24, 2026 18:07
@rust-log-analyzer

This comment has been minimized.

@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch from 6a4ad09 to 5818ee3 Compare August 3, 2026 07:51
@rustbot

This comment has been minimized.

@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch from 5818ee3 to e051d93 Compare August 10, 2026 08:05
@rustbot rustbot added the A-meta Area: Issues & PRs about the rust-lang/rust repository itself label Aug 10, 2026
@rustbot

This comment has been minimized.

@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch from e051d93 to 65cfc9f Compare August 12, 2026 06:20
@rustbot

This comment has been minimized.

@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch from 65cfc9f to a574613 Compare August 17, 2026 08:40
@rustbot

This comment has been minimized.

@davidtwco davidtwco left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM after pre-req lands with this tweak

View changes since this review

/// Indicates if an unwind may happen across a call to this function.
pub can_unwind: bool,
/// Computed type discriminator for pointer authentication purpose.
pub ptrauth_discriminator: u64,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Can you use an Option or introduce an enum here instead of using 0 as a default value? You can add a method that does an unwrap_or(0) for when you actually need the value.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in 96a2710

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 19, 2026
…=davidtwco

[PAC] Encoder and hash (1/8)

This patch implements Rust's equivalent of Clang's function pointer type discriminator computation used for pointer authentication. Compatibility with Clang is a primary design goal. For a given extern "C" function type, the discriminator produced by Rust must match the value computed by Clang so that function pointers can be exchanged safely between Rust and C code while preserving pointer authentication semantics.

The implementation mirrors Clang's behavior in ASTContext::encodeTypeForFunctionPointerAuth, ensuring that identical C-compatible function types produce identical discriminators. See: https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3.

---

This is part 1 of a sequence of 8 PRs that together implement support for function pointer type discrimination:
1. [Encoder and hash](rust-lang#159071)
2. [FnAbi, llvm.ptrauth.resign and Session API change](rust-lang#159074)
3. [FPTR_TYPE_DISCR in ABI Version](rust-lang#159075)
4. [Static allocs](rust-lang#159081)
5. [Transmutes](rust-lang#159082)
6. [Propagate discriminator logic through remaining get_fn_ptr calls sites](rust-lang#159084)
7. [Minicore updates to support fn ptr type discriminator tests](rust-lang#159086)
8. [Fn ptr type discrimination tests](rust-lang#159087)

---

Useful links:
* Previous PAC work:
  * `pauthtest` introduction: rust-lang#155722
  * Library support follow up: rust-lang#156548
  * Config follow up: rust-lang#156712
* [Project goal](https://rust-lang.github.io/rust-project-goals/2026/aarch64_pointer_authentication_pauthtest.html) and [tracking issue](rust-lang/goals#618)
* Clang's implementation of [ASTContext::encodeTypeForFunctionPointerAuth](https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3)
* LLVM's [SpiHash](https://github.com/llvm/llvm-project/blob/main/third-party/siphash/include/siphash/SipHash.h)
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 19, 2026
…=davidtwco

[PAC] Encoder and hash (1/8)

This patch implements Rust's equivalent of Clang's function pointer type discriminator computation used for pointer authentication. Compatibility with Clang is a primary design goal. For a given extern "C" function type, the discriminator produced by Rust must match the value computed by Clang so that function pointers can be exchanged safely between Rust and C code while preserving pointer authentication semantics.

The implementation mirrors Clang's behavior in ASTContext::encodeTypeForFunctionPointerAuth, ensuring that identical C-compatible function types produce identical discriminators. See: https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3.

---

This is part 1 of a sequence of 8 PRs that together implement support for function pointer type discrimination:
1. [Encoder and hash](rust-lang#159071)
2. [FnAbi, llvm.ptrauth.resign and Session API change](rust-lang#159074)
3. [FPTR_TYPE_DISCR in ABI Version](rust-lang#159075)
4. [Static allocs](rust-lang#159081)
5. [Transmutes](rust-lang#159082)
6. [Propagate discriminator logic through remaining get_fn_ptr calls sites](rust-lang#159084)
7. [Minicore updates to support fn ptr type discriminator tests](rust-lang#159086)
8. [Fn ptr type discrimination tests](rust-lang#159087)

---

Useful links:
* Previous PAC work:
  * `pauthtest` introduction: rust-lang#155722
  * Library support follow up: rust-lang#156548
  * Config follow up: rust-lang#156712
* [Project goal](https://rust-lang.github.io/rust-project-goals/2026/aarch64_pointer_authentication_pauthtest.html) and [tracking issue](rust-lang/goals#618)
* Clang's implementation of [ASTContext::encodeTypeForFunctionPointerAuth](https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3)
* LLVM's [SpiHash](https://github.com/llvm/llvm-project/blob/main/third-party/siphash/include/siphash/SipHash.h)
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 19, 2026
…=davidtwco

[PAC] Encoder and hash (1/8)

This patch implements Rust's equivalent of Clang's function pointer type discriminator computation used for pointer authentication. Compatibility with Clang is a primary design goal. For a given extern "C" function type, the discriminator produced by Rust must match the value computed by Clang so that function pointers can be exchanged safely between Rust and C code while preserving pointer authentication semantics.

The implementation mirrors Clang's behavior in ASTContext::encodeTypeForFunctionPointerAuth, ensuring that identical C-compatible function types produce identical discriminators. See: https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3.

---

This is part 1 of a sequence of 8 PRs that together implement support for function pointer type discrimination:
1. [Encoder and hash](rust-lang#159071)
2. [FnAbi, llvm.ptrauth.resign and Session API change](rust-lang#159074)
3. [FPTR_TYPE_DISCR in ABI Version](rust-lang#159075)
4. [Static allocs](rust-lang#159081)
5. [Transmutes](rust-lang#159082)
6. [Propagate discriminator logic through remaining get_fn_ptr calls sites](rust-lang#159084)
7. [Minicore updates to support fn ptr type discriminator tests](rust-lang#159086)
8. [Fn ptr type discrimination tests](rust-lang#159087)

---

Useful links:
* Previous PAC work:
  * `pauthtest` introduction: rust-lang#155722
  * Library support follow up: rust-lang#156548
  * Config follow up: rust-lang#156712
* [Project goal](https://rust-lang.github.io/rust-project-goals/2026/aarch64_pointer_authentication_pauthtest.html) and [tracking issue](rust-lang/goals#618)
* Clang's implementation of [ASTContext::encodeTypeForFunctionPointerAuth](https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3)
* LLVM's [SpiHash](https://github.com/llvm/llvm-project/blob/main/third-party/siphash/include/siphash/SipHash.h)
rust-bors Bot pushed a commit that referenced this pull request Aug 19, 2026
[PAC] Encoder and hash (1/8)



This patch implements Rust's equivalent of Clang's function pointer type discriminator computation used for pointer authentication. Compatibility with Clang is a primary design goal. For a given extern "C" function type, the discriminator produced by Rust must match the value computed by Clang so that function pointers can be exchanged safely between Rust and C code while preserving pointer authentication semantics.

The implementation mirrors Clang's behavior in ASTContext::encodeTypeForFunctionPointerAuth, ensuring that identical C-compatible function types produce identical discriminators. See: https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3.

---

This is part 1 of a sequence of 8 PRs that together implement support for function pointer type discrimination:
1. [Encoder and hash](#159071)
2. [FnAbi, llvm.ptrauth.resign and Session API change](#159074)
3. [FPTR_TYPE_DISCR in ABI Version](#159075)
4. [Static allocs](#159081)
5. [Transmutes](#159082)
6. [Propagate discriminator logic through remaining get_fn_ptr calls sites](#159084)
7. [Minicore updates to support fn ptr type discriminator tests](#159086)
8. [Fn ptr type discrimination tests](#159087)

---

Useful links:
* Previous PAC work:
  * `pauthtest` introduction: #155722
  * Library support follow up: #156548
  * Config follow up: #156712
* [Project goal](https://rust-lang.github.io/rust-project-goals/2026/aarch64_pointer_authentication_pauthtest.html) and [tracking issue](rust-lang/goals#618)
* Clang's implementation of [ASTContext::encodeTypeForFunctionPointerAuth](https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3)
* LLVM's [SpiHash](https://github.com/llvm/llvm-project/blob/main/third-party/siphash/include/siphash/SipHash.h)
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 19, 2026
…=davidtwco

[PAC] Encoder and hash (1/8)

This patch implements Rust's equivalent of Clang's function pointer type discriminator computation used for pointer authentication. Compatibility with Clang is a primary design goal. For a given extern "C" function type, the discriminator produced by Rust must match the value computed by Clang so that function pointers can be exchanged safely between Rust and C code while preserving pointer authentication semantics.

The implementation mirrors Clang's behavior in ASTContext::encodeTypeForFunctionPointerAuth, ensuring that identical C-compatible function types produce identical discriminators. See: https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3.

---

This is part 1 of a sequence of 8 PRs that together implement support for function pointer type discrimination:
1. [Encoder and hash](rust-lang#159071)
2. [FnAbi, llvm.ptrauth.resign and Session API change](rust-lang#159074)
3. [FPTR_TYPE_DISCR in ABI Version](rust-lang#159075)
4. [Static allocs](rust-lang#159081)
5. [Transmutes](rust-lang#159082)
6. [Propagate discriminator logic through remaining get_fn_ptr calls sites](rust-lang#159084)
7. [Minicore updates to support fn ptr type discriminator tests](rust-lang#159086)
8. [Fn ptr type discrimination tests](rust-lang#159087)

---

Useful links:
* Previous PAC work:
  * `pauthtest` introduction: rust-lang#155722
  * Library support follow up: rust-lang#156548
  * Config follow up: rust-lang#156712
* [Project goal](https://rust-lang.github.io/rust-project-goals/2026/aarch64_pointer_authentication_pauthtest.html) and [tracking issue](rust-lang/goals#618)
* Clang's implementation of [ASTContext::encodeTypeForFunctionPointerAuth](https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3)
* LLVM's [SpiHash](https://github.com/llvm/llvm-project/blob/main/third-party/siphash/include/siphash/SipHash.h)
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 20, 2026
…=davidtwco

[PAC] Encoder and hash (1/8)

This patch implements Rust's equivalent of Clang's function pointer type discriminator computation used for pointer authentication. Compatibility with Clang is a primary design goal. For a given extern "C" function type, the discriminator produced by Rust must match the value computed by Clang so that function pointers can be exchanged safely between Rust and C code while preserving pointer authentication semantics.

The implementation mirrors Clang's behavior in ASTContext::encodeTypeForFunctionPointerAuth, ensuring that identical C-compatible function types produce identical discriminators. See: https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3.

---

This is part 1 of a sequence of 8 PRs that together implement support for function pointer type discrimination:
1. [Encoder and hash](rust-lang#159071)
2. [FnAbi, llvm.ptrauth.resign and Session API change](rust-lang#159074)
3. [FPTR_TYPE_DISCR in ABI Version](rust-lang#159075)
4. [Static allocs](rust-lang#159081)
5. [Transmutes](rust-lang#159082)
6. [Propagate discriminator logic through remaining get_fn_ptr calls sites](rust-lang#159084)
7. [Minicore updates to support fn ptr type discriminator tests](rust-lang#159086)
8. [Fn ptr type discrimination tests](rust-lang#159087)

---

Useful links:
* Previous PAC work:
  * `pauthtest` introduction: rust-lang#155722
  * Library support follow up: rust-lang#156548
  * Config follow up: rust-lang#156712
* [Project goal](https://rust-lang.github.io/rust-project-goals/2026/aarch64_pointer_authentication_pauthtest.html) and [tracking issue](rust-lang/goals#618)
* Clang's implementation of [ASTContext::encodeTypeForFunctionPointerAuth](https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3)
* LLVM's [SpiHash](https://github.com/llvm/llvm-project/blob/main/third-party/siphash/include/siphash/SipHash.h)
@rust-log-analyzer

This comment has been minimized.

@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch from 5b1bb41 to 4c55733 Compare August 20, 2026 07:07
@rust-log-analyzer

This comment has been minimized.

@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch from 4c55733 to 96a2710 Compare August 20, 2026 08:01
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 20, 2026
…=davidtwco

[PAC] Encoder and hash (1/8)

This patch implements Rust's equivalent of Clang's function pointer type discriminator computation used for pointer authentication. Compatibility with Clang is a primary design goal. For a given extern "C" function type, the discriminator produced by Rust must match the value computed by Clang so that function pointers can be exchanged safely between Rust and C code while preserving pointer authentication semantics.

The implementation mirrors Clang's behavior in ASTContext::encodeTypeForFunctionPointerAuth, ensuring that identical C-compatible function types produce identical discriminators. See: https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3.

---

This is part 1 of a sequence of 8 PRs that together implement support for function pointer type discrimination:
1. [Encoder and hash](rust-lang#159071)
2. [FnAbi, llvm.ptrauth.resign and Session API change](rust-lang#159074)
3. [FPTR_TYPE_DISCR in ABI Version](rust-lang#159075)
4. [Static allocs](rust-lang#159081)
5. [Transmutes](rust-lang#159082)
6. [Propagate discriminator logic through remaining get_fn_ptr calls sites](rust-lang#159084)
7. [Minicore updates to support fn ptr type discriminator tests](rust-lang#159086)
8. [Fn ptr type discrimination tests](rust-lang#159087)

---

Useful links:
* Previous PAC work:
  * `pauthtest` introduction: rust-lang#155722
  * Library support follow up: rust-lang#156548
  * Config follow up: rust-lang#156712
* [Project goal](https://rust-lang.github.io/rust-project-goals/2026/aarch64_pointer_authentication_pauthtest.html) and [tracking issue](rust-lang/goals#618)
* Clang's implementation of [ASTContext::encodeTypeForFunctionPointerAuth](https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3)
* LLVM's [SpiHash](https://github.com/llvm/llvm-project/blob/main/third-party/siphash/include/siphash/SipHash.h)
rust-bors Bot pushed a commit that referenced this pull request Aug 20, 2026
Rollup merge of #159071 - jchlanda:jakub/pac_ty_disc_PR_1, r=davidtwco

[PAC] Encoder and hash (1/8)

This patch implements Rust's equivalent of Clang's function pointer type discriminator computation used for pointer authentication. Compatibility with Clang is a primary design goal. For a given extern "C" function type, the discriminator produced by Rust must match the value computed by Clang so that function pointers can be exchanged safely between Rust and C code while preserving pointer authentication semantics.

The implementation mirrors Clang's behavior in ASTContext::encodeTypeForFunctionPointerAuth, ensuring that identical C-compatible function types produce identical discriminators. See: https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3.

---

This is part 1 of a sequence of 8 PRs that together implement support for function pointer type discrimination:
1. [Encoder and hash](#159071)
2. [FnAbi, llvm.ptrauth.resign and Session API change](#159074)
3. [FPTR_TYPE_DISCR in ABI Version](#159075)
4. [Static allocs](#159081)
5. [Transmutes](#159082)
6. [Propagate discriminator logic through remaining get_fn_ptr calls sites](#159084)
7. [Minicore updates to support fn ptr type discriminator tests](#159086)
8. [Fn ptr type discrimination tests](#159087)

---

Useful links:
* Previous PAC work:
  * `pauthtest` introduction: #155722
  * Library support follow up: #156548
  * Config follow up: #156712
* [Project goal](https://rust-lang.github.io/rust-project-goals/2026/aarch64_pointer_authentication_pauthtest.html) and [tracking issue](rust-lang/goals#618)
* Clang's implementation of [ASTContext::encodeTypeForFunctionPointerAuth](https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3)
* LLVM's [SpiHash](https://github.com/llvm/llvm-project/blob/main/third-party/siphash/include/siphash/SipHash.h)
pull Bot pushed a commit to LeeeeeeM/miri that referenced this pull request Aug 21, 2026
[PAC] Encoder and hash (1/8)

This patch implements Rust's equivalent of Clang's function pointer type discriminator computation used for pointer authentication. Compatibility with Clang is a primary design goal. For a given extern "C" function type, the discriminator produced by Rust must match the value computed by Clang so that function pointers can be exchanged safely between Rust and C code while preserving pointer authentication semantics.

The implementation mirrors Clang's behavior in ASTContext::encodeTypeForFunctionPointerAuth, ensuring that identical C-compatible function types produce identical discriminators. See: https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3.

---

This is part 1 of a sequence of 8 PRs that together implement support for function pointer type discrimination:
1. [Encoder and hash](rust-lang/rust#159071)
2. [FnAbi, llvm.ptrauth.resign and Session API change](rust-lang/rust#159074)
3. [FPTR_TYPE_DISCR in ABI Version](rust-lang/rust#159075)
4. [Static allocs](rust-lang/rust#159081)
5. [Transmutes](rust-lang/rust#159082)
6. [Propagate discriminator logic through remaining get_fn_ptr calls sites](rust-lang/rust#159084)
7. [Minicore updates to support fn ptr type discriminator tests](rust-lang/rust#159086)
8. [Fn ptr type discrimination tests](rust-lang/rust#159087)

---

Useful links:
* Previous PAC work:
  * `pauthtest` introduction: rust-lang/rust#155722
  * Library support follow up: rust-lang/rust#156548
  * Config follow up: rust-lang/rust#156712
* [Project goal](https://rust-lang.github.io/rust-project-goals/2026/aarch64_pointer_authentication_pauthtest.html) and [tracking issue](rust-lang/goals#618)
* Clang's implementation of [ASTContext::encodeTypeForFunctionPointerAuth](https://clang.llvm.org/doxygen/ASTContext_8cpp.html#abb1375e068e807917527842d05cadea3)
* LLVM's [SpiHash](https://github.com/llvm/llvm-project/blob/main/third-party/siphash/include/siphash/SipHash.h)
@jchlanda

Copy link
Copy Markdown
Contributor Author

This should be ready to land @davidtwco @JonathanBrouwer. Thank you!

This patch introduces the following:

* Extends `FnAbi` (`callconv`) with a `ptrauth_type_discriminator`
  field. This field is only used when emitting pointer authentication
  call bundles. It is stored in `FnAbi` because the call site is not
  guaranteed to have access to an `Instance`, so the discriminator
  cannot always be computed on demand.
* Adds support for `llvm.ptrauth.resign`. This intrinsic will be used
  when support for semantic transmute is added.
* Performs a minor API redesign as groundwork for allowing call sites to
  modify schemas in place.
@jchlanda
jchlanda force-pushed the jakub/pac_ty_disc_PR_2 branch from 96a2710 to 5ebe84b Compare September 1, 2026 11:50
@rustbot

rustbot commented Sep 1, 2026

Copy link
Copy Markdown
Collaborator

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@rust-log-analyzer

Copy link
Copy Markdown
Collaborator

The job x86_64-gnu-tools failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
100  177M  100  177M    0     0   288M      0 --:--:-- --:--:-- --:--:--  288M
#12 DONE 1.7s

#13 [ 7/10] RUN unzip -d /usr/bin/ chrome-linux64.zip && rm chrome-linux64.zip
#13 0.044 Archive:  chrome-linux64.zip
#13 0.045   inflating: /usr/bin/chrome-linux64/ABOUT  
#13 0.045   inflating: /usr/bin/chrome-linux64/MEIPreload/manifest.json  
#13 0.045   inflating: /usr/bin/chrome-linux64/MEIPreload/preloaded_data.pb  
#13 0.046   inflating: /usr/bin/chrome-linux64/PrivacySandboxAttestationsPreloaded/manifest.json  
#13 0.046   inflating: /usr/bin/chrome-linux64/PrivacySandboxAttestationsPreloaded/privacy-sandbox-attestations.dat  
#13 0.046   inflating: /usr/bin/chrome-linux64/WidevineCdm/LICENSE  
#13 0.046   inflating: /usr/bin/chrome-linux64/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so  
#13 0.197   inflating: /usr/bin/chrome-linux64/WidevineCdm/manifest.json  
#13 0.197   inflating: /usr/bin/chrome-linux64/chrome  
#13 2.763   inflating: /usr/bin/chrome-linux64/chrome-wrapper  
#13 2.763   inflating: /usr/bin/chrome-linux64/chrome_100_percent.pak  
#13 2.768   inflating: /usr/bin/chrome-linux64/chrome_200_percent.pak  
#13 2.778   inflating: /usr/bin/chrome-linux64/chrome_crashpad_handler  
#13 2.797   inflating: /usr/bin/chrome-linux64/chrome_sandbox  
#13 2.797   inflating: /usr/bin/chrome-linux64/deb.deps  
#13 2.798   inflating: /usr/bin/chrome-linux64/icudtl.dat  
#13 2.890   inflating: /usr/bin/chrome-linux64/libEGL.so  
#13 2.893   inflating: /usr/bin/chrome-linux64/libGLESv2.so  
#13 2.950   inflating: /usr/bin/chrome-linux64/libvk_swiftshader.so  
#13 2.993   inflating: /usr/bin/chrome-linux64/libvulkan.so.1  
#13 2.999   inflating: /usr/bin/chrome-linux64/locales/af.pak  
#13 3.004   inflating: /usr/bin/chrome-linux64/locales/af_FEMININE.pak  
#13 3.004   inflating: /usr/bin/chrome-linux64/locales/af_MASCULINE.pak  
#13 3.004   inflating: /usr/bin/chrome-linux64/locales/af_NEUTER.pak  
#13 3.004   inflating: /usr/bin/chrome-linux64/locales/am.pak  
#13 3.012   inflating: /usr/bin/chrome-linux64/locales/am_FEMININE.pak  
#13 3.012   inflating: /usr/bin/chrome-linux64/locales/am_MASCULINE.pak  
#13 3.012   inflating: /usr/bin/chrome-linux64/locales/am_NEUTER.pak  
#13 3.012   inflating: /usr/bin/chrome-linux64/locales/ar.pak  
#13 3.021   inflating: /usr/bin/chrome-linux64/locales/ar_FEMININE.pak  
#13 3.021   inflating: /usr/bin/chrome-linux64/locales/ar_MASCULINE.pak  
#13 3.021   inflating: /usr/bin/chrome-linux64/locales/ar_NEUTER.pak  
#13 3.021   inflating: /usr/bin/chrome-linux64/locales/bg.pak  
#13 3.030   inflating: /usr/bin/chrome-linux64/locales/bg_FEMININE.pak  
#13 3.030   inflating: /usr/bin/chrome-linux64/locales/bg_MASCULINE.pak  
#13 3.030   inflating: /usr/bin/chrome-linux64/locales/bg_NEUTER.pak  
#13 3.030   inflating: /usr/bin/chrome-linux64/locales/bn.pak  
#13 3.041   inflating: /usr/bin/chrome-linux64/locales/bn_FEMININE.pak  
#13 3.041   inflating: /usr/bin/chrome-linux64/locales/bn_MASCULINE.pak  
#13 3.041   inflating: /usr/bin/chrome-linux64/locales/bn_NEUTER.pak  
#13 3.041   inflating: /usr/bin/chrome-linux64/locales/ca.pak  
#13 3.047   inflating: /usr/bin/chrome-linux64/locales/ca_FEMININE.pak  
#13 3.047   inflating: /usr/bin/chrome-linux64/locales/ca_MASCULINE.pak  
#13 3.047   inflating: /usr/bin/chrome-linux64/locales/ca_NEUTER.pak  
#13 3.047   inflating: /usr/bin/chrome-linux64/locales/cs.pak  
#13 3.053   inflating: /usr/bin/chrome-linux64/locales/cs_FEMININE.pak  
#13 3.053   inflating: /usr/bin/chrome-linux64/locales/cs_MASCULINE.pak  
#13 3.053   inflating: /usr/bin/chrome-linux64/locales/cs_NEUTER.pak  
#13 3.053   inflating: /usr/bin/chrome-linux64/locales/da.pak  
#13 3.059   inflating: /usr/bin/chrome-linux64/locales/da_FEMININE.pak  
#13 3.059   inflating: /usr/bin/chrome-linux64/locales/da_MASCULINE.pak  
#13 3.059   inflating: /usr/bin/chrome-linux64/locales/da_NEUTER.pak  
#13 3.059   inflating: /usr/bin/chrome-linux64/locales/de.pak  
#13 3.065   inflating: /usr/bin/chrome-linux64/locales/de_FEMININE.pak  
#13 3.065   inflating: /usr/bin/chrome-linux64/locales/de_MASCULINE.pak  
#13 3.065   inflating: /usr/bin/chrome-linux64/locales/de_NEUTER.pak  
#13 3.065   inflating: /usr/bin/chrome-linux64/locales/el.pak  
#13 3.075   inflating: /usr/bin/chrome-linux64/locales/el_FEMININE.pak  
#13 3.075   inflating: /usr/bin/chrome-linux64/locales/el_MASCULINE.pak  
#13 3.075   inflating: /usr/bin/chrome-linux64/locales/el_NEUTER.pak  
#13 3.075   inflating: /usr/bin/chrome-linux64/locales/en-GB.pak  
#13 3.080   inflating: /usr/bin/chrome-linux64/locales/en-GB_FEMININE.pak  
#13 3.080   inflating: /usr/bin/chrome-linux64/locales/en-GB_MASCULINE.pak  
#13 3.080   inflating: /usr/bin/chrome-linux64/locales/en-GB_NEUTER.pak  
#13 3.080   inflating: /usr/bin/chrome-linux64/locales/en-US.pak  
#13 3.085   inflating: /usr/bin/chrome-linux64/locales/en-US_FEMININE.pak  
#13 3.085   inflating: /usr/bin/chrome-linux64/locales/en-US_MASCULINE.pak  
#13 3.085   inflating: /usr/bin/chrome-linux64/locales/en-US_NEUTER.pak  
#13 3.085   inflating: /usr/bin/chrome-linux64/locales/es-419.pak  
#13 3.091   inflating: /usr/bin/chrome-linux64/locales/es-419_FEMININE.pak  
#13 3.091   inflating: /usr/bin/chrome-linux64/locales/es-419_MASCULINE.pak  
#13 3.091   inflating: /usr/bin/chrome-linux64/locales/es-419_NEUTER.pak  
#13 3.091   inflating: /usr/bin/chrome-linux64/locales/es.pak  
#13 3.097   inflating: /usr/bin/chrome-linux64/locales/es_FEMININE.pak  
#13 3.097   inflating: /usr/bin/chrome-linux64/locales/es_MASCULINE.pak  
#13 3.097   inflating: /usr/bin/chrome-linux64/locales/es_NEUTER.pak  
#13 3.097   inflating: /usr/bin/chrome-linux64/locales/et.pak  
#13 3.102   inflating: /usr/bin/chrome-linux64/locales/et_FEMININE.pak  
#13 3.102   inflating: /usr/bin/chrome-linux64/locales/et_MASCULINE.pak  
#13 3.102   inflating: /usr/bin/chrome-linux64/locales/et_NEUTER.pak  
#13 3.102   inflating: /usr/bin/chrome-linux64/locales/fa.pak  
#13 3.111   inflating: /usr/bin/chrome-linux64/locales/fa_FEMININE.pak  
#13 3.111   inflating: /usr/bin/chrome-linux64/locales/fa_MASCULINE.pak  
#13 3.111   inflating: /usr/bin/chrome-linux64/locales/fa_NEUTER.pak  
#13 3.111   inflating: /usr/bin/chrome-linux64/locales/fi.pak  
#13 3.116   inflating: /usr/bin/chrome-linux64/locales/fi_FEMININE.pak  
#13 3.116   inflating: /usr/bin/chrome-linux64/locales/fi_MASCULINE.pak  
#13 3.116   inflating: /usr/bin/chrome-linux64/locales/fi_NEUTER.pak  
#13 3.116   inflating: /usr/bin/chrome-linux64/locales/fil.pak  
#13 3.122   inflating: /usr/bin/chrome-linux64/locales/fil_FEMININE.pak  
#13 3.122   inflating: /usr/bin/chrome-linux64/locales/fil_MASCULINE.pak  
#13 3.122   inflating: /usr/bin/chrome-linux64/locales/fil_NEUTER.pak  
#13 3.123   inflating: /usr/bin/chrome-linux64/locales/fr.pak  
#13 3.129   inflating: /usr/bin/chrome-linux64/locales/fr_FEMININE.pak  
#13 3.129   inflating: /usr/bin/chrome-linux64/locales/fr_MASCULINE.pak  
#13 3.129   inflating: /usr/bin/chrome-linux64/locales/fr_NEUTER.pak  
#13 3.129   inflating: /usr/bin/chrome-linux64/locales/gu.pak  
#13 3.139   inflating: /usr/bin/chrome-linux64/locales/gu_FEMININE.pak  
#13 3.140   inflating: /usr/bin/chrome-linux64/locales/gu_MASCULINE.pak  
#13 3.140   inflating: /usr/bin/chrome-linux64/locales/gu_NEUTER.pak  
#13 3.140   inflating: /usr/bin/chrome-linux64/locales/he.pak  
#13 3.147   inflating: /usr/bin/chrome-linux64/locales/he_FEMININE.pak  
#13 3.147   inflating: /usr/bin/chrome-linux64/locales/he_MASCULINE.pak  
#13 3.147   inflating: /usr/bin/chrome-linux64/locales/he_NEUTER.pak  
#13 3.147   inflating: /usr/bin/chrome-linux64/locales/hi.pak  
#13 3.159   inflating: /usr/bin/chrome-linux64/locales/hi_FEMININE.pak  
#13 3.159   inflating: /usr/bin/chrome-linux64/locales/hi_MASCULINE.pak  
#13 3.159   inflating: /usr/bin/chrome-linux64/locales/hi_NEUTER.pak  
#13 3.159   inflating: /usr/bin/chrome-linux64/locales/hr.pak  
#13 3.165   inflating: /usr/bin/chrome-linux64/locales/hr_FEMININE.pak  
#13 3.165   inflating: /usr/bin/chrome-linux64/locales/hr_MASCULINE.pak  
#13 3.165   inflating: /usr/bin/chrome-linux64/locales/hr_NEUTER.pak  
#13 3.165   inflating: /usr/bin/chrome-linux64/locales/hu.pak  
#13 3.171   inflating: /usr/bin/chrome-linux64/locales/hu_FEMININE.pak  
#13 3.171   inflating: /usr/bin/chrome-linux64/locales/hu_MASCULINE.pak  
#13 3.171   inflating: /usr/bin/chrome-linux64/locales/hu_NEUTER.pak  
#13 3.171   inflating: /usr/bin/chrome-linux64/locales/id.pak  
#13 3.177   inflating: /usr/bin/chrome-linux64/locales/id_FEMININE.pak  
#13 3.177   inflating: /usr/bin/chrome-linux64/locales/id_MASCULINE.pak  
#13 3.177   inflating: /usr/bin/chrome-linux64/locales/id_NEUTER.pak  
#13 3.177   inflating: /usr/bin/chrome-linux64/locales/it.pak  
#13 3.182   inflating: /usr/bin/chrome-linux64/locales/it_FEMININE.pak  
#13 3.182   inflating: /usr/bin/chrome-linux64/locales/it_MASCULINE.pak  
#13 3.183   inflating: /usr/bin/chrome-linux64/locales/it_NEUTER.pak  
#13 3.183   inflating: /usr/bin/chrome-linux64/locales/ja.pak  
#13 3.189   inflating: /usr/bin/chrome-linux64/locales/ja_FEMININE.pak  
#13 3.189   inflating: /usr/bin/chrome-linux64/locales/ja_MASCULINE.pak  
#13 3.189   inflating: /usr/bin/chrome-linux64/locales/ja_NEUTER.pak  
#13 3.189   inflating: /usr/bin/chrome-linux64/locales/kn.pak  
#13 3.201   inflating: /usr/bin/chrome-linux64/locales/kn_FEMININE.pak  
#13 3.201   inflating: /usr/bin/chrome-linux64/locales/kn_MASCULINE.pak  
#13 3.201   inflating: /usr/bin/chrome-linux64/locales/kn_NEUTER.pak  
#13 3.201   inflating: /usr/bin/chrome-linux64/locales/ko.pak  
#13 3.207   inflating: /usr/bin/chrome-linux64/locales/ko_FEMININE.pak  
#13 3.207   inflating: /usr/bin/chrome-linux64/locales/ko_MASCULINE.pak  
#13 3.207   inflating: /usr/bin/chrome-linux64/locales/ko_NEUTER.pak  
#13 3.207   inflating: /usr/bin/chrome-linux64/locales/lt.pak  
#13 3.213   inflating: /usr/bin/chrome-linux64/locales/lt_FEMININE.pak  
#13 3.214   inflating: /usr/bin/chrome-linux64/locales/lt_MASCULINE.pak  
#13 3.214   inflating: /usr/bin/chrome-linux64/locales/lt_NEUTER.pak  
#13 3.214   inflating: /usr/bin/chrome-linux64/locales/lv.pak  
#13 3.220   inflating: /usr/bin/chrome-linux64/locales/lv_FEMININE.pak  
#13 3.220   inflating: /usr/bin/chrome-linux64/locales/lv_MASCULINE.pak  
#13 3.220   inflating: /usr/bin/chrome-linux64/locales/lv_NEUTER.pak  
#13 3.220   inflating: /usr/bin/chrome-linux64/locales/ml.pak  
#13 3.232   inflating: /usr/bin/chrome-linux64/locales/ml_FEMININE.pak  
#13 3.232   inflating: /usr/bin/chrome-linux64/locales/ml_MASCULINE.pak  
#13 3.232   inflating: /usr/bin/chrome-linux64/locales/ml_NEUTER.pak  
#13 3.232   inflating: /usr/bin/chrome-linux64/locales/mr.pak  
#13 3.243   inflating: /usr/bin/chrome-linux64/locales/mr_FEMININE.pak  
#13 3.243   inflating: /usr/bin/chrome-linux64/locales/mr_MASCULINE.pak  
#13 3.243   inflating: /usr/bin/chrome-linux64/locales/mr_NEUTER.pak  
#13 3.243   inflating: /usr/bin/chrome-linux64/locales/ms.pak  
#13 3.248   inflating: /usr/bin/chrome-linux64/locales/ms_FEMININE.pak  
#13 3.248   inflating: /usr/bin/chrome-linux64/locales/ms_MASCULINE.pak  
#13 3.248   inflating: /usr/bin/chrome-linux64/locales/ms_NEUTER.pak  
#13 3.249   inflating: /usr/bin/chrome-linux64/locales/nb.pak  
#13 3.254   inflating: /usr/bin/chrome-linux64/locales/nb_FEMININE.pak  
#13 3.254   inflating: /usr/bin/chrome-linux64/locales/nb_MASCULINE.pak  
#13 3.254   inflating: /usr/bin/chrome-linux64/locales/nb_NEUTER.pak  
#13 3.254   inflating: /usr/bin/chrome-linux64/locales/nl.pak  
#13 3.259   inflating: /usr/bin/chrome-linux64/locales/nl_FEMININE.pak  
#13 3.259   inflating: /usr/bin/chrome-linux64/locales/nl_MASCULINE.pak  
#13 3.260   inflating: /usr/bin/chrome-linux64/locales/nl_NEUTER.pak  
#13 3.260   inflating: /usr/bin/chrome-linux64/locales/pl.pak  
#13 3.266   inflating: /usr/bin/chrome-linux64/locales/pl_FEMININE.pak  
#13 3.266   inflating: /usr/bin/chrome-linux64/locales/pl_MASCULINE.pak  
#13 3.267   inflating: /usr/bin/chrome-linux64/locales/pl_NEUTER.pak  
#13 3.267   inflating: /usr/bin/chrome-linux64/locales/pt-BR.pak  
#13 3.272   inflating: /usr/bin/chrome-linux64/locales/pt-BR_FEMININE.pak  
#13 3.272   inflating: /usr/bin/chrome-linux64/locales/pt-BR_MASCULINE.pak  
#13 3.272   inflating: /usr/bin/chrome-linux64/locales/pt-BR_NEUTER.pak  
#13 3.272   inflating: /usr/bin/chrome-linux64/locales/pt-PT.pak  
#13 3.278   inflating: /usr/bin/chrome-linux64/locales/pt-PT_FEMININE.pak  
#13 3.278   inflating: /usr/bin/chrome-linux64/locales/pt-PT_MASCULINE.pak  
#13 3.278   inflating: /usr/bin/chrome-linux64/locales/pt-PT_NEUTER.pak  
#13 3.278   inflating: /usr/bin/chrome-linux64/locales/ro.pak  
#13 3.284   inflating: /usr/bin/chrome-linux64/locales/ro_FEMININE.pak  
#13 3.284   inflating: /usr/bin/chrome-linux64/locales/ro_MASCULINE.pak  
#13 3.284   inflating: /usr/bin/chrome-linux64/locales/ro_NEUTER.pak  
#13 3.284   inflating: /usr/bin/chrome-linux64/locales/ru.pak  
#13 3.293   inflating: /usr/bin/chrome-linux64/locales/ru_FEMININE.pak  
#13 3.293   inflating: /usr/bin/chrome-linux64/locales/ru_MASCULINE.pak  
#13 3.293   inflating: /usr/bin/chrome-linux64/locales/ru_NEUTER.pak  
#13 3.293   inflating: /usr/bin/chrome-linux64/locales/sk.pak  
#13 3.300   inflating: /usr/bin/chrome-linux64/locales/sk_FEMININE.pak  
#13 3.300   inflating: /usr/bin/chrome-linux64/locales/sk_MASCULINE.pak  
#13 3.300   inflating: /usr/bin/chrome-linux64/locales/sk_NEUTER.pak  
#13 3.300   inflating: /usr/bin/chrome-linux64/locales/sl.pak  
#13 3.306   inflating: /usr/bin/chrome-linux64/locales/sl_FEMININE.pak  
#13 3.306   inflating: /usr/bin/chrome-linux64/locales/sl_MASCULINE.pak  
#13 3.306   inflating: /usr/bin/chrome-linux64/locales/sl_NEUTER.pak  
#13 3.306   inflating: /usr/bin/chrome-linux64/locales/sr.pak  
#13 3.314   inflating: /usr/bin/chrome-linux64/locales/sr_FEMININE.pak  
#13 3.314   inflating: /usr/bin/chrome-linux64/locales/sr_MASCULINE.pak  
#13 3.314   inflating: /usr/bin/chrome-linux64/locales/sr_NEUTER.pak  
#13 3.315   inflating: /usr/bin/chrome-linux64/locales/sv.pak  
#13 3.320   inflating: /usr/bin/chrome-linux64/locales/sv_FEMININE.pak  
#13 3.320   inflating: /usr/bin/chrome-linux64/locales/sv_MASCULINE.pak  
#13 3.320   inflating: /usr/bin/chrome-linux64/locales/sv_NEUTER.pak  
#13 3.320   inflating: /usr/bin/chrome-linux64/locales/sw.pak  
#13 3.326   inflating: /usr/bin/chrome-linux64/locales/sw_FEMININE.pak  
#13 3.326   inflating: /usr/bin/chrome-linux64/locales/sw_MASCULINE.pak  
#13 3.326   inflating: /usr/bin/chrome-linux64/locales/sw_NEUTER.pak  
#13 3.326   inflating: /usr/bin/chrome-linux64/locales/ta.pak  
#13 3.339   inflating: /usr/bin/chrome-linux64/locales/ta_FEMININE.pak  
#13 3.339   inflating: /usr/bin/chrome-linux64/locales/ta_MASCULINE.pak  
#13 3.339   inflating: /usr/bin/chrome-linux64/locales/ta_NEUTER.pak  
#13 3.339   inflating: /usr/bin/chrome-linux64/locales/te.pak  
#13 3.350   inflating: /usr/bin/chrome-linux64/locales/te_FEMININE.pak  
#13 3.351   inflating: /usr/bin/chrome-linux64/locales/te_MASCULINE.pak  
#13 3.351   inflating: /usr/bin/chrome-linux64/locales/te_NEUTER.pak  
#13 3.351   inflating: /usr/bin/chrome-linux64/locales/th.pak  
#13 3.361   inflating: /usr/bin/chrome-linux64/locales/th_FEMININE.pak  
#13 3.361   inflating: /usr/bin/chrome-linux64/locales/th_MASCULINE.pak  
#13 3.361   inflating: /usr/bin/chrome-linux64/locales/th_NEUTER.pak  
#13 3.361   inflating: /usr/bin/chrome-linux64/locales/tr.pak  
#13 3.367   inflating: /usr/bin/chrome-linux64/locales/tr_FEMININE.pak  
#13 3.367   inflating: /usr/bin/chrome-linux64/locales/tr_MASCULINE.pak  
#13 3.367   inflating: /usr/bin/chrome-linux64/locales/tr_NEUTER.pak  
#13 3.367   inflating: /usr/bin/chrome-linux64/locales/uk.pak  
#13 3.376   inflating: /usr/bin/chrome-linux64/locales/uk_FEMININE.pak  
#13 3.376   inflating: /usr/bin/chrome-linux64/locales/uk_MASCULINE.pak  
#13 3.376   inflating: /usr/bin/chrome-linux64/locales/uk_NEUTER.pak  
#13 3.376   inflating: /usr/bin/chrome-linux64/locales/ur.pak  
#13 3.384   inflating: /usr/bin/chrome-linux64/locales/ur_FEMININE.pak  
#13 3.384   inflating: /usr/bin/chrome-linux64/locales/ur_MASCULINE.pak  
#13 3.384   inflating: /usr/bin/chrome-linux64/locales/ur_NEUTER.pak  
#13 3.384   inflating: /usr/bin/chrome-linux64/locales/vi.pak  
#13 3.391   inflating: /usr/bin/chrome-linux64/locales/vi_FEMININE.pak  
#13 3.391   inflating: /usr/bin/chrome-linux64/locales/vi_MASCULINE.pak  
#13 3.391   inflating: /usr/bin/chrome-linux64/locales/vi_NEUTER.pak  
#13 3.391   inflating: /usr/bin/chrome-linux64/locales/zh-CN.pak  
#13 3.396   inflating: /usr/bin/chrome-linux64/locales/zh-CN_FEMININE.pak  
#13 3.396   inflating: /usr/bin/chrome-linux64/locales/zh-CN_MASCULINE.pak  
#13 3.396   inflating: /usr/bin/chrome-linux64/locales/zh-CN_NEUTER.pak  
#13 3.396   inflating: /usr/bin/chrome-linux64/locales/zh-TW.pak  
#13 3.401   inflating: /usr/bin/chrome-linux64/locales/zh-TW_FEMININE.pak  
#13 3.401   inflating: /usr/bin/chrome-linux64/locales/zh-TW_MASCULINE.pak  
#13 3.401   inflating: /usr/bin/chrome-linux64/locales/zh-TW_NEUTER.pak  
#13 3.401  extracting: /usr/bin/chrome-linux64/product_logo_48.png  
#13 3.401   inflating: /usr/bin/chrome-linux64/resources.pak  
#13 3.506   inflating: /usr/bin/chrome-linux64/rpm.deps  
#13 3.506   inflating: /usr/bin/chrome-linux64/v8_context_snapshot.bin  
#13 3.512   inflating: /usr/bin/chrome-linux64/vk_swiftshader_icd.json  
#13 3.512    creating: /usr/bin/chrome-linux64/resources/
#13 3.512    creating: /usr/bin/chrome-linux64/resources/inspector_overlay/
#13 3.512   inflating: /usr/bin/chrome-linux64/resources/inspector_overlay/inspector_overlay_resources.grd  
#13 3.512   inflating: /usr/bin/chrome-linux64/resources/inspector_overlay/main.js  
#13 3.513    creating: /usr/bin/chrome-linux64/resources/accessibility/
#13 3.513    creating: /usr/bin/chrome-linux64/resources/accessibility/reading_mode_gdocs_helper/
#13 3.513   inflating: /usr/bin/chrome-linux64/resources/accessibility/reading_mode_gdocs_helper/content.js  
#13 3.513   inflating: /usr/bin/chrome-linux64/resources/accessibility/reading_mode_gdocs_helper/gdocs_script.js  
#13 3.513   inflating: /usr/bin/chrome-linux64/resources/accessibility/reading_mode_gdocs_helper_manifest.json  
#13 3.513    creating: /usr/bin/chrome-linux64/hyphen-data/
#13 3.513   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-tk.hyb  
#13 3.513   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-de-1901.hyb  
#13 3.515   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-de-1996.hyb  
#13 3.516   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-mul-ethi.hyb  
#13 3.516   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-es.hyb  
#13 3.517   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-hi.hyb  
#13 3.517   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-cu.hyb  
#13 3.518   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-as.hyb  
#13 3.518   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-ta.hyb  
#13 3.518   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-pa.hyb  
#13 3.518   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-el.hyb  
#13 3.518   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-te.hyb  
#13 3.518   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-und-ethi.hyb  
#13 3.518   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-de-ch-1901.hyb  
#13 3.520   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-bg.hyb  
#13 3.520   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-gu.hyb  
#13 3.520   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-et.hyb  
#13 3.520   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-cs.hyb  
#13 3.521   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-nl.hyb  
#13 3.522   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-ru.hyb  
#13 3.522   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-hy.hyb  
#13 3.522   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-uk.hyb  
#13 3.523   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-eu.hyb  
#13 3.523   inflating: /usr/bin/chrome-linux64/hyphen-data/manifest.json  
#13 3.523   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-ga.hyb  
#13 3.523   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-sk.hyb  
#13 3.524   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-mr.hyb  
#13 3.524   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-bn.hyb  
#13 3.524   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-nb.hyb  
#13 3.526   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-en-gb.hyb  
#13 3.527   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-or.hyb  
#13 3.527   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-cy.hyb  
#13 3.528   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-hr.hyb  
#13 3.528   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-fr.hyb  
#13 3.528   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-kn.hyb  
#13 3.528   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-mn-cyrl.hyb  
#13 3.528   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-lt.hyb  
#13 3.528   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-en-us.hyb  
#13 3.529   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-ml.hyb  
#13 3.529   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-pt.hyb  
#13 3.529   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-be.hyb  
#13 3.529   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-sl.hyb  
#13 3.529   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-lv.hyb  
#13 3.530   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-sv.hyb  
#13 3.531   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-hu.hyb  
#13 3.535   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-af.hyb  
#13 3.536   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-sq.hyb  
#13 3.536   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-ka.hyb  
#13 3.536   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-it.hyb  
#13 3.536   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-gl.hyb  
#13 3.536   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-da.hyb  
#13 3.537   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-nn.hyb  
#13 3.538   inflating: /usr/bin/chrome-linux64/hyphen-data/hyph-la.hyb  
#13 DONE 5.7s

#14 [ 8/10] COPY scripts/nodejs.sh /scripts/
#14 DONE 0.0s

---
.                                                  (151/151)

======== tests/rustdoc-gui/item-info-overflow.goml ========

[ERROR] item-info-overflow output:
Runtime.callFunctionOn timed out. Increase the 'protocolTimeout' setting in launch/connect calls for a higher timeout if needed.
stack: ProtocolError: Runtime.callFunctionOn timed out. Increase the 'protocolTimeout' setting in launch/connect calls for a higher timeout if needed.
    at <instance_members_initializer> (file:///checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-gui/node_modules/puppeteer-core/lib/puppeteer/common/CallbackRegistry.js:108:14)
    at new Callback (file:///checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-gui/node_modules/puppeteer-core/lib/puppeteer/common/CallbackRegistry.js:112:16)
    at CallbackRegistry.create (file:///checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-gui/node_modules/puppeteer-core/lib/puppeteer/common/CallbackRegistry.js:27:26)
    at Connection._rawSend (file:///checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-gui/node_modules/puppeteer-core/lib/puppeteer/cdp/Connection.js:125:26)
    at CdpCDPSession.send (file:///checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-gui/node_modules/puppeteer-core/lib/puppeteer/cdp/CdpSession.js:72:14)
    at #evaluate (file:///checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-gui/node_modules/puppeteer-core/lib/puppeteer/cdp/ExecutionContext.js:374:50)
    at ExecutionContext.evaluate (file:///checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-gui/node_modules/puppeteer-core/lib/puppeteer/cdp/ExecutionContext.js:288:36)
    at IsolatedWorld.evaluate (file:///checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-gui/node_modules/puppeteer-core/lib/puppeteer/cdp/IsolatedWorld.js:104:30)
    at CdpFrame.evaluate (file:///checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-gui/node_modules/puppeteer-core/lib/puppeteer/api/Frame.js:364:43)
    at CdpFrame.<anonymous> (file:///checkout/obj/build/x86_64-unknown-linux-gnu/test/rustdoc-gui/node_modules/puppeteer-core/lib/puppeteer/util/decorators.js:101:27)


======== tests/rustdoc-gui/search-result-display.goml ========

[WARNING] line 38: Delta is 0 for "x", maybe try to use `compare-elements-position` instead?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-LLVM Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues. A-meta Area: Issues & PRs about the rust-lang/rust repository itself 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants