diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2011-07-27 18:54:57 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2011-07-27 18:54:57 +0000 |
| commit | b2f3695e9aba23380b1556743f975ac6a0650af1 (patch) | |
| tree | b61044d8eed882978f2b6d9f5009d3e770e03a97 /clang/lib/CodeGen | |
| parent | 8b77fe75af4b50e4b050e52d10e68afce3a32eee (diff) | |
| download | bcm5719-llvm-b2f3695e9aba23380b1556743f975ac6a0650af1.tar.gz bcm5719-llvm-b2f3695e9aba23380b1556743f975ac6a0650af1.zip | |
Make CodeGen for array delete involving incomplete class work without crashing. Should fix regression on g++.dg/init/delete1.C.
llvm-svn: 136241
Diffstat (limited to 'clang/lib/CodeGen')
| -rw-r--r-- | clang/lib/CodeGen/ItaniumCXXABI.cpp | 22 |
1 files changed, 1 insertions, 21 deletions
diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp index db891db22b5..4a10f9ccad7 100644 --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -829,27 +829,7 @@ bool ItaniumCXXABI::NeedsArrayCookie(const CXXDeleteExpr *expr, if (expr->doesUsualArrayDeleteWantSize()) return true; - // Automatic Reference Counting: - // We need an array cookie for pointers with strong or weak lifetime. - if (getContext().getLangOptions().ObjCAutoRefCount && - elementType->isObjCLifetimeType()) { - switch (elementType.getObjCLifetime()) { - case Qualifiers::OCL_None: - case Qualifiers::OCL_ExplicitNone: - case Qualifiers::OCL_Autoreleasing: - return false; - - case Qualifiers::OCL_Strong: - case Qualifiers::OCL_Weak: - return true; - } - } - - // Otherwise, if the class has a non-trivial destructor, it always - // needs a cookie. - const CXXRecordDecl *record = - elementType->getBaseElementTypeUnsafe()->getAsCXXRecordDecl(); - return (record && !record->hasTrivialDestructor()); + return elementType.isDestructedType(); } CharUnits ItaniumCXXABI::GetArrayCookieSize(const CXXNewExpr *expr) { |

