[cfe-commits] r90961 - in /cfe/trunk: lib/Sema/SemaExprCXX.cpp test/SemaCXX/new-delete.cpp

Anders Carlsson andersca at mac.com
Tue Dec 8 23:39:44 PST 2009


Author: andersca
Date: Wed Dec  9 01:39:44 2009
New Revision: 90961

URL: http://llvm.org/viewvc/llvm-project?rev=90961&view=rev
Log:
Look through using declarations when searching for allocation overloads.

Modified:
    cfe/trunk/lib/Sema/SemaExprCXX.cpp
    cfe/trunk/test/SemaCXX/new-delete.cpp

Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=90961&r1=90960&r2=90961&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Wed Dec  9 01:39:44 2009
@@ -601,7 +601,8 @@
        Alloc != AllocEnd; ++Alloc) {
     // Even member operator new/delete are implicitly treated as
     // static, so don't use AddMemberCandidate.
-    if (FunctionDecl *Fn = dyn_cast<FunctionDecl>(*Alloc)) {
+    if (FunctionDecl *Fn = 
+          dyn_cast<FunctionDecl>((*Alloc)->getUnderlyingDecl())) {
       AddOverloadCandidate(Fn, Args, NumArgs, Candidates,
                            /*SuppressUserConversions=*/false);
       continue;

Modified: cfe/trunk/test/SemaCXX/new-delete.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/new-delete.cpp?rev=90961&r1=90960&r2=90961&view=diff

==============================================================================
--- cfe/trunk/test/SemaCXX/new-delete.cpp (original)
+++ cfe/trunk/test/SemaCXX/new-delete.cpp Wed Dec  9 01:39:44 2009
@@ -202,3 +202,17 @@
 void f() {
   X11 x11; // expected-note {{implicit default destructor for 'struct X11' first required here}}
 }
+
+struct X12 {
+  void* operator new(size_t, void*);
+};
+
+struct X13 : X12 {
+  using X12::operator new;
+};
+
+static void* f(void* g)
+{
+    return new (g) X13();
+}
+





More information about the cfe-commits mailing list