From 75cc359fdc062b1f484929c97d27a76167a47a33 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Mon, 8 Feb 2010 18:54:05 +0000 Subject: [PATCH] Ensure that a operator delete overload is rocognized regardless of cv-quals. llvm-svn: 95553 --- clang/lib/AST/DeclCXX.cpp | 3 ++- clang/test/SemaCXX/new-delete.cpp | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp index 02ad36d47909..a519f78fc45d 100644 --- a/clang/lib/AST/DeclCXX.cpp +++ b/clang/lib/AST/DeclCXX.cpp @@ -587,7 +587,8 @@ bool CXXMethodDecl::isUsualDeallocationFunction() const { // then this function is a usual deallocation function. ASTContext &Context = getASTContext(); if (getNumParams() != 2 || - !Context.hasSameType(getParamDecl(1)->getType(), Context.getSizeType())) + !Context.hasSameUnqualifiedType(getParamDecl(1)->getType(), + Context.getSizeType())) return false; // This function is a usual deallocation function if there are no diff --git a/clang/test/SemaCXX/new-delete.cpp b/clang/test/SemaCXX/new-delete.cpp index 6f8955534311..acd4a23cb35a 100644 --- a/clang/test/SemaCXX/new-delete.cpp +++ b/clang/test/SemaCXX/new-delete.cpp @@ -217,6 +217,14 @@ static void* f(void* g) return new (g) X13(); } +class X14 { + static void operator delete(void*, const size_t); +}; + +void f(X14 *x14a, X14 *x14b) { + delete x14a; +} + namespace PR5918 { // Look for template operator new overloads. struct S { template static void* operator new(size_t, T); }; void test() {