From 36c49e3f258dced101949edabd72e9bc3f1dedc4 Mon Sep 17 00:00:00 2001 From: dim Date: Fri, 17 Sep 2010 15:54:40 +0000 Subject: Vendor import of clang r114020 (from the release_28 branch): http://llvm.org/svn/llvm-project/cfe/branches/release_28@114020 Approved by: rpaulo (mentor) --- test/CXX/expr/expr.unary/expr.unary.op/p4.cpp | 45 +++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 test/CXX/expr/expr.unary/expr.unary.op/p4.cpp (limited to 'test/CXX/expr/expr.unary/expr.unary.op/p4.cpp') diff --git a/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp b/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp new file mode 100644 index 0000000..170c734 --- /dev/null +++ b/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp @@ -0,0 +1,45 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +// rdar://problem/8347416 +namespace test0 { + struct A { + void foo(void (A::*)(int)); // expected-note {{passing argument to parameter here}} + template void g(T); + + void test() { + // FIXME: this diagnostic is terrible + foo(&g); // expected-error {{cannot initialize a parameter of type 'void (test0::A::*)(int)' with an rvalue of type ''}} + } + }; +} + +// This should succeed. +namespace test1 { + struct A { + static void f(void (A::*)()); + static void f(void (*)(int)); + void g(); + static void g(int); + + void test() { + f(&g); + } + }; +} + +// Also rdar://problem/8347416 +namespace test2 { + struct A { + static int foo(short); + static int foo(float); + int foo(int); + int foo(double); + + void test(); + }; + + void A::test() { + // FIXME: This diagnostic is terrible. + int (A::*ptr)(int) = &(A::foo); // expected-error {{cannot initialize a variable of type 'int (test2::A::*)(int)' with an rvalue of type ''}} + } +} -- cgit v1.1