================
@@ -44,6 +44,18 @@ column_major float4x4 Col2Row(row_major float4x4 M) {
 
 void bar(row_major float4x4 M, column_major float4x4 M2) {}
 
+// Layout metadata does not create distinct overloads.
+void same_overload(row_major float2x2 M);
+void same_overload(column_major float2x2 M);
----------------
llvm-beanz wrote:

What is this testing?

Duplicate declarations are fine and don't produce diagnostics, but they also 
wouldn't produce a diagnostic if they were treated as unique overloads.

For example this is totally fine in C++:
```c++
int fn(int);
int fn(int); // fine to re-declare the existing declaration.
int fn(float);  // fine to overload it.
```

By contrast this is not because it is a re-definition:
```c++
void fn(int) {}
void fn(int) {}
```

In HLSL today this is legal:
```
void fn(row_major float2x2);
void fn(column_major float2x2); // re-declaration of the same thing is fine!
```

This is illegal:
```
void fn(row_major float2x2) {}
void fn(column_major float2x2) {} // re-definition of the same thing is not!
```

That's probably a more complete test. We should also consider making 
re-declaration with different orientation an error since that's almost 
certainly a bug in code, but that's something we should probably drive through 
TC57.

https://github.com/llvm/llvm-project/pull/225519
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to