Add a new warning -Wmissing-variable-declarations, to warn about variables
defined without a previous declaration.  This is similar to
-Wmissing-prototypes, but for variables instead of functions.

Patch by Ed Schouten.

llvm-svn: 166498
diff --git a/clang/test/Sema/warn-missing-variable-declarations.cpp b/clang/test/Sema/warn-missing-variable-declarations.cpp
new file mode 100644
index 0000000..77c4c01
--- /dev/null
+++ b/clang/test/Sema/warn-missing-variable-declarations.cpp
@@ -0,0 +1,39 @@
+// RUN: %clang -Wmissing-variable-declarations -fsyntax-only -Xclang -verify %s
+
+// Variable declarations that should trigger a warning.
+int vbad1; // expected-warning{{no previous extern declaration for non-static variable 'vbad1'}}
+int vbad2 = 10; // expected-warning{{no previous extern declaration for non-static variable 'vbad2'}}
+
+// Variable declarations that should not trigger a warning.
+static int vgood1;
+extern int vgood2;
+int vgood2;
+static struct {
+  int mgood1;
+} vgood3;
+
+// Functions should never trigger a warning.
+void fgood1(void);
+void fgood2(void) {
+  int lgood1;
+  static int lgood2;
+}
+static void fgood3(void) {
+  int lgood3;
+  static int lgood4;
+}
+
+// Structures, namespaces and classes should be unaffected.
+struct sgood1 {
+  int mgood2;
+};
+struct {
+  int mgood3;
+} sgood2;
+class CGood1 {
+  static int MGood1;
+};
+int CGood1::MGood1;
+namespace {
+  int mgood4;
+}