diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-05-25 15:31:05 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-05-25 15:31:05 +0000 |
| commit | b9f907bafc77c2aaf9b25f9faaccb784a299b5f2 (patch) | |
| tree | 267595655728dc2854dfcf36a39c09be689b6a7f /clang | |
| parent | 4fb17cc6f87dd6efcfba41c8aecf1a8b94ae60f2 (diff) | |
| download | bcm5719-llvm-b9f907bafc77c2aaf9b25f9faaccb784a299b5f2.tar.gz bcm5719-llvm-b9f907bafc77c2aaf9b25f9faaccb784a299b5f2.zip | |
Make sure to strip off top-level cv-qualifiers as part of a
derived-to-base conversion on a pointer. Fixes PR7224.
llvm-svn: 104607
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Sema/SemaOverload.cpp | 2 | ||||
| -rw-r--r-- | clang/test/SemaCXX/overload-call.cpp | 16 |
2 files changed, 17 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 6c64905561b..2754d443b25 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -1233,7 +1233,7 @@ BuildSimilarlyQualifiedPointerType(const PointerType *FromPtr, if (CanonToPointee.getLocalQualifiers() == Quals) { // ToType is exactly what we need. Return it. if (!ToType.isNull()) - return ToType; + return ToType.getUnqualifiedType(); // Build a pointer to ToPointee. It has the right qualifiers // already. diff --git a/clang/test/SemaCXX/overload-call.cpp b/clang/test/SemaCXX/overload-call.cpp index 9618ea22495..29133c7c7ff 100644 --- a/clang/test/SemaCXX/overload-call.cpp +++ b/clang/test/SemaCXX/overload-call.cpp @@ -444,3 +444,19 @@ namespace PR7095 { void f(const X *); void g(Y y) { f(y); } } + +namespace PR7224 { + class A {}; + class B : public A {}; + + int &foo(A *const d); + float &foo(const A *const d); + + void bar() + { + B *const d = 0; + B const *const d2 = 0; + int &ir = foo(d); + float &fr = foo(d2); + } +} |

