Semantic checking of constructor declarations and classification of default/copy constructors

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58538 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/SemaCXX/constructor.cpp b/test/SemaCXX/constructor.cpp
index 4f9dd2b..1aedb29 100644
--- a/test/SemaCXX/constructor.cpp
+++ b/test/SemaCXX/constructor.cpp
@@ -1,11 +1,17 @@
 // RUN: clang -fsyntax-only -verify %s 
 
+typedef int INT;
+
 class Foo {
   Foo();
   (Foo)(float) { }
-  explicit Foo(int);
+  explicit Foo(int); // expected-error{{previous declaration is here}}
   Foo(const Foo&);
 
+  ((Foo))(INT); // expected-error{{cannot be redeclared}}
+
+  Foo(Foo foo, int i = 17, int j = 42); // expected-error {{copy constructor must pass its first argument by reference}}
+
   static Foo(short, short); // expected-error{{constructor cannot be declared 'static'}}
   virtual Foo(double); // expected-error{{constructor cannot be declared 'virtual'}}
   Foo(long) const; // expected-error{{'const' qualifier is not allowed on a constructor}}