aboutsummaryrefslogtreecommitdiff
path: root/clang/test/Parser/empty-translation-unit.c
diff options
context:
space:
mode:
authorJordan Rose <jordan_rose@apple.com>2012-06-06 17:25:21 +0000
committerJordan Rose <jordan_rose@apple.com>2012-06-06 17:25:21 +0000
commitccf43ca05cb1540f3d95a73b7b329bf926808c7b (patch)
treef1c81126e272ce660655dd437fa5dbf9d058f303 /clang/test/Parser/empty-translation-unit.c
parentfaa389462835ab40ed8af86eb32c44abfcf4e48a (diff)
downloadllvm-ccf43ca05cb1540f3d95a73b7b329bf926808c7b.zip
llvm-ccf43ca05cb1540f3d95a73b7b329bf926808c7b.tar.gz
llvm-ccf43ca05cb1540f3d95a73b7b329bf926808c7b.tar.bz2
Add pedantic warning -Wempty-translation-unit (C11 6.9p1).
In standard C since C89, a 'translation-unit' is syntactically defined to have at least one "external-declaration", which is either a decl or a function definition. In Clang the latter gives us a declaration as well. The tricky bit about this warning is that our predefines can contain external declarations (__builtin_va_list and the 128-bit integer types). Therefore our AST parser now makes sure we have at least one declaration that doesn't come from the predefines buffer. Also, remove bogus warning about empty source files. This doesn't catch source files that only contain comments, and never fired anyway because of our predefines. PR12665 and <rdar://problem/9165548> llvm-svn: 158085
Diffstat (limited to 'clang/test/Parser/empty-translation-unit.c')
-rw-r--r--clang/test/Parser/empty-translation-unit.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/test/Parser/empty-translation-unit.c b/clang/test/Parser/empty-translation-unit.c
new file mode 100644
index 0000000..0dbf37e
--- /dev/null
+++ b/clang/test/Parser/empty-translation-unit.c
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -fsyntax-only -std=c99 -pedantic -W -verify %s
+// RUN: %clang_cc1 -fsyntax-only -x c++ -std=c++03 -pedantic-errors -W %s
+
+#include "completely-empty-header-file.h"
+// no-warning -- an empty file is OK
+
+#define A_MACRO_IS_NOT_GOOD_ENOUGH 1
+
+// In C we should get this warning, but in C++ we shouldn't.
+// expected-warning{{ISO C requires a translation unit to contain at least one declaration.}}