Skip to content

Commit 2b0167a

Browse files
committed
create a -Wmatrix-conversion diagnostic group. Move some of the vector warnings to the Vector diagnostic group
1 parent c72fbd4 commit 2b0167a

File tree

4 files changed

+14
-5
lines changed

4 files changed

+14
-5
lines changed

clang/include/clang/Basic/DiagnosticGroups.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,7 @@ def SuperSubClassMismatch : DiagGroup<"super-class-method-mismatch">;
10611061
def OverridingMethodMismatch : DiagGroup<"overriding-method-mismatch">;
10621062
def VariadicMacros : DiagGroup<"variadic-macros">;
10631063
def VectorConversion : DiagGroup<"vector-conversion">; // clang specific
1064+
def MatrixConversion : DiagGroup<"matrix-conversion">; // clang specific
10641065
def VexingParse : DiagGroup<"vexing-parse">;
10651066
def VLAUseStaticAssert : DiagGroup<"vla-extension-static-assert">;
10661067
def VLACxxExtension : DiagGroup<"vla-cxx-extension", [VLAUseStaticAssert]>;
@@ -1335,6 +1336,8 @@ def : DiagGroup<"int-conversions",
13351336
[IntConversion]>; // -Wint-conversions = -Wint-conversion
13361337
def : DiagGroup<"vector-conversions",
13371338
[VectorConversion]>; // -Wvector-conversions = -Wvector-conversion
1339+
def : DiagGroup<"matrix-conversions",
1340+
[MatrixConversion]>; // -Wvector-conversions = -Wmatrix-conversion
13381341
def : DiagGroup<"unused-local-typedefs", [UnusedLocalTypedef]>;
13391342
// -Wunused-local-typedefs = -Wunused-local-typedef
13401343

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4340,10 +4340,10 @@ def warn_unknown_sanitizer_ignored : Warning<
43404340

43414341
def warn_impcast_matrix_scalar : Warning<
43424342
"implicit conversion turns matrix to scalar: %0 to %1">,
4343-
InGroup<Conversion>, DefaultIgnore;
4343+
InGroup<MatrixConversion>, DefaultIgnore;
43444344
def warn_impcast_vector_scalar : Warning<
43454345
"implicit conversion turns vector to scalar: %0 to %1">,
4346-
InGroup<Conversion>, DefaultIgnore;
4346+
InGroup<VectorConversion>, DefaultIgnore;
43474347
def warn_impcast_complex_scalar : Warning<
43484348
"implicit conversion discards imaginary component: %0 to %1">,
43494349
InGroup<Conversion>, DefaultIgnore;
@@ -13246,10 +13246,10 @@ def err_hlsl_builtin_scalar_vector_mismatch
1324613246
"vector type with matching scalar element type%diff{: $ vs $|}2,3">;
1324713247

1324813248
def warn_hlsl_impcast_vector_truncation : Warning<
13249-
"implicit conversion truncates vector: %0 to %1">, InGroup<Conversion>;
13249+
"implicit conversion truncates vector: %0 to %1">, InGroup<VectorConversion>;
1325013250

1325113251
def warn_hlsl_impcast_matrix_truncation : Warning<
13252-
"implicit conversion truncates matrix: %0 to %1">, InGroup<Conversion>;
13252+
"implicit conversion truncates matrix: %0 to %1">, InGroup<MatrixConversion>;
1325313253

1325413254
def warn_hlsl_availability : Warning<
1325513255
"%0 is only available %select{|in %4 environment }3on %1 %2 or newer">,

clang/test/SemaHLSL/MatrixElementOverloadResolution.hlsl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ void matOrVec2(float2x3 F) {} // expected-note{{candidate function}}
236236

237237
export void Case8(float2x3 f23, float4x4 f44, float3x3 f33, float3x2 f32) {
238238
int2x2 i22 = f23;
239+
// expected-warning@-1{{implicit conversion truncates matrix: 'float2x3' (aka 'matrix<float, 2, 3>') to 'int2x2' (aka 'matrix<int, 2, 2>')}}
239240
//CHECK: VarDecl {{.*}} i22 'int2x2':'matrix<int, 2, 2>' cinit
240241
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'int2x2':'matrix<int, 2, 2>' <FloatingToIntegral>
241242
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'float2x3':'matrix<float, 2, 3>' <LValueToRValue>
@@ -245,6 +246,7 @@ export void Case8(float2x3 f23, float4x4 f44, float3x3 f33, float3x2 f32) {
245246
#endif
246247

247248
fn2x2(f23);
249+
// expected-warning@-1{{implicit conversion truncates matrix: 'float2x3' (aka 'matrix<float, 2, 3>') to 'matrix<float, 2, 2>'}}
248250
//CHECK: DeclRefExpr {{.*}} 'void (float2x2)' lvalue Function {{.*}} 'fn2x2' 'void (float2x2)'
249251
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'matrix<float, 2, 2>' <HLSLMatrixTruncation>
250252
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'float2x3':'matrix<float, 2, 3>' <LValueToRValue>
@@ -255,11 +257,13 @@ export void Case8(float2x3 f23, float4x4 f44, float3x3 f33, float3x2 f32) {
255257
#endif
256258

257259
matOrVec(f23);
260+
// expected-warning@-1{{implicit conversion truncates matrix: 'float2x3' (aka 'matrix<float, 2, 3>') to 'matrix<float, 2, 2>'}}
258261
//CHECK: DeclRefExpr {{.*}} 'void (float2x2)' lvalue Function {{.*}} 'matOrVec' 'void (float2x2)'
259262
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'matrix<float, 2, 2>' <HLSLMatrixTruncation>
260263
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'float2x3':'matrix<float, 2, 3>' <LValueToRValue>
261264

262265
matOrVec(f44);
266+
// expected-warning@-1{{implicit conversion truncates matrix: 'float4x4' (aka 'matrix<float, 4, 4>') to 'matrix<float, 2, 2>'}}
263267
//CHECK: DeclRefExpr {{.*}} 'void (float2x2)' lvalue Function {{.*}} 'matOrVec' 'void (float2x2)'
264268
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'matrix<float, 2, 2>' <HLSLMatrixTruncation>
265269
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'float4x4':'matrix<float, 4, 4>' <LValueToRValue>
@@ -272,11 +276,13 @@ export void Case8(float2x3 f23, float4x4 f44, float3x3 f33, float3x2 f32) {
272276
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'float2x3':'matrix<float, 2, 3>' <LValueToRValue>
273277

274278
matOrVec2(f44);
279+
// expected-warning@-1{{implicit conversion truncates matrix: 'float4x4' (aka 'matrix<float, 4, 4>') to 'matrix<float, 2, 3>'}}
275280
//CHECK: DeclRefExpr {{.*}} 'void (float2x3)' lvalue Function {{.*}} 'matOrVec2' 'void (float2x3)'
276281
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'matrix<float, 2, 3>' <HLSLMatrixTruncation>
277282
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'float4x4':'matrix<float, 4, 4>' <LValueToRValue>
278283

279284
matOrVec2(f33);
285+
// expected-warning@-1{{implicit conversion truncates matrix: 'float3x3' (aka 'matrix<float, 3, 3>') to 'matrix<float, 2, 3>'}}
280286
//CHECK: DeclRefExpr {{.*}} 'void (float2x3)' lvalue Function {{.*}} 'matOrVec2' 'void (float2x3)'
281287
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'matrix<float, 2, 3>' <HLSLMatrixTruncation>
282288
//CHECK-NEXT: ImplicitCastExpr {{.*}} 'float3x3':'matrix<float, 3, 3>' <LValueToRValue>

clang/test/SemaHLSL/Types/BuiltinMatrix/MatrixImplicitTruncCastWarnings.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.6-library -finclude-default-header -Wconversion -verify %s
1+
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.6-library -finclude-default-header -Wmatrix-conversion -verify %s
22

33
export int3x4 trunc_cast(int4x4 i44) {
44
int3x4 i34 = i44;

0 commit comments

Comments
 (0)