summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-06-09 03:53:18 +0000
committerDouglas Gregor <dgregor@apple.com>2010-06-09 03:53:18 +0000
commit1fc3d66da4c2fa5f26a89c09f3ecf3325439b57d (patch)
tree658e6924bdc1563955e6a857cbb57094c753be46 /clang/test
parent83c64ee8de0842433aeaf52ed3750ae8495366e1 (diff)
downloadbcm5719-llvm-1fc3d66da4c2fa5f26a89c09f3ecf3325439b57d.tar.gz
bcm5719-llvm-1fc3d66da4c2fa5f26a89c09f3ecf3325439b57d.zip
Tweak our handling of the notion of a standard conversion sequence
being a subsequence of another standard conversion sequence. Instead of requiring exact type equality for the second conversion step, require type *similarity*, which is type equality with cv-qualifiers removed at all levels. This appears to match the behavior of EDG and VC++ (albeit not GCC), and feels more intuitive. Big thanks to John for the line of reasoning that supports this change: since cv-qualifiers are orthogonal to the second conversion step, we should ignore them in the type comparison. llvm-svn: 105678
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/SemaCXX/overload-call.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/overload-call.cpp b/clang/test/SemaCXX/overload-call.cpp
index 29133c7c7ff..9df5bc9f0c7 100644
--- a/clang/test/SemaCXX/overload-call.cpp
+++ b/clang/test/SemaCXX/overload-call.cpp
@@ -460,3 +460,20 @@ namespace PR7224 {
float &fr = foo(d2);
}
}
+
+namespace NontrivialSubsequence {
+ struct X0;
+
+ class A {
+ operator X0 *();
+ public:
+ operator const X0 *();
+ };
+
+ A a;
+ void foo( void const * );
+
+ void g() {
+ foo(a);
+ }
+}
OpenPOWER on IntegriCloud