TimeValue.h fails to compile as C++26 with Clang 22
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 1/5
- Tempo stimato
- Meno di un'ora
- Idoneità per principianti
- 92/100
Direzione di ricerca
Iniziare da include/llvm/Support/TimeValue.h, in particolare dal costruttore llvm::sys::TimeValue(double) e dall’espressione identificata alle righe 110-111. Riprodurre il problema con il comando C++26 clang++ fornito e verificare quindi che l’header e l’esempio di TimeValue fornito vengano compilati correttamente.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
Building a C++26 consumer of DXC headers with Clang 22 fails in
include/llvm/Support/TimeValue.h.
The llvm::sys::TimeValue(double) constructor multiplies a double by the
unscoped TimeConversions enumerator NANOSECONDS_PER_SECOND:
nanos_ = static_cast<NanoSecondsType>(
(new_time - static_cast<double>(integer_part)) *
NANOSECONDS_PER_SECOND);
Arithmetic between a floating-point type and an enumeration was deprecated in
C++20 and removed from C++26 by P2864R2:
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2864r2.pdf
The same code builds in earlier C++ language modes. Adding an explicit
conversion for the enumerator resolves the C++26 failure without changing the
calculation.
The affected expression is also present on the current main branch:
Steps to Reproduce
-
Check out DXC tag
upstream/v1.9.2607, commit
0d3ee6b551b8fa768fbf825300ebab81047ef6a8. -
Configure the normal generated DXC include directory.
-
Create a translation unit that includes the affected header:
#include "llvm/Support/TimeValue.h"
int main() {
llvm::sys::TimeValue value(0.5);
return value.nanoseconds() == 0;
}
- Compile it with Clang 22 in C++26 mode, supplying the DXC source and
generated include directories:
clang++ \
-std=c++26 \
-stdlib=libc++ \
-I/path/to/DirectXShaderCompiler/include \
-I/path/to/dxc-build/include \
-fsyntax-only \
repro.cpp
The problem was originally encountered while compiling an application that
includes llvm/Support/FileSystem.h, which transitively includes
TimeValue.h.
Expected Behavior
DXC headers should compile successfully when included by a C++26 translation
unit.
Actual Behavior
Clang 22 reports:
include/llvm/Support/TimeValue.h:111:51: error: invalid arithmetic between
floating-point type 'double' and enumeration type
'llvm::sys::TimeValue::TimeConversions'
static_cast<double>(integer_part)) * NANOSECONDS_PER_SECOND );
^~~~~~~~~~~~~~~~~~~~~~
Proposed Fix
Explicitly convert the enumerator to double:
nanos_ = static_cast<NanoSecondsType>( (new_time -
- static_cast<double>(integer_part)) * NANOSECONDS_PER_SECOND );
+ static_cast<double>(integer_part)) *
+ static_cast<double>(NANOSECONDS_PER_SECOND) );
I verified that this change resolves the C++26 build failure.
Environment
-
DXC source version:
upstream/v1.9.2607 -
DXC commit:
0d3ee6b551b8fa768fbf825300ebab81047ef6a8 -
Compiler:
Ubuntu clang version 22.1.8 (++20260714014902+ca7933e47d3a-1~exp1~20260714135019.80) Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/lib/llvm-22/bin -
Standard library: libc++ 22
-
C++ language mode: C++26
-
Build type: Release
-
Container operating system: Ubuntu 24.04
-
Host operating system: Linux
- Lingua principale
- C++
- Stelle
- 3.7k
- Fork
- 914
- Merge medio
- 2g 6h
- PR unite (30g)
- 23
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di microsoft/DirectXShaderCompiler
-
bug needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
microsoft/DirectXShaderCompiler#9087 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
microsoft/DirectXShaderCompiler#9086 ·
I maintainer di solito rispondono entro 1 giorno
-
bug needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
microsoft/DirectXShaderCompiler#9015 ·
I maintainer di solito rispondono entro 1 giorno
-
bug needs-triage spirv
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
microsoft/DirectXShaderCompiler#8831 ·
I maintainer di solito rispondono entro 1 giorno
-
bug needs-triage spirv
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
microsoft/DirectXShaderCompiler#8829 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di microsoft/DirectXShaderCompiler
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
eclipse-score/lifecycle#929 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
colbymchenry/codegraph#3223 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
firefox-devtools/profiler#6436 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
The `ufw` decoder requires the kernel's monotonic timestamp, so UFW lines read from journald decode without any fieldForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno