Jelajahi Sumber

Default to error on missing return from non-void function. (#3004)

* Default to error on missing return from non-void function.

* Add -Wno-return-type to spirv test so it verifies the same result.

* Fix test with missing default case and no return.
Tex Riddell 5 tahun lalu
induk
melakukan
8c43a14565

+ 4 - 0
tools/clang/include/clang/Basic/DiagnosticSemaKinds.td

@@ -382,9 +382,11 @@ def err_thread_unsupported : Error<
 
 def warn_maybe_falloff_nonvoid_function : Warning<
   "control may reach end of non-void function">,
+  DefaultError,   // HLSL Change: DefaultError
   InGroup<ReturnType>;
 def warn_falloff_nonvoid_function : Warning<
   "control reaches end of non-void function">,
+  DefaultError,   // HLSL Change: DefaultError
   InGroup<ReturnType>;
 def err_maybe_falloff_nonvoid_block : Error<
   "control may reach end of non-void block">;
@@ -5710,9 +5712,11 @@ let CategoryName = "Lambda Issue" in {
     "lambda declared 'noreturn' should not return">;
   def warn_maybe_falloff_nonvoid_lambda : Warning<
     "control may reach end of non-void lambda">,
+    DefaultError,   // HLSL Change: DefaultError
     InGroup<ReturnType>;
   def warn_falloff_nonvoid_lambda : Warning<
     "control reaches end of non-void lambda">,
+    DefaultError,   // HLSL Change: DefaultError
     InGroup<ReturnType>;
   def err_access_lambda_capture : Error<
     // The ERRORs represent other special members that aren't constructors, in

+ 1 - 1
tools/clang/test/CodeGenSPIRV/spirv.cf.ret-missing.hlsl

@@ -1,4 +1,4 @@
-// Run: %dxc -T vs_6_0 -E main
+// Run: %dxc -T vs_6_0 -E main -Wno-return-type
 
 // CHECK:[[null:%\d+]] = OpConstantNull %float
 

+ 12 - 0
tools/clang/test/HLSLFileCheck/hlsl/diagnostics/errors/no_return.hlsl

@@ -0,0 +1,12 @@
+// RUN: %dxc -E main -T vs_6_2 %s | FileCheck %s
+
+// CHECK: 8:1: error: control reaches end of non-void function
+
+export float4 fn() {
+  float4 f = 1.0;
+  f += 2.0;
+} // return-type error here.
+
+float4 main() : OUT {
+  return fn();
+}

+ 2 - 0
tools/clang/test/HLSLFileCheck/hlsl/types/enum/enum4.hlsl

@@ -16,6 +16,8 @@ int4 getValueInt(int i) {
             return int4(2,2,2,2);
         case 2:
             return int4(3,3,3,3);
+        default:
+            return int4(0,0,0,0);
     }
 }