1) don't do overload resolution in selecting conversion
to pointer function for delete expression. 2)
Treat type conversion function and its 'const' version
as identical in building the visible conversion list.
llvm-svn: 81930
diff --git a/clang/test/SemaCXX/conversion-delete-expr.cpp b/clang/test/SemaCXX/conversion-delete-expr.cpp
index 63a9765..708289c 100644
--- a/clang/test/SemaCXX/conversion-delete-expr.cpp
+++ b/clang/test/SemaCXX/conversion-delete-expr.cpp
@@ -78,19 +78,18 @@
// Test7
struct Base {
- operator int*(); // expected-note {{candidate function}}
+ operator int*();
};
struct Derived : Base {
// not the same function as Base's non-const operator int()
- operator int*() const; // expected-note {{candidate function}}
+ operator int*() const;
};
void foo6(const Derived cd, Derived d) {
// overload resolution selects Derived::operator int*() const;
delete cd;
-
- delete d; // expected-error {{ambiguous conversion of delete expression of type 'struct Derived' to a pointer}}
+ delete d;
}
// Test8
diff --git a/clang/test/SemaCXX/direct-initializer.cpp b/clang/test/SemaCXX/direct-initializer.cpp
index e95ba22..a9e2b2b 100644
--- a/clang/test/SemaCXX/direct-initializer.cpp
+++ b/clang/test/SemaCXX/direct-initializer.cpp
@@ -36,15 +36,15 @@
}
struct Base {
- operator int*() const; // expected-note {{candidate function}}
+ operator int*() const;
};
struct Derived : Base {
- operator int*(); // expected-note {{candidate function}}
+ operator int*();
};
void foo(const Derived cd, Derived d) {
- int *pi = cd;
- int *ppi = d; // expected-error {{ambiguity in initializing value of type 'int *' with initializer of type 'struct Derived'}}
+ int *pi = cd; // expected-error {{incompatible type initializing 'struct Derived const', expected 'int *'}}
+ int *ppi = d;
}