Fixes misc. flexible array bugs in c++ (PR7029).

llvm-svn: 104733
diff --git a/clang/test/SemaCXX/flexible-array-test.cpp b/clang/test/SemaCXX/flexible-array-test.cpp
new file mode 100644
index 0000000..e58992b
--- /dev/null
+++ b/clang/test/SemaCXX/flexible-array-test.cpp
@@ -0,0 +1,45 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s 
+// pr7029
+
+template <class Key, class T> struct QMap
+{
+  void insert(const Key &, const T &);
+  T v;
+};
+
+
+template <class Key, class T>
+void QMap<Key, T>::insert(const Key &, const T &avalue)
+{
+  v = avalue;
+}
+
+
+struct inotify_event
+{
+  int wd;
+ 
+  // clang doesn't like '[]': 
+  // cannot initialize a parameter of type 'void *' with an rvalue of type 'char (*)[]'
+  char name [];	
+};
+
+
+void foo()
+{
+    inotify_event event;
+    inotify_event* ptr = &event;
+    inotify_event event1 = *ptr;
+    *ptr = event;
+    QMap<int, inotify_event> eventForId;
+    eventForId.insert(ptr->wd, *ptr);
+}
+
+struct S {
+	virtual void foo();
+};
+
+struct X {
+   int blah;
+   S strings[];	// expected-error {{flexible array 'strings' must have a non-dependent, non-POD type}}
+};