This fixes <rdar://problem/
6839489> 10A345: Clang does not warm about mismatched returns (void return from a bool function)
Will implement -Wreturn-type, -Wno-return-type in another commit.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70492
91177308-0d34-0410-b5e6-
96231b3b80d8
def warn_return_missing_expr : Warning<
"non-void %select{function|method}1 %0 should return a value">;
-def ext_return_missing_expr : Extension<
+def ext_return_missing_expr : ExtWarn<
"non-void %select{function|method}1 %0 should return a value">;
def ext_return_has_expr : ExtWarn<
"void %select{function|method}1 %0 should not return a value">;
*p = 5; // no-warning
p = 0;
}
- else return;
+ else return; // expected-warning {{non-void function 'f4_b' should return a value}}
*p += 10; // expected-warning{{Dereference of null pointer}}
}
// This tests that our symbolication worked, and that we correctly test
// x against 0 (with the same bitwidth).
if (!x) {
- if (!p) return;
+ if (!p) return; // expected-warning {{non-void function 'f10' should return a value}}
*p = 10;
}
else p = 0;
--- /dev/null
+// RUN: clang-cc %s -fsyntax-only -verify
+
+// clang emits the following warning by default.
+// With GCC, -pedantic, -Wreturn-type or -Wall are required to produce the
+// following warning.
+int t14() {
+ return; // expected-warning {{non-void function 't14' should return a value}}
+}
+