From 13bddebc79294c8526c5b891e654dfd2b557b403 Mon Sep 17 00:00:00 2001 From: Gergely Meszaros Date: Fri, 31 Jan 2025 06:38:32 -0800 Subject: [PATCH 1/6] [SYCL][Sema] Only imply float size conversion warnings in SYCL Before this change `-Wimplicit-float-conversion` (part of `-Wconversion`) enabled `-Wimplicit-float-size-conversion` for all language modes. This is problematic because it causes it makes DPC++ emit warnings where upstream clang does not, even when used as a plain C++ compiler. Projects that enable `-Werror` don't expect these (questionable) floating point size warnings when they enable `-Wconversion`, and as such cannot be compiled with the DPC++ compiler. Change `-Wimplicit-float-conversion` to imply `-Wsycl-implicit-float-size-conversion` instead, which is only emitted in SYCL language mode. This preserves existing behaviour for SYCL users. Explicitly passing `-Wimplicit-float-size-conversion` still applies to all language modes. This change only affects users who enable `-Wimplicit-float-conversion` but do not enable `-Wimplicit-float-size-conversion` explicitly and do not compile in SYCL language mode. These users would need to enable the option explicitly to keep the existing behaviour. --- clang/include/clang/Basic/DiagnosticGroups.td | 6 +++-- .../clang/Basic/DiagnosticSemaKinds.td | 3 +++ clang/lib/Sema/SemaChecking.cpp | 13 ++++++--- clang/test/Sema/conversion.c | 2 +- clang/test/Sema/ext_vector_casts.c | 2 +- .../test/Sema/precision-and-size-conversion.c | 2 +- ...it-float-size-conversion-language-mode.cpp | 27 +++++++++++++++++++ 7 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 clang/test/SemaSYCL/implicit-float-size-conversion-language-mode.cpp diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td index e5fa9465f638a..94ae39d14039e 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -115,11 +115,13 @@ def ImplicitIntFloatConversion : DiagGroup<"implicit-int-float-conversion", [ImplicitConstIntFloatConversion]>; def ObjCSignedCharBoolImplicitFloatConversion : DiagGroup<"objc-signed-char-bool-implicit-float-conversion">; +def SyclImplicitFloatSizeConversion: + DiagGroup<"sycl-implicit-float-size-conversion">; def ImplicitFloatSizeConversion : - DiagGroup<"implicit-float-size-conversion">; + DiagGroup<"implicit-float-size-conversion", [SyclImplicitFloatSizeConversion]>; def ImplicitFloatConversion : DiagGroup<"implicit-float-conversion", [ImplicitIntFloatConversion, - ObjCSignedCharBoolImplicitFloatConversion, ImplicitFloatSizeConversion]>; + ObjCSignedCharBoolImplicitFloatConversion, SyclImplicitFloatSizeConversion]>; def ImplicitFixedPointConversion : DiagGroup<"implicit-fixed-point-conversion">; def FloatOverflowConversion : DiagGroup<"float-overflow-conversion">; diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index be7e5da308438..51ab49e256b37 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -134,6 +134,9 @@ def warn_double_const_requires_fp64 : Warning< def warn_imp_float_size_conversion : Warning< "implicit conversion between floating point types of different sizes">, InGroup, DefaultIgnore; +def warn_sycl_imp_float_size_conversion : Warning< + "implicit conversion between floating point types of different sizes">, + InGroup, DefaultIgnore; def err_half_const_requires_fp16 : Error< "half precision constant requires cl_khr_fp16">; diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index de74db73b29e9..6ff71802e42a6 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -11626,10 +11626,13 @@ void Sema::CheckImplicitConversion(Expr *E, QualType T, SourceLocation CC, Context.getFloatTypeSemantics(QualType(TargetBT, 0)), Context.getFloatTypeSemantics(QualType(SourceBT, 0)))) { if (getLangOpts().SYCLIsDevice) - SYCL().DiagIfDeviceCode(CC, diag::warn_imp_float_size_conversion); + SYCL().DiagIfDeviceCode(CC, diag::warn_sycl_imp_float_size_conversion); else DiagnoseImpCast(*this, E, T, CC, - diag::warn_imp_float_size_conversion); + getLangOpts().isSYCL() + ? diag::warn_sycl_imp_float_size_conversion + : diag::warn_imp_float_size_conversion); + return; } } @@ -11642,10 +11645,12 @@ void Sema::CheckImplicitConversion(Expr *E, QualType T, SourceLocation CC, // warning. if (Diags.isIgnored(diag::warn_impcast_float_precision, CC)) { if (getLangOpts().SYCLIsDevice) - SYCL().DiagIfDeviceCode(CC, diag::warn_imp_float_size_conversion); + SYCL().DiagIfDeviceCode(CC, diag::warn_sycl_imp_float_size_conversion); else DiagnoseImpCast(*this, E, T, CC, - diag::warn_imp_float_size_conversion); + getLangOpts().isSYCL() + ? diag::warn_sycl_imp_float_size_conversion + : diag::warn_imp_float_size_conversion); } DiagnoseImpCast(*this, E, T, CC, diag::warn_impcast_float_precision); } diff --git a/clang/test/Sema/conversion.c b/clang/test/Sema/conversion.c index 088c3280c1a10..3036a7604970e 100644 --- a/clang/test/Sema/conversion.c +++ b/clang/test/Sema/conversion.c @@ -443,4 +443,4 @@ float double2float_test4(double a, float b) { b -= a; // expected-warning {{implicit conversion when assigning computation result loses floating-point precision: 'double' to 'float'}} return b; } -float f = 1.0 / 2.0; // expected-warning {{implicit conversion between floating point types of different sizes}} +float f = 1.0 / 2.0; diff --git a/clang/test/Sema/ext_vector_casts.c b/clang/test/Sema/ext_vector_casts.c index daa7df8ca5396..8bf2737e0bfab 100644 --- a/clang/test/Sema/ext_vector_casts.c +++ b/clang/test/Sema/ext_vector_casts.c @@ -119,7 +119,7 @@ static void splats(int i, long l, __uint128_t t, float f, double d) { vf = 1 + vf; vf = l + vf; // expected-warning {{implicit conversion from 'long' to 'float2' (vector of 2 'float' values) may lose precision}} - vf = 2.0 + vf; // expected-warning {{implicit conversion between floating point types of different sizes}} + vf = 2.0 + vf; vf = d + vf; // expected-warning {{implicit conversion loses floating-point precision}} vf = vf + 0xffffffff; // expected-warning {{implicit conversion from 'unsigned int' to 'float2' (vector of 2 'float' values) changes value from 4294967295 to 4294967296}} vf = vf + 2.1; // expected-warning {{implicit conversion loses floating-point precision}} diff --git a/clang/test/Sema/precision-and-size-conversion.c b/clang/test/Sema/precision-and-size-conversion.c index 7c251bc4b4bc8..0081565ef0d95 100644 --- a/clang/test/Sema/precision-and-size-conversion.c +++ b/clang/test/Sema/precision-and-size-conversion.c @@ -7,7 +7,7 @@ // RUN: %clang_cc1 -fsyntax-only -verify=precision-increase -Wdouble-promotion \ // RUN: -triple x86_64-apple-darwin %s -// RUN: %clang_cc1 -fsyntax-only -verify=precision-loss,size-change -Wimplicit-float-conversion \ +// RUN: %clang_cc1 -fsyntax-only -verify=precision-loss,size-change -fsycl-is-host -Wimplicit-float-conversion \ // RUN: -triple x86_64-apple-darwin %s // RUN: %clang_cc1 -fsyntax-only -verify \ diff --git a/clang/test/SemaSYCL/implicit-float-size-conversion-language-mode.cpp b/clang/test/SemaSYCL/implicit-float-size-conversion-language-mode.cpp new file mode 100644 index 0000000000000..21f6d82ed8926 --- /dev/null +++ b/clang/test/SemaSYCL/implicit-float-size-conversion-language-mode.cpp @@ -0,0 +1,27 @@ +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify=size \ +// RUN: -Wimplicit-float-size-conversion %s +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify=size \ +// RUN: -fsycl-is-host -Wimplicit-float-conversion %s +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify=size \ +// RUN: -fsycl-is-host -Wsycl-implicit-float-size-conversion %s +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify=size \ +// RUN: -Wimplicit-float-size-conversion -Wno-implicit-float-conversion %s + +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify \ +// RUN: -Wimplicit-float-conversion %s +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify \ +// RUN: -Wsycl-implicit-float-size-conversion %s +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify \ +// RUN: -fsycl-is-host -Wimplicit-float-conversion -Wno-implicit-float-size-conversion %s +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify \ +// RUN: -fsycl-is-host -Wimplicit-float-conversion -Wno-sycl-implicit-float-size-conversion %s +// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify \ +// RUN: -fsycl-is-host -Wimplicit-float-size-conversion -Wno-implicit-float-conversion %s + +// This test checks that -Wimplicit-float-conversion and -Wimplicit-float-size-conversion behave +// correctly: +// -W(no-)implicit-float-conversion implies -W(no-)implicit-float-size-conversion for SYCL only, +// but -W(no-)implicit-float-size-conversion can be used outside SYCL too + +// expected-no-diagnostics +float s = 1.0; // size-warning {{implicit conversion between floating point types of different sizes}} From d667a4c7e998eb6133714f60daa53f0c055efb02 Mon Sep 17 00:00:00 2001 From: Gergely Meszaros Date: Fri, 31 Jan 2025 07:12:42 -0800 Subject: [PATCH 2/6] Apply clang-format --- clang/lib/Sema/SemaChecking.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 6ff71802e42a6..9a10965979061 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -11626,7 +11626,8 @@ void Sema::CheckImplicitConversion(Expr *E, QualType T, SourceLocation CC, Context.getFloatTypeSemantics(QualType(TargetBT, 0)), Context.getFloatTypeSemantics(QualType(SourceBT, 0)))) { if (getLangOpts().SYCLIsDevice) - SYCL().DiagIfDeviceCode(CC, diag::warn_sycl_imp_float_size_conversion); + SYCL().DiagIfDeviceCode( + CC, diag::warn_sycl_imp_float_size_conversion); else DiagnoseImpCast(*this, E, T, CC, getLangOpts().isSYCL() @@ -11645,7 +11646,8 @@ void Sema::CheckImplicitConversion(Expr *E, QualType T, SourceLocation CC, // warning. if (Diags.isIgnored(diag::warn_impcast_float_precision, CC)) { if (getLangOpts().SYCLIsDevice) - SYCL().DiagIfDeviceCode(CC, diag::warn_sycl_imp_float_size_conversion); + SYCL().DiagIfDeviceCode(CC, + diag::warn_sycl_imp_float_size_conversion); else DiagnoseImpCast(*this, E, T, CC, getLangOpts().isSYCL() From e518e78ef5d4f776c43ea8e3a0399878427ab533 Mon Sep 17 00:00:00 2001 From: Gergely Meszaros Date: Wed, 5 Feb 2025 03:49:15 -0800 Subject: [PATCH 3/6] [SYCL][Sema][Test][NFC] Move precision-and-size-conversion.c to SemaSYCL --- clang/test/{Sema => SemaSYCL}/precision-and-size-conversion.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename clang/test/{Sema => SemaSYCL}/precision-and-size-conversion.c (100%) diff --git a/clang/test/Sema/precision-and-size-conversion.c b/clang/test/SemaSYCL/precision-and-size-conversion.c similarity index 100% rename from clang/test/Sema/precision-and-size-conversion.c rename to clang/test/SemaSYCL/precision-and-size-conversion.c From 45fcaed3613d67d7dc6cab26f28d08007f88e092 Mon Sep 17 00:00:00 2001 From: Gergely Meszaros Date: Wed, 5 Feb 2025 03:55:37 -0800 Subject: [PATCH 4/6] Apply code review suggestions - Only emit `-Wimplicit-float-size-conversion` warnings in SYCL language mode - Remove `-Wsycl-implicit-float-size-conversion` - Revert changes to llvm community tests - Update tests --- clang/include/clang/Basic/DiagnosticGroups.td | 7 ++-- .../clang/Basic/DiagnosticSemaKinds.td | 3 -- clang/lib/Sema/SemaChecking.cpp | 32 +++++++++---------- clang/test/Sema/conversion.c | 1 - ...it-float-size-conversion-language-mode.cpp | 27 ---------------- .../SemaSYCL/precision-and-size-conversion.c | 14 +++++--- 6 files changed, 27 insertions(+), 57 deletions(-) delete mode 100644 clang/test/SemaSYCL/implicit-float-size-conversion-language-mode.cpp diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td index 94ae39d14039e..0fc2b3b5c3433 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -115,13 +115,10 @@ def ImplicitIntFloatConversion : DiagGroup<"implicit-int-float-conversion", [ImplicitConstIntFloatConversion]>; def ObjCSignedCharBoolImplicitFloatConversion : DiagGroup<"objc-signed-char-bool-implicit-float-conversion">; -def SyclImplicitFloatSizeConversion: - DiagGroup<"sycl-implicit-float-size-conversion">; -def ImplicitFloatSizeConversion : - DiagGroup<"implicit-float-size-conversion", [SyclImplicitFloatSizeConversion]>; +def ImplicitFloatSizeConversion : DiagGroup<"implicit-float-size-conversion">; def ImplicitFloatConversion : DiagGroup<"implicit-float-conversion", [ImplicitIntFloatConversion, - ObjCSignedCharBoolImplicitFloatConversion, SyclImplicitFloatSizeConversion]>; + ObjCSignedCharBoolImplicitFloatConversion, ImplicitFloatSizeConversion]>; def ImplicitFixedPointConversion : DiagGroup<"implicit-fixed-point-conversion">; def FloatOverflowConversion : DiagGroup<"float-overflow-conversion">; diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index 51ab49e256b37..be7e5da308438 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -134,9 +134,6 @@ def warn_double_const_requires_fp64 : Warning< def warn_imp_float_size_conversion : Warning< "implicit conversion between floating point types of different sizes">, InGroup, DefaultIgnore; -def warn_sycl_imp_float_size_conversion : Warning< - "implicit conversion between floating point types of different sizes">, - InGroup, DefaultIgnore; def err_half_const_requires_fp16 : Error< "half precision constant requires cl_khr_fp16">; diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 9a10965979061..34ec15e6a36bf 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -11625,15 +11625,14 @@ void Sema::CheckImplicitConversion(Expr *E, QualType T, SourceLocation CC, result.Val, Context.getFloatTypeSemantics(QualType(TargetBT, 0)), Context.getFloatTypeSemantics(QualType(SourceBT, 0)))) { - if (getLangOpts().SYCLIsDevice) - SYCL().DiagIfDeviceCode( - CC, diag::warn_sycl_imp_float_size_conversion); - else - DiagnoseImpCast(*this, E, T, CC, - getLangOpts().isSYCL() - ? diag::warn_sycl_imp_float_size_conversion - : diag::warn_imp_float_size_conversion); - + if (getLangOpts().isSYCL()) { + if (getLangOpts().SYCLIsDevice) + SYCL().DiagIfDeviceCode(CC, + diag::warn_imp_float_size_conversion); + else + DiagnoseImpCast(*this, E, T, CC, + diag::warn_imp_float_size_conversion); + } return; } } @@ -11645,14 +11644,13 @@ void Sema::CheckImplicitConversion(Expr *E, QualType T, SourceLocation CC, // -Wimplicit-float-conversion is not, make sure we emit at least a size // warning. if (Diags.isIgnored(diag::warn_impcast_float_precision, CC)) { - if (getLangOpts().SYCLIsDevice) - SYCL().DiagIfDeviceCode(CC, - diag::warn_sycl_imp_float_size_conversion); - else - DiagnoseImpCast(*this, E, T, CC, - getLangOpts().isSYCL() - ? diag::warn_sycl_imp_float_size_conversion - : diag::warn_imp_float_size_conversion); + if (getLangOpts().isSYCL()) { + if (getLangOpts().SYCLIsDevice) + SYCL().DiagIfDeviceCode(CC, diag::warn_imp_float_size_conversion); + else + DiagnoseImpCast(*this, E, T, CC, + diag::warn_imp_float_size_conversion); + } } DiagnoseImpCast(*this, E, T, CC, diag::warn_impcast_float_precision); } diff --git a/clang/test/Sema/conversion.c b/clang/test/Sema/conversion.c index 3036a7604970e..bac5289aa8362 100644 --- a/clang/test/Sema/conversion.c +++ b/clang/test/Sema/conversion.c @@ -443,4 +443,3 @@ float double2float_test4(double a, float b) { b -= a; // expected-warning {{implicit conversion when assigning computation result loses floating-point precision: 'double' to 'float'}} return b; } -float f = 1.0 / 2.0; diff --git a/clang/test/SemaSYCL/implicit-float-size-conversion-language-mode.cpp b/clang/test/SemaSYCL/implicit-float-size-conversion-language-mode.cpp deleted file mode 100644 index 21f6d82ed8926..0000000000000 --- a/clang/test/SemaSYCL/implicit-float-size-conversion-language-mode.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify=size \ -// RUN: -Wimplicit-float-size-conversion %s -// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify=size \ -// RUN: -fsycl-is-host -Wimplicit-float-conversion %s -// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify=size \ -// RUN: -fsycl-is-host -Wsycl-implicit-float-size-conversion %s -// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify=size \ -// RUN: -Wimplicit-float-size-conversion -Wno-implicit-float-conversion %s - -// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify \ -// RUN: -Wimplicit-float-conversion %s -// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify \ -// RUN: -Wsycl-implicit-float-size-conversion %s -// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify \ -// RUN: -fsycl-is-host -Wimplicit-float-conversion -Wno-implicit-float-size-conversion %s -// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify \ -// RUN: -fsycl-is-host -Wimplicit-float-conversion -Wno-sycl-implicit-float-size-conversion %s -// RUN: %clang_cc1 -fsyntax-only -triple x86_64-pc-windows-msvc -verify \ -// RUN: -fsycl-is-host -Wimplicit-float-size-conversion -Wno-implicit-float-conversion %s - -// This test checks that -Wimplicit-float-conversion and -Wimplicit-float-size-conversion behave -// correctly: -// -W(no-)implicit-float-conversion implies -W(no-)implicit-float-size-conversion for SYCL only, -// but -W(no-)implicit-float-size-conversion can be used outside SYCL too - -// expected-no-diagnostics -float s = 1.0; // size-warning {{implicit conversion between floating point types of different sizes}} diff --git a/clang/test/SemaSYCL/precision-and-size-conversion.c b/clang/test/SemaSYCL/precision-and-size-conversion.c index 0081565ef0d95..340d953a45aa6 100644 --- a/clang/test/SemaSYCL/precision-and-size-conversion.c +++ b/clang/test/SemaSYCL/precision-and-size-conversion.c @@ -1,16 +1,22 @@ -// RUN: %clang_cc1 -fsyntax-only -verify=precision-loss,precision-gain,size-change -Wimplicit-float-conversion -Wdouble-promotion -Wimplicit-float-size-conversion \ +// RUN: %clang_cc1 -fsyntax-only -verify=precision-loss,precision-gain,size-change -fsycl-is-host -Wimplicit-float-conversion -Wdouble-promotion -Wimplicit-float-size-conversion \ // RUN: -triple x86_64-apple-darwin %s -// RUN: %clang_cc1 -fsyntax-only -verify=size-only,precision-gain,size-change -Wdouble-promotion -Wimplicit-float-size-conversion \ +// RUN: %clang_cc1 -fsyntax-only -verify=size-only,precision-gain,size-change -fsycl-is-host -Wdouble-promotion -Wimplicit-float-size-conversion \ // RUN: -triple x86_64-apple-darwin %s -// RUN: %clang_cc1 -fsyntax-only -verify=precision-increase -Wdouble-promotion \ +// RUN: %clang_cc1 -fsyntax-only -verify=precision-increase -fsycl-is-host -Wdouble-promotion \ // RUN: -triple x86_64-apple-darwin %s // RUN: %clang_cc1 -fsyntax-only -verify=precision-loss,size-change -fsycl-is-host -Wimplicit-float-conversion \ // RUN: -triple x86_64-apple-darwin %s -// RUN: %clang_cc1 -fsyntax-only -verify \ +// RUN: %clang_cc1 -fsyntax-only -verify=precision-loss -Wimplicit-float-conversion \ +// RUN: -triple x86_64-apple-darwin %s + +// RUN: %clang_cc1 -fsyntax-only -verify -fsycl-is-host \ +// RUN: -triple x86_64-apple-darwin %s + +// RUN: %clang_cc1 -fsyntax-only -verify -Wimplicit-float-size-conversion \ // RUN: -triple x86_64-apple-darwin %s // This test checks that floating point conversion warnings are emitted correctly when used in conjunction. From e881d631377f951d529f55844c695bd630141d36 Mon Sep 17 00:00:00 2001 From: Gergely Meszaros Date: Wed, 12 Feb 2025 03:27:22 -0800 Subject: [PATCH 5/6] [NFC] Drop -Wno-implicit-float-size-conversion from Non-SYCL tests --- clang/test/SemaHLSL/Types/Arithmetic/literal_suffixes.hlsl | 2 +- .../SemaHLSL/Types/Arithmetic/literal_suffixes_no_16bit.hlsl | 2 +- clang/test/SemaHLSL/standard_conversion_sequences.hlsl | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/test/SemaHLSL/Types/Arithmetic/literal_suffixes.hlsl b/clang/test/SemaHLSL/Types/Arithmetic/literal_suffixes.hlsl index d0f846c72eb19..91324e57ce69e 100644 --- a/clang/test/SemaHLSL/Types/Arithmetic/literal_suffixes.hlsl +++ b/clang/test/SemaHLSL/Types/Arithmetic/literal_suffixes.hlsl @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.2-library -fnative-half-type -Wconversion -Wno-implicit-float-size-conversion -verify %s +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.2-library -fnative-half-type -Wconversion -verify %s void literal_assignments() { half h; diff --git a/clang/test/SemaHLSL/Types/Arithmetic/literal_suffixes_no_16bit.hlsl b/clang/test/SemaHLSL/Types/Arithmetic/literal_suffixes_no_16bit.hlsl index cb6c60687a8f9..f7e3e6ba577d6 100644 --- a/clang/test/SemaHLSL/Types/Arithmetic/literal_suffixes_no_16bit.hlsl +++ b/clang/test/SemaHLSL/Types/Arithmetic/literal_suffixes_no_16bit.hlsl @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.2-library -Wconversion -Wno-implicit-float-size-conversion -verify %s +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.2-library -Wconversion -verify %s void literal_assignments() { half h; diff --git a/clang/test/SemaHLSL/standard_conversion_sequences.hlsl b/clang/test/SemaHLSL/standard_conversion_sequences.hlsl index eb17c8da1d965..59779708d9137 100644 --- a/clang/test/SemaHLSL/standard_conversion_sequences.hlsl +++ b/clang/test/SemaHLSL/standard_conversion_sequences.hlsl @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -Wconversion -Wno-implicit-float-size-conversion -verify -o - %s -// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -Wno-conversion -Wno-implicit-float-size-conversion -DNO_ERR -ast-dump %s | FileCheck %s +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -Wconversion -verify -o - %s +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -Wno-conversion -DNO_ERR -ast-dump %s | FileCheck %s void test() { From d0f9e741f5971580b84c34fe79d701a05e5a4669 Mon Sep 17 00:00:00 2001 From: Gergely Meszaros Date: Wed, 12 Feb 2025 03:34:55 -0800 Subject: [PATCH 6/6] Rename -Wimplicit-float-size-conversion to -Wsycl-implicit-float-size-conversion --- clang/include/clang/Basic/DiagnosticGroups.td | 4 ++-- clang/include/clang/Basic/DiagnosticSemaKinds.td | 4 ++-- clang/lib/Sema/SemaChecking.cpp | 13 +++++++------ .../SemaSYCL/implicit-float-size-conversion.cpp | 4 ++-- clang/test/SemaSYCL/precision-and-size-conversion.c | 6 +++--- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td index 0fc2b3b5c3433..1a956344db88f 100644 --- a/clang/include/clang/Basic/DiagnosticGroups.td +++ b/clang/include/clang/Basic/DiagnosticGroups.td @@ -115,10 +115,10 @@ def ImplicitIntFloatConversion : DiagGroup<"implicit-int-float-conversion", [ImplicitConstIntFloatConversion]>; def ObjCSignedCharBoolImplicitFloatConversion : DiagGroup<"objc-signed-char-bool-implicit-float-conversion">; -def ImplicitFloatSizeConversion : DiagGroup<"implicit-float-size-conversion">; +def SyclImplicitFloatSizeConversion : DiagGroup<"sycl-implicit-float-size-conversion">; def ImplicitFloatConversion : DiagGroup<"implicit-float-conversion", [ImplicitIntFloatConversion, - ObjCSignedCharBoolImplicitFloatConversion, ImplicitFloatSizeConversion]>; + ObjCSignedCharBoolImplicitFloatConversion, SyclImplicitFloatSizeConversion]>; def ImplicitFixedPointConversion : DiagGroup<"implicit-fixed-point-conversion">; def FloatOverflowConversion : DiagGroup<"float-overflow-conversion">; diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td index be7e5da308438..27d5a7db6bdb9 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -131,9 +131,9 @@ def warn_float_compare_literal : Warning< def warn_double_const_requires_fp64 : Warning< "double precision constant requires %select{cl_khr_fp64|cl_khr_fp64 and __opencl_c_fp64}0, " "casting to single precision">; -def warn_imp_float_size_conversion : Warning< +def warn_sycl_imp_float_size_conversion : Warning< "implicit conversion between floating point types of different sizes">, - InGroup, DefaultIgnore; + InGroup, DefaultIgnore; def err_half_const_requires_fp16 : Error< "half precision constant requires cl_khr_fp16">; diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 34ec15e6a36bf..f3d331b247aa9 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -11627,11 +11627,11 @@ void Sema::CheckImplicitConversion(Expr *E, QualType T, SourceLocation CC, Context.getFloatTypeSemantics(QualType(SourceBT, 0)))) { if (getLangOpts().isSYCL()) { if (getLangOpts().SYCLIsDevice) - SYCL().DiagIfDeviceCode(CC, - diag::warn_imp_float_size_conversion); + SYCL().DiagIfDeviceCode( + CC, diag::warn_sycl_imp_float_size_conversion); else DiagnoseImpCast(*this, E, T, CC, - diag::warn_imp_float_size_conversion); + diag::warn_sycl_imp_float_size_conversion); } return; } @@ -11640,16 +11640,17 @@ void Sema::CheckImplicitConversion(Expr *E, QualType T, SourceLocation CC, if (SourceMgr.isInSystemMacro(CC)) return; // If there is a precision conversion between floating point types when - // -Wimplicit-float-size-conversion is passed but + // -Wsycl-implicit-float-size-conversion is passed but // -Wimplicit-float-conversion is not, make sure we emit at least a size // warning. if (Diags.isIgnored(diag::warn_impcast_float_precision, CC)) { if (getLangOpts().isSYCL()) { if (getLangOpts().SYCLIsDevice) - SYCL().DiagIfDeviceCode(CC, diag::warn_imp_float_size_conversion); + SYCL().DiagIfDeviceCode( + CC, diag::warn_sycl_imp_float_size_conversion); else DiagnoseImpCast(*this, E, T, CC, - diag::warn_imp_float_size_conversion); + diag::warn_sycl_imp_float_size_conversion); } } DiagnoseImpCast(*this, E, T, CC, diag::warn_impcast_float_precision); diff --git a/clang/test/SemaSYCL/implicit-float-size-conversion.cpp b/clang/test/SemaSYCL/implicit-float-size-conversion.cpp index 77d878c59ade1..e3d23cdf556b4 100644 --- a/clang/test/SemaSYCL/implicit-float-size-conversion.cpp +++ b/clang/test/SemaSYCL/implicit-float-size-conversion.cpp @@ -1,6 +1,6 @@ -// RUN: %clang_cc1 -fsycl-is-device -triple spir64 -internal-isystem %S/Inputs -fsyntax-only -sycl-std=2020 -Wimplicit-float-size-conversion -verify=size-only,always-size %s +// RUN: %clang_cc1 -fsycl-is-device -triple spir64 -internal-isystem %S/Inputs -fsyntax-only -sycl-std=2020 -Wsycl-implicit-float-size-conversion -verify=size-only,always-size %s // RUN: %clang_cc1 -fsycl-is-device -triple spir64 -internal-isystem %S/Inputs -fsyntax-only -sycl-std=2020 -Wimplicit-float-conversion -verify=always-size,precision-only %s -// RUN: %clang_cc1 -fsycl-is-device -triple spir64 -internal-isystem %S/Inputs -fsyntax-only -sycl-std=2020 -Wimplicit-float-conversion -Wno-implicit-float-size-conversion -verify=prefer-precision %s +// RUN: %clang_cc1 -fsycl-is-device -triple spir64 -internal-isystem %S/Inputs -fsyntax-only -sycl-std=2020 -Wimplicit-float-conversion -Wno-sycl-implicit-float-size-conversion -verify=prefer-precision %s // RUN: %clang_cc1 -fsycl-is-device -triple spir64 -internal-isystem %S/Inputs -fsyntax-only -sycl-std=2020 -Wno-implicit-float-conversion -verify %s // This test checks that floating point conversion warnings are emitted correctly when used in conjunction. diff --git a/clang/test/SemaSYCL/precision-and-size-conversion.c b/clang/test/SemaSYCL/precision-and-size-conversion.c index 340d953a45aa6..4c756d782a636 100644 --- a/clang/test/SemaSYCL/precision-and-size-conversion.c +++ b/clang/test/SemaSYCL/precision-and-size-conversion.c @@ -1,7 +1,7 @@ -// RUN: %clang_cc1 -fsyntax-only -verify=precision-loss,precision-gain,size-change -fsycl-is-host -Wimplicit-float-conversion -Wdouble-promotion -Wimplicit-float-size-conversion \ +// RUN: %clang_cc1 -fsyntax-only -verify=precision-loss,precision-gain,size-change -fsycl-is-host -Wimplicit-float-conversion -Wdouble-promotion -Wsycl-implicit-float-size-conversion \ // RUN: -triple x86_64-apple-darwin %s -// RUN: %clang_cc1 -fsyntax-only -verify=size-only,precision-gain,size-change -fsycl-is-host -Wdouble-promotion -Wimplicit-float-size-conversion \ +// RUN: %clang_cc1 -fsyntax-only -verify=size-only,precision-gain,size-change -fsycl-is-host -Wdouble-promotion -Wsycl-implicit-float-size-conversion \ // RUN: -triple x86_64-apple-darwin %s // RUN: %clang_cc1 -fsyntax-only -verify=precision-increase -fsycl-is-host -Wdouble-promotion \ @@ -16,7 +16,7 @@ // RUN: %clang_cc1 -fsyntax-only -verify -fsycl-is-host \ // RUN: -triple x86_64-apple-darwin %s -// RUN: %clang_cc1 -fsyntax-only -verify -Wimplicit-float-size-conversion \ +// RUN: %clang_cc1 -fsyntax-only -verify -Wsycl-implicit-float-size-conversion \ // RUN: -triple x86_64-apple-darwin %s // This test checks that floating point conversion warnings are emitted correctly when used in conjunction.