[Sema] Check FunctionDecl has identifier before getName. (#6439) (#6457)
Use identifier name without check the identifier exists will cause
crash.
Fixes #6426
---------
Co-authored-by: Tex Riddell <texr@microsoft.com>
Co-authored-by: github-actions[bot]
<github-actions[bot]@users.noreply.github.com>
(cherry picked from commit 7581ff4d297d124b340d6715b709f1c423909ca5)
diff --git a/tools/clang/lib/Sema/SemaHLSL.cpp b/tools/clang/lib/Sema/SemaHLSL.cpp
index 302159e..871fa02 100644
--- a/tools/clang/lib/Sema/SemaHLSL.cpp
+++ b/tools/clang/lib/Sema/SemaHLSL.cpp
@@ -15690,7 +15690,8 @@
// if this FD isn't the entry point, then we shouldn't add
// a shader attribute to this decl, so just return
- if (EntryPointName != FD->getIdentifier()->getName()) {
+ if (!FD->getIdentifier() ||
+ EntryPointName != FD->getIdentifier()->getName()) {
return;
}
diff --git a/tools/clang/test/SemaHLSL/operator-overload.hlsl b/tools/clang/test/SemaHLSL/operator-overload.hlsl
new file mode 100644
index 0000000..9b33b96
--- /dev/null
+++ b/tools/clang/test/SemaHLSL/operator-overload.hlsl
@@ -0,0 +1,32 @@
+// RUN: %dxc -Tps_6_0 -verify %s
+
+// expected-error@+1 {{overloading non-member 'operator==' is not allowed}}
+bool operator==(int lhs, int rhs) {
+ return true;
+}
+
+struct A {
+ float a;
+ int b;
+};
+
+// expected-error@+1 {{overloading non-member 'operator>' is not allowed}}
+bool operator>(A a0, A a1) {
+ return a1.a > a0.a && a1.b > a0.b;
+}
+// expected-error@+1 {{overloading non-member 'operator==' is not allowed}}
+bool operator==(A a0, int i) {
+ return a0.b == i;
+}
+// expected-error@+1 {{overloading non-member 'operator<' is not allowed}}
+bool operator<(A a0, float f) {
+ return a0.a < f;
+}
+// expected-error@+1 {{overloading 'operator++' is not allowed}}
+A operator++(A a0) {
+ a0.a++;
+ a0.b++;
+ return a0;
+}
+
+void main() {}
\ No newline at end of file