[clang] 498c7fa - [SemaObjC] Fix a crash on an invalid ternary with ARC pointers
Erik Pilkington via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 13 18:20:41 PDT 2020
Author: Erik Pilkington
Date: 2020-10-13T21:20:20-04:00
New Revision: 498c7fa48a02a5e0c12bbb90ef8c0d8468affcdd
URL: https://github.com/llvm/llvm-project/commit/498c7fa48a02a5e0c12bbb90ef8c0d8468affcdd
DIFF: https://github.com/llvm/llvm-project/commit/498c7fa48a02a5e0c12bbb90ef8c0d8468affcdd.diff
LOG: [SemaObjC] Fix a crash on an invalid ternary with ARC pointers
FindCompositeObjCPointerType nulls out the subexpressions on error, so bail out
instead of trying to deref them.
Added:
Modified:
clang/lib/Sema/SemaExprCXX.cpp
clang/test/SemaObjCXX/arc-type-conversion.mm
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index ed57772cd237..d39820fb483d 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -6325,6 +6325,8 @@ QualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS,
// Similarly, attempt to find composite type of two objective-c pointers.
Composite = FindCompositeObjCPointerType(LHS, RHS, QuestionLoc);
+ if (LHS.isInvalid() || RHS.isInvalid())
+ return QualType();
if (!Composite.isNull())
return Composite;
diff --git a/clang/test/SemaObjCXX/arc-type-conversion.mm b/clang/test/SemaObjCXX/arc-type-conversion.mm
index 1e3790bfa472..e8580cf685b4 100644
--- a/clang/test/SemaObjCXX/arc-type-conversion.mm
+++ b/clang/test/SemaObjCXX/arc-type-conversion.mm
@@ -216,3 +216,10 @@ void ownership_transfer_in_cast(void *vp, Block *pblk) {
// Make sure we don't crash.
void writeback_test(NSString & &) {} // expected-error {{type name declared as a reference to a reference}}
+
+void test_strong_opaque() {
+ __strong NSString *sptr;
+ void *vptr;
+
+ (void)(0 ? sptr : vptr); // expected-error{{operands to conditional of types 'NSString *' and 'void *' are incompatible in ARC mode}}
+}
More information about the cfe-commits
mailing list