Skip to content

Conversation

@StephanTLavavej
Copy link
Member

@StephanTLavavej StephanTLavavej commented Nov 6, 2025

Followup to #5815.

  • Runtime test coverage for ARM64EC.
    • Like the ARM64 runtime test coverage, I'm using 10 shards, which I've discovered is our current maximum (I am unsure how to increase it further).
  • Compile with -fuse-ld=link, link with /machine:arm64ec.
  • Add ARM64EC workarounds to P0811R3_midpoint_lerp.
  • Fix Dev09_158457_tr1_mem_fn_calling_conventions for ARM64EC.
  • Work around <stacktrace> bug.
  • Simplify P0881R7_stacktrace to a single thread.
    • I spent a lot of time being confused why the output was duplicated and sometimes interleaved. The internal implementation of <stacktrace> takes a lock, which is why this test was spinning up a second thread, but I think this isn't worth it. If we really wanted to stress the lock, it would have to look very different, and we haven't had issues with this (nor is the code rapidly churning). With @AlexGuteniev's blessing I'm changing this to be single-threaded.
  • Add /OPT:REF,NOICF to universal_prefix.lst, fixing P0896R4_P1614R2_comparisons.
    • After printf-instrumenting this test, I found that the issue was attempting to verify that &f1 and &f2 (the addresses of empty functions) were non-equal, and these functions were getting ICFed for ARM64EC:
      void f1() {}
      void f2() {}
      test_equality_comparable(&f1, &f2, strong_ordering::less); // This means "not equal"
    • This affects all tests (std/tr1/libcxx) for all architectures. I'm actually surprised we haven't encountered this before, but the linker docs clearly say "By default, /OPT:ICF is enabled by the linker unless /OPT:NOICF or /DEBUG is specified."
    • /OPT:REF,NOICF is what we use for debug builds of the product itself. There's no reason to emit test executables that are more bloated than necessary (REF should be very cheap in terms of CPU time, and possibly even saving I/O time). We never want ICF for test executables, as it impacts correctness in this corner case.
  • Simplify names to 'Build ARCH' and 'Test ARCH'.
    • This is a cosmetic improvement. All of the Build stages just build, and all of the Test stages actually execute tests (the fact that they also build is implied, although they don't build quite as thoroughly - no /analyze for the STL's own sources and no benchmarks).
  • Distinguish the Cross builds.
    • For clarity, since native is the default expectation. Will be helpful if we ever encounter errors that are specific to a host arch.
  • Add an early ARM64-native build.
    • This is partially to make toolset updates easier for me, but also to detect any critical problems with the ARM64 pool that would doom the large test runs. I've structured the dependencies carefully to avoid making the critical path even longer (i.e. the total latency of all checks).
  • Style: Explicitly mark Code Format as having no dependencies, even though it's first.
    • This was the only order-dependent one, and I think it's simpler to be explicit.

@StephanTLavavej StephanTLavavej requested a review from a team as a code owner November 6, 2025 17:07
@StephanTLavavej StephanTLavavej added infrastructure Related to repository automation test Related to test code ARM64EC I can't believe it's not x64! labels Nov 6, 2025
@github-project-automation github-project-automation bot moved this to Initial Review in STL Code Reviews Nov 6, 2025
@StephanTLavavej StephanTLavavej moved this from Initial Review to Final Review in STL Code Reviews Nov 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ARM64EC I can't believe it's not x64! infrastructure Related to repository automation test Related to test code

Projects

Status: Final Review

Development

Successfully merging this pull request may close these issues.

2 participants