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}} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits