diff options
| author | Akira Hatanaka <ahatanaka@apple.com> | 2017-04-15 05:31:35 +0000 |
|---|---|---|
| committer | Akira Hatanaka <ahatanaka@apple.com> | 2017-04-15 05:31:35 +0000 |
| commit | dad52660449aca2ba77e61a06afcc9cb52fd44fd (patch) | |
| tree | d0f5e5aa024219cab367e5f384b166cb985c7e72 /clang/lib/Sema | |
| parent | 2561885f574ce7aedee4d30f3dbc6bfb09d64c06 (diff) | |
| download | bcm5719-llvm-dad52660449aca2ba77e61a06afcc9cb52fd44fd.tar.gz bcm5719-llvm-dad52660449aca2ba77e61a06afcc9cb52fd44fd.zip | |
[ObjC] Use empty Objective-C collection literal constants when
available.
Original patch by Douglas Gregor with minor modifications.
rdar://problem/20689633
llvm-svn: 300389
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 485d012b6e6..d65570fcef7 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -5980,9 +5980,21 @@ ExprResult Sema::MaybeBindToTemporary(Expr *E) { } else if (ObjCBoxedExpr *BoxedExpr = dyn_cast<ObjCBoxedExpr>(E)) { D = BoxedExpr->getBoxingMethod(); } else if (ObjCArrayLiteral *ArrayLit = dyn_cast<ObjCArrayLiteral>(E)) { + // Don't do reclaims if we're using the zero-element array + // constant. + if (ArrayLit->getNumElements() == 0 && + Context.getLangOpts().ObjCRuntime.hasEmptyCollections()) + return E; + D = ArrayLit->getArrayWithObjectsMethod(); } else if (ObjCDictionaryLiteral *DictLit = dyn_cast<ObjCDictionaryLiteral>(E)) { + // Don't do reclaims if we're using the zero-element dictionary + // constant. + if (DictLit->getNumElements() == 0 && + Context.getLangOpts().ObjCRuntime.hasEmptyCollections()) + return E; + D = DictLit->getDictWithObjectsMethod(); } |

