[cfe-commits] r156654 - in /cfe/trunk: lib/Sema/SemaExprCXX.cpp test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp

Richard Smith richard-llvm at metafoo.co.uk
Fri May 11 15:20:11 PDT 2012


Author: rsmith
Date: Fri May 11 17:20:10 2012
New Revision: 156654

URL: http://llvm.org/viewvc/llvm-project?rev=156654&view=rev
Log:
When diagnosing inaccessible temporary destructors in decltype expressions, use
the correct type and the correct source location in the diagnostic. Spotted by
Johannes Schaub!

Modified:
    cfe/trunk/lib/Sema/SemaExprCXX.cpp
    cfe/trunk/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp

Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=156654&r1=156653&r2=156654&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Fri May 11 17:20:10 2012
@@ -4775,11 +4775,11 @@
     CXXDestructorDecl *Destructor = LookupDestructor(RD);
     Temp->setDestructor(Destructor);
 
-    MarkFunctionReferenced(E->getExprLoc(), Destructor);
-    CheckDestructorAccess(E->getExprLoc(), Destructor,
+    MarkFunctionReferenced(Bind->getExprLoc(), Destructor);
+    CheckDestructorAccess(Bind->getExprLoc(), Destructor,
                           PDiag(diag::err_access_dtor_temp)
-                            << E->getType());
-    DiagnoseUseOfDecl(Destructor, E->getExprLoc());
+                            << Bind->getType());
+    DiagnoseUseOfDecl(Destructor, Bind->getExprLoc());
 
     // We need a cleanup, but we don't need to remember the temporary.
     ExprNeedsCleanups = true;

Modified: cfe/trunk/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp?rev=156654&r1=156653&r2=156654&view=diff
==============================================================================
--- cfe/trunk/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp (original)
+++ cfe/trunk/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.simple/p5-cxx0x.cpp Fri May 11 17:20:10 2012
@@ -21,7 +21,7 @@
 
 class PD {
   friend struct A;
-  ~PD(); // expected-note 4{{here}}
+  ~PD(); // expected-note 5{{here}}
 public:
   typedef int n;
 };
@@ -37,8 +37,14 @@
 };
 
 // Two errors here: one for the decltype, one for the variable.
-decltype(PD(), PD()) pd1; // expected-error 2{{private destructor}}
-decltype(DD(), DD()) dd1; // expected-error 2{{deleted function}}
+decltype(
+    PD(), // expected-error {{private destructor}}
+    PD()) pd1; // expected-error {{private destructor}}
+decltype(DD(), // expected-error {{deleted function}}
+         DD()) dd1; // expected-error {{deleted function}}
+decltype(
+    PD(), // expected-error {{temporary of type 'PD' has private destructor}}
+    0) pd2;
 
 decltype(((13, ((DD())))))::n dd_parens; // ok
 decltype(((((42)), PD())))::n pd_parens_comma; // ok





More information about the cfe-commits mailing list