-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[HLSL][OpenCL] Strip addrspace from implicit cast diags #135830
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11360,6 +11360,14 @@ static void AnalyzeAssignment(Sema &S, BinaryOperator *E) { | |
static void DiagnoseImpCast(Sema &S, Expr *E, QualType SourceType, QualType T, | ||
SourceLocation CContext, unsigned diag, | ||
bool pruneControlFlow = false) { | ||
// For languages like HLSL and OpenCL, implicit conversion diagnostics listing | ||
// address space annotations isn't really useful. The warnings aren't because | ||
// you're converting a `private int` to `unsigned int`, it is because you're | ||
// conerting `int` to `unsigned int`. | ||
if (SourceType.hasAddressSpace()) | ||
SourceType = S.getASTContext().removeAddrSpaceQualType(SourceType); | ||
if (T.hasAddressSpace()) | ||
T = S.getASTContext().removeAddrSpaceQualType(T); | ||
Comment on lines
+11367
to
+11370
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should we assert here that There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If we added an assert it would really be something like:
My feeling is that doesn't really add a lot of value here because so many things in Sema would have to go wrong for us to generate implicit cast AST nodes other than qualification conversions where the source and destination types have the same unqualified types. |
||
if (pruneControlFlow) { | ||
S.DiagRuntimeBehavior(E->getExprLoc(), E, | ||
S.PDiag(diag) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -finclude-default-header -Wconversion -fnative-half-type %s -verify | ||
|
||
static double D = 2.0; | ||
static int I = D; // expected-warning{{implicit conversion turns floating-point number into integer: 'double' to 'int'}} | ||
groupshared float F = I; // expected-warning{{implicit conversion from 'int' to 'float' may lose precision}} | ||
|
||
export void fn() { | ||
half d = I; // expected-warning{{implicit conversion from 'int' to 'half' may lose precision}} | ||
int i = D; // expected-warning{{implicit conversion turns floating-point number into integer: 'double' to 'int'}} | ||
int j = F; // expected-warning{{implicit conversion turns floating-point number into integer: 'float' to 'int'}} | ||
int k = d; // expected-warning{{implicit conversion turns floating-point number into integer: 'half' to 'int'}} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was a helpful comment, but should these 2 if statements be nested in an if statement that checks if the language is HLSL / OpenCL?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, this should apply everywhere (although it almost certainly doesn't impact C/C++ because they don't really have address spaces).