Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ on:
env:
BUILD_TYPE: Release
MAKE_THREAD_NUM: 16
CMAKE_VERSION: '4.1.2'
CMAKE_VERSION: '4.3.2'

jobs:
build:
Expand All @@ -22,7 +22,7 @@ jobs:
# not yet verified -- keep a failing Linux leg from cancelling the others.
fail-fast: false
matrix:
os: ['windows-2022', 'macOS-latest', 'ubuntu-latest']
os: ['windows-latest', 'macOS-latest', 'ubuntu-latest']

runs-on: ${{ matrix.os }}

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/publish-conan-recipes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ concurrency:
env:
CONAN_REMOTE_NAME: explosion
CONAN_REMOTE_URL: https://conan.kindem.online/artifactory/api/conan/conan
CMAKE_VERSION: '4.1.2'
CMAKE_VERSION: '4.3.2'

jobs:
publish:
Expand All @@ -29,7 +29,7 @@ jobs:
# cppstd is pinned per platform to match the binaries already on the remote; consumers on a
# higher standard (the engine uses C++20) still match via Conan's default compatibility plugin.
include:
- os: windows-2022
- os: windows-latest
cppstd: '17'
- os: macOS-latest
cppstd: gnu17
Expand Down
5 changes: 5 additions & 0 deletions ThirdParty/ConanRecipes/dxc/conandata.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,8 @@ platforms:
sources:
"1.8.2505.1-exp":
commit: "b106a961d09221b3c5bdb37be45b679257da08b8"
patches:
"1.8.2505.1-exp":
- patch_file: patches/0000-fix-small-vector-msvc-cxx20.patch
patch_description: fix SmallVector comparison recursion with C++20 on MSVC
patch_type: backport
5 changes: 4 additions & 1 deletion ThirdParty/ConanRecipes/dxc/conanfile.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from conan import ConanFile
from conan.tools.build import check_min_cppstd, can_run
from conan.tools.cmake import cmake_layout, CMakeToolchain, CMakeDeps, CMake
from conan.tools.files import apply_conandata_patches, copy
from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches
from conan.tools.scm import Git
import os

Expand All @@ -19,6 +19,9 @@ class DXCConan(ConanFile):
options = {}
default_options = {}

def export_sources(self):
export_conandata_patches(self)

def layout(self):
cmake_layout(self, src_folder="src")

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
From d3704262ce167a171d831856f8f561fc52553b61 Mon Sep 17 00:00:00 2001
From: Steven Perron <stevenperron@google.com>
Date: Tue, 16 Dec 2025 20:02:32 +0000
Subject: [PATCH] spirv-tools: Fix infinite recursion in
SmallVector::operator== on MSVC (#6470)

On MSVC, __cplusplus is not updated by default to reflect the C++
standard version being used; it stays at 199711L unless the
/Zc:__cplusplus compiler option is used. Instead, _MSVC_LANG is defined
to the correct version.

In C++20, the compiler generates rewritten candidates for operator==
(e.g., reversing arguments). If the explicit operator==(std::vector,
SmallVector) is present, it can lead to infinite recursion when the
compiler attempts to use it to satisfy a comparison, effectively calling
itself.

This change updates the preprocessor check to use _MSVC_LANG when
defined, ensuring that the legacy operator== is properly disabled for
C++20 and later on MSVC, preventing the recursion.

Fixes #6468
---
external/SPIRV-Tools/source/util/small_vector.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/external/SPIRV-Tools/source/util/small_vector.h b/external/SPIRV-Tools/source/util/small_vector.h
index b2ce8f4b6..8bbc8c1f5 100644
--- a/external/SPIRV-Tools/source/util/small_vector.h
+++ b/external/SPIRV-Tools/source/util/small_vector.h
@@ -186,3 +186,4 @@ class SmallVector {
// Avoid infinite recursion from rewritten operators in C++20
-#if __cplusplus <= 201703L
+#if (defined(_MSVC_LANG) && _MSVC_LANG <= 201703L) || \
+ (!defined(_MSVC_LANG) && __cplusplus <= 201703L)
friend bool operator==(const std::vector<T>& lhs, const SmallVector& rhs) {
Loading