[cfe-commits] r112918 - in /cfe/trunk: clang.xcodeproj/project.pbxproj include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaType.cpp test/Analysis/misc-ps.m test/Sema/attr-noreturn.c test/Sema/block-return.c test/Sema/return-noreturn.c test/Sema/return.c test/Sema/warn-unreachable.c test/SemaCXX/attr-noreturn.cpp test/SemaCXX/warn-unreachable.cpp
Anders Carlsson
andersca at mac.com
Thu Sep 2 17:25:03 PDT 2010
Author: andersca
Date: Thu Sep 2 19:25:02 2010
New Revision: 112918
URL: http://llvm.org/viewvc/llvm-project?rev=112918&view=rev
Log:
Get rid of the "functions declared 'noreturn' should have a 'void' result type" warning.
The rationale behind this is that it is normal for callback functions to have a non-void return type
and it should still be possible to mark them noreturn. (JavaScriptCore is a good example of this).
Modified:
cfe/trunk/clang.xcodeproj/project.pbxproj
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
cfe/trunk/lib/Sema/SemaType.cpp
cfe/trunk/test/Analysis/misc-ps.m
cfe/trunk/test/Sema/attr-noreturn.c
cfe/trunk/test/Sema/block-return.c
cfe/trunk/test/Sema/return-noreturn.c
cfe/trunk/test/Sema/return.c
cfe/trunk/test/Sema/warn-unreachable.c
cfe/trunk/test/SemaCXX/attr-noreturn.cpp
cfe/trunk/test/SemaCXX/warn-unreachable.cpp
Modified: cfe/trunk/clang.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/clang.xcodeproj/project.pbxproj?rev=112918&r1=112917&r2=112918&view=diff
==============================================================================
--- cfe/trunk/clang.xcodeproj/project.pbxproj (original)
+++ cfe/trunk/clang.xcodeproj/project.pbxproj Thu Sep 2 19:25:02 2010
@@ -2039,7 +2039,14 @@
isa = PBXProject;
buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
compatibilityVersion = "Xcode 2.4";
+ developmentRegion = English;
hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
mainGroup = 08FB7794FE84155DC02AAC07 /* clang */;
projectDirPath = "";
projectRoot = "";
Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=112918&r1=112917&r2=112918&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Thu Sep 2 19:25:02 2010
@@ -3145,9 +3145,6 @@
def warn_noreturn_function_has_return_expr : Warning<
"function %0 declared 'noreturn' should not return">,
InGroup<DiagGroup<"invalid-noreturn">>;
-def warn_noreturn_function_has_nonvoid_result : Warning<
- "%select{functions|blocks}0 declared 'noreturn' should have a 'void' result type">,
- InGroup<DiagGroup<"invalid-noreturn">>;
def warn_falloff_noreturn_function : Warning<
"function declared 'noreturn' should not return">,
InGroup<DiagGroup<"invalid-noreturn">>;
Modified: cfe/trunk/lib/Sema/SemaType.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaType.cpp?rev=112918&r1=112917&r2=112918&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaType.cpp (original)
+++ cfe/trunk/lib/Sema/SemaType.cpp Thu Sep 2 19:25:02 2010
@@ -1850,11 +1850,6 @@
&& !Type->isMemberFunctionPointerType())
return true;
- if (!GetResultType(Type)->isVoidType()) {
- S.Diag(Attr.getLoc(), diag::warn_noreturn_function_has_nonvoid_result)
- << (Type->isBlockPointerType() ? /* blocks */ 1 : /* functions */ 0);
- }
-
// Otherwise we can process right away.
Type = S.Context.getNoReturnType(Type);
return false;
Modified: cfe/trunk/test/Analysis/misc-ps.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/misc-ps.m?rev=112918&r1=112917&r2=112918&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/misc-ps.m (original)
+++ cfe/trunk/test/Analysis/misc-ps.m Thu Sep 2 19:25:02 2010
@@ -323,7 +323,7 @@
// was the block containing the merge for '?', which would trigger an
// assertion failure.
int rdar_7027684_aux();
-int rdar_7027684_aux_2() __attribute__((noreturn)); // expected-warning{{functions declared 'noreturn' should have a 'void' result type}}
+int rdar_7027684_aux_2() __attribute__((noreturn));
void rdar_7027684(int x, int y) {
{}; // this empty compound statement is critical.
(rdar_7027684_aux() ? rdar_7027684_aux_2() : (void) 0);
Modified: cfe/trunk/test/Sema/attr-noreturn.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-noreturn.c?rev=112918&r1=112917&r2=112918&view=diff
==============================================================================
--- cfe/trunk/test/Sema/attr-noreturn.c (original)
+++ cfe/trunk/test/Sema/attr-noreturn.c Thu Sep 2 19:25:02 2010
@@ -9,7 +9,7 @@
} // expected-warning {{function declared 'noreturn' should not return}}
// On K&R
-int f1() __attribute__((noreturn)); // expected-warning{{functions declared 'noreturn' should have a 'void' result type}}
+int f1() __attribute__((noreturn));
int g0 __attribute__((noreturn)); // expected-warning {{'noreturn' only applies to function types; type here is 'int'}}
Modified: cfe/trunk/test/Sema/block-return.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/block-return.c?rev=112918&r1=112917&r2=112918&view=diff
==============================================================================
--- cfe/trunk/test/Sema/block-return.c (original)
+++ cfe/trunk/test/Sema/block-return.c Thu Sep 2 19:25:02 2010
@@ -100,10 +100,10 @@
int sz8 = sizeof(^int (*[5])(long) {return funcptr3;}); // expected-error {{block declared as returning an array}}
void foo6() {
- int (^b)(int) __attribute__((noreturn)); // expected-warning{{blocks declared 'noreturn' should have a 'void' result type}}
+ int (^b)(int) __attribute__((noreturn));
b = ^ (int i) __attribute__((noreturn)) { return 1; }; // expected-error {{block declared 'noreturn' should not return}}
b(1);
- int (^c)(void) __attribute__((noreturn)) = ^ __attribute__((noreturn)) { return 100; }; // expected-error {{block declared 'noreturn' should not return}} expected-warning{{blocks declared 'noreturn' should have a 'void' result type}}
+ int (^c)(void) __attribute__((noreturn)) = ^ __attribute__((noreturn)) { return 100; }; // expected-error {{block declared 'noreturn' should not return}}
}
Modified: cfe/trunk/test/Sema/return-noreturn.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/return-noreturn.c?rev=112918&r1=112917&r2=112918&view=diff
==============================================================================
--- cfe/trunk/test/Sema/return-noreturn.c (original)
+++ cfe/trunk/test/Sema/return-noreturn.c Thu Sep 2 19:25:02 2010
@@ -20,11 +20,11 @@
// This test case illustrates that we don't warn about the missing return
// because the function is marked noreturn and there is an infinite loop.
extern int foo_test_3();
-__attribute__((__noreturn__)) void* test3(int arg) { // expected-warning{{functions declared 'noreturn' should have a 'void' result type}}
+__attribute__((__noreturn__)) void* test3(int arg) {
while (1) foo_test_3();
}
-__attribute__((__noreturn__)) void* test3_positive(int arg) { // expected-warning{{functions declared 'noreturn' should have a 'void' result type}}
+__attribute__((__noreturn__)) void* test3_positive(int arg) {
while (0) foo_test_3();
} // expected-warning{{function declared 'noreturn' should not return}}
Modified: cfe/trunk/test/Sema/return.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/return.c?rev=112918&r1=112917&r2=112918&view=diff
==============================================================================
--- cfe/trunk/test/Sema/return.c (original)
+++ cfe/trunk/test/Sema/return.c Thu Sep 2 19:25:02 2010
@@ -60,7 +60,7 @@
(void)(1 + unknown());
} // expected-warning {{control reaches end of non-void function}}
-int halt3() __attribute__((noreturn)); // expected-warning{{functions declared 'noreturn' should have a 'void' result type}}
+int halt3() __attribute__((noreturn));
int test9() {
(void)(halt3() + unknown());
Modified: cfe/trunk/test/Sema/warn-unreachable.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-unreachable.c?rev=112918&r1=112917&r2=112918&view=diff
==============================================================================
--- cfe/trunk/test/Sema/warn-unreachable.c (original)
+++ cfe/trunk/test/Sema/warn-unreachable.c Thu Sep 2 19:25:02 2010
@@ -1,6 +1,6 @@
// RUN: %clang %s -fsyntax-only -Xclang -verify -fblocks -Wunreachable-code -Wno-unused-value
-int halt() __attribute__((noreturn)); // expected-warning{{functions declared 'noreturn' should have a 'void' result type}}
+int halt() __attribute__((noreturn));
int live();
int dead();
Modified: cfe/trunk/test/SemaCXX/attr-noreturn.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-noreturn.cpp?rev=112918&r1=112917&r2=112918&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/attr-noreturn.cpp (original)
+++ cfe/trunk/test/SemaCXX/attr-noreturn.cpp Thu Sep 2 19:25:02 2010
@@ -31,7 +31,7 @@
class xpto {
- int blah() __attribute__((noreturn)); // expected-warning{{functions declared 'noreturn' should have a 'void' result type}}
+ int blah() __attribute__((noreturn));
};
int xpto::blah() {
Modified: cfe/trunk/test/SemaCXX/warn-unreachable.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-unreachable.cpp?rev=112918&r1=112917&r2=112918&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/warn-unreachable.cpp (original)
+++ cfe/trunk/test/SemaCXX/warn-unreachable.cpp Thu Sep 2 19:25:02 2010
@@ -1,6 +1,6 @@
// RUN: %clang_cc1 %s -fsyntax-only -verify -fblocks -Wunreachable-code -Wno-unused-value
-int &halt() __attribute__((noreturn)); // expected-warning{{functions declared 'noreturn' should have a 'void' result type}}
+int &halt() __attribute__((noreturn));
int &live();
int dead();
int liveti() throw(int);
@@ -60,7 +60,7 @@
struct S {
int mem;
} s;
- S &foor() __attribute__((noreturn)); // expected-warning{{functions declared 'noreturn' should have a 'void' result type}}
+ S &foor() __attribute__((noreturn));
foor()
.mem; // expected-warning {{will never be executed}}
}
More information about the cfe-commits
mailing list