From 222e2a7620e6520ffaf4fc4e69d79c18da31542e Mon Sep 17 00:00:00 2001 From: "Zancanaro; Carlo" Date: Mon, 24 Sep 2012 09:58:17 +1000 Subject: Add the clang library to the repo (with some of my changes, too). --- clang/test/SemaCXX/copy-initialization.cpp | 67 ++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 clang/test/SemaCXX/copy-initialization.cpp (limited to 'clang/test/SemaCXX/copy-initialization.cpp') diff --git a/clang/test/SemaCXX/copy-initialization.cpp b/clang/test/SemaCXX/copy-initialization.cpp new file mode 100644 index 0000000..ea2db0c --- /dev/null +++ b/clang/test/SemaCXX/copy-initialization.cpp @@ -0,0 +1,67 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +class X { +public: + explicit X(const X&); // expected-note {{candidate constructor}} + X(int*); // expected-note 3{{candidate constructor}} + explicit X(float*); // expected-note {{candidate constructor}} +}; + +class Y : public X { }; + +void f(Y y, int *ip, float *fp) { + X x1 = y; // expected-error{{no matching constructor for initialization of 'X'}} + X x2 = 0; + X x3 = ip; + X x4 = fp; // expected-error{{no viable conversion}} + X x2a(0); // expected-error{{call to constructor of 'X' is ambiguous}} + X x3a(ip); + X x4a(fp); +} + +struct foo { + void bar(); // expected-note{{declared here}} +}; + +// PR3600 +void test(const foo *P) { P->bar(); } // expected-error{{'bar' not viable: 'this' argument has type 'const foo', but function is not marked const}} + +namespace PR6757 { + struct Foo { + Foo(); + Foo(Foo&); // expected-note{{candidate constructor not viable}} + }; + + struct Bar { + operator const Foo&() const; + }; + + void f(Foo); + + void g(Foo foo) { + f(Bar()); // expected-error{{no viable constructor copying parameter of type 'const PR6757::Foo'}} + f(foo); + } +} + +namespace DR5 { + // Core issue 5: if a temporary is created in copy-initialization, it is of + // the cv-unqualified version of the destination type. + namespace Ex1 { + struct C { }; + C c; + struct A { + A(const A&); + A(const C&); + }; + const volatile A a = c; // ok + } + + namespace Ex2 { + struct S { + S(S&&); // expected-warning {{C++11}} + S(int); + }; + const S a(0); + const S b = 0; + } +} -- cgit v1.2.3