[llvm-branch-commits] [cfe-branch] r196670 - Merging r196488:
Bill Wendling
isanbard at gmail.com
Sat Dec 7 15:53:50 PST 2013
Author: void
Date: Sat Dec 7 17:53:50 2013
New Revision: 196670
URL: http://llvm.org/viewvc/llvm-project?rev=196670&view=rev
Log:
Merging r196488:
------------------------------------------------------------------------
r196488 | rsmith | 2013-12-05 00:30:59 -0800 (Thu, 05 Dec 2013) | 4 lines
PR17983: Fix crasher bug in C++1y mode when performing a non-global array
delete on a class which has no array cookie and has no class-specific operator
new.
------------------------------------------------------------------------
Modified:
cfe/branches/release_34/ (props changed)
cfe/branches/release_34/lib/Sema/SemaDeclCXX.cpp
cfe/branches/release_34/lib/Sema/SemaExprCXX.cpp
cfe/branches/release_34/test/CodeGenCXX/cxx1y-sized-deallocation.cpp
Propchange: cfe/branches/release_34/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Dec 7 17:53:50 2013
@@ -1,4 +1,4 @@
/cfe/branches/type-system-rewrite:134693-134817
-/cfe/trunk:195126,195128,195135-195136,195146,195149,195154,195158,195163,195168,195174,195249,195268,195283,195303,195326,195329,195367,195384,195409,195420,195422,195501,195547,195556,195558,195587,195620,195635,195669,195687,195693,195710,195713,195716,195756,195760,195768,195777,195789,195792,195804,195827,195843-195844,195877,195887-195888,195897,195903,195905-195906,195932,195936-195943,195970,195983,196045,196048,196050,196058,196114-196115,196153,196206,196215,196370,196387,196423,196454,196459,196532,196538,196658
+/cfe/trunk:195126,195128,195135-195136,195146,195149,195154,195158,195163,195168,195174,195249,195268,195283,195303,195326,195329,195367,195384,195409,195420,195422,195501,195547,195556,195558,195587,195620,195635,195669,195687,195693,195710,195713,195716,195756,195760,195768,195777,195789,195792,195804,195827,195843-195844,195877,195887-195888,195897,195903,195905-195906,195932,195936-195943,195970,195983,196045,196048,196050,196058,196114-196115,196153,196206,196215,196370,196387,196423,196454,196459,196488,196532,196538,196658
/cfe/trunk/test:170344
/cfe/trunk/test/SemaTemplate:126920
Modified: cfe/branches/release_34/lib/Sema/SemaDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_34/lib/Sema/SemaDeclCXX.cpp?rev=196670&r1=196669&r2=196670&view=diff
==============================================================================
--- cfe/branches/release_34/lib/Sema/SemaDeclCXX.cpp (original)
+++ cfe/branches/release_34/lib/Sema/SemaDeclCXX.cpp Sat Dec 7 17:53:50 2013
@@ -6175,6 +6175,10 @@ bool Sema::CheckDestructor(CXXDestructor
Context.DeclarationNames.getCXXOperatorName(OO_Delete);
if (FindDeallocationFunction(Loc, RD, Name, OperatorDelete))
return true;
+ // If there's no class-specific operator delete, look up the global
+ // non-array delete.
+ if (!OperatorDelete)
+ OperatorDelete = FindUsualDeallocationFunction(Loc, true, Name);
MarkFunctionReferenced(Loc, OperatorDelete);
Modified: cfe/branches/release_34/lib/Sema/SemaExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_34/lib/Sema/SemaExprCXX.cpp?rev=196670&r1=196669&r2=196670&view=diff
==============================================================================
--- cfe/branches/release_34/lib/Sema/SemaExprCXX.cpp (original)
+++ cfe/branches/release_34/lib/Sema/SemaExprCXX.cpp Sat Dec 7 17:53:50 2013
@@ -2206,8 +2206,7 @@ bool Sema::FindDeallocationFunction(Sour
return true;
}
- // Look for a global declaration.
- Operator = FindUsualDeallocationFunction(StartLoc, true, Name);
+ Operator = 0;
return false;
}
@@ -2357,7 +2356,7 @@ Sema::ActOnCXXDelete(SourceLocation Star
// Otherwise, the usual operator delete[] should be the
// function we just found.
- else if (isa<CXXMethodDecl>(OperatorDelete))
+ else if (OperatorDelete && isa<CXXMethodDecl>(OperatorDelete))
UsualArrayDeleteWantsSize = (OperatorDelete->getNumParams() == 2);
}
Modified: cfe/branches/release_34/test/CodeGenCXX/cxx1y-sized-deallocation.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_34/test/CodeGenCXX/cxx1y-sized-deallocation.cpp?rev=196670&r1=196669&r2=196670&view=diff
==============================================================================
--- cfe/branches/release_34/test/CodeGenCXX/cxx1y-sized-deallocation.cpp (original)
+++ cfe/branches/release_34/test/CodeGenCXX/cxx1y-sized-deallocation.cpp Sat Dec 7 17:53:50 2013
@@ -30,6 +30,8 @@ template<typename T>
void del() {
::delete get<T*>();
::delete[] get<T*>();
+ delete get<T*>();
+ delete[] get<T*>();
}
template void del<A>();
@@ -44,6 +46,9 @@ D::D() {}
// CHECK-LABEL: define weak_odr void @_Z3delIiEvv()
// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 4)
// CHECK: call void @_ZdaPv(i8* %{{[^ ]*}})
+//
+// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 4)
+// CHECK: call void @_ZdaPv(i8* %{{[^ ]*}})
// CHECK-LABEL: define linkonce void @_ZdlPvm(i8*
// CHECK: call void @_ZdlPv(i8* %0)
@@ -51,12 +56,20 @@ D::D() {}
// CHECK-LABEL: define weak_odr void @_Z3delI1BEvv()
// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 4)
// CHECK: call void @_ZdaPv(i8* %{{[^ ]*}})
+//
+// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 4)
+// CHECK: call void @_ZdaPv(i8* %{{[^ ]*}})
// CHECK-LABEL: define weak_odr void @_Z3delI1CEvv()
// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 1)
// CHECK: mul i64 1, %{{[^ ]*}}
// CHECK: add i64 %{{[^ ]*}}, 8
// CHECK: call void @_ZdaPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}})
+//
+// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 1)
+// CHECK: mul i64 1, %{{[^ ]*}}
+// CHECK: add i64 %{{[^ ]*}}, 8
+// CHECK: call void @_ZdaPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}})
// CHECK-LABEL: define linkonce void @_ZdaPvm(i8*
// CHECK: call void @_ZdaPv(i8* %0)
@@ -66,25 +79,32 @@ D::D() {}
// CHECK: mul i64 8, %{{[^ ]*}}
// CHECK: add i64 %{{[^ ]*}}, 8
// CHECK: call void @_ZdaPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}})
+//
+// CHECK-NOT: Zdl
+// CHECK: call void %{{.*}}
+// CHECK-NOT: Zdl
+// CHECK: mul i64 8, %{{[^ ]*}}
+// CHECK: add i64 %{{[^ ]*}}, 8
+// CHECK: call void @_ZdaPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}})
// CHECK-LABEL: define weak_odr void @_Z3delI1EEvv()
// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 1)
// CHECK: call void @_ZdaPv(i8* %{{[^ ]*}})
+//
+// CHECK: call void @_ZN1EdlEPv(i8* %{{[^ ]*}})
+// CHECK: call void @_ZN1EdaEPv(i8* %{{[^ ]*}})
// CHECK-LABEL: define weak_odr void @_Z3delI1FEvv()
// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 1)
// CHECK: mul i64 1, %{{[^ ]*}}
// CHECK: add i64 %{{[^ ]*}}, 8
// CHECK: call void @_ZdaPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}})
+//
+// CHECK: call void @_ZN1FdlEPvm(i8* %{{[^ ]*}}, i64 1)
+// CHECK: mul i64 1, %{{[^ ]*}}
+// CHECK: add i64 %{{[^ ]*}}, 8
+// CHECK: call void @_ZN1FdaEPvm(i8* %{{[^ ]*}}, i64 %{{[^ ]*}})
-// CHECK-LABEL: define void @_Z10member_delv()
-// CHECK-NOT: Zdl
-// CHECK: call void %{{[^ ]*}}(%{{[^ ]*}}* %
-// CHECK-NOT: Zdl
-// CHECK: }
-void member_del() {
- delete get<D*>();
-}
// CHECK-LABEL: define linkonce_odr void @_ZN1DD0Ev(%{{[^ ]*}}* %this)
// CHECK: call void @_ZdlPvm(i8* %{{[^ ]*}}, i64 8)
More information about the llvm-branch-commits
mailing list