[clang] 3513171 - [SemaObjC] Fix composite pointer type calculation for `void*` and pointer to lifetime qualified ObjC pointer type
Erik Pilkington via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 15 12:21:14 PDT 2020
Author: Erik Pilkington
Date: 2020-10-15T15:21:01-04:00
New Revision: 351317167e2b28aad03f8e45e0ed0acbbff18c61
URL: https://github.com/llvm/llvm-project/commit/351317167e2b28aad03f8e45e0ed0acbbff18c61
DIFF: https://github.com/llvm/llvm-project/commit/351317167e2b28aad03f8e45e0ed0acbbff18c61.diff
LOG: [SemaObjC] Fix composite pointer type calculation for `void*` and pointer to lifetime qualified ObjC pointer type
Fixes a regression introduced in 9a6f4d451ca7. rdar://70101809
Differential revision: https://reviews.llvm.org/D89475
Added:
Modified:
clang/lib/Sema/SemaExprCXX.cpp
clang/test/SemaObjCXX/arc-ptr-comparison.mm
Removed:
################################################################################
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index 8d5dccc19726..b96649597274 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -6552,12 +6552,16 @@ QualType Sema::FindCompositePointerType(SourceLocation Loc,
// FIXME: In C, we merge __strong and none to __strong at the top level.
if (Q1.getObjCGCAttr() == Q2.getObjCGCAttr())
Quals.setObjCGCAttr(Q1.getObjCGCAttr());
+ else if (T1->isVoidPointerType() || T2->isVoidPointerType())
+ assert(Steps.size() == 1);
else
return QualType();
// Mismatched lifetime qualifiers never compatibly include each other.
if (Q1.getObjCLifetime() == Q2.getObjCLifetime())
Quals.setObjCLifetime(Q1.getObjCLifetime());
+ else if (T1->isVoidPointerType() || T2->isVoidPointerType())
+ assert(Steps.size() == 1);
else
return QualType();
diff --git a/clang/test/SemaObjCXX/arc-ptr-comparison.mm b/clang/test/SemaObjCXX/arc-ptr-comparison.mm
index b3af26c1f847..0ea66c6643bd 100644
--- a/clang/test/SemaObjCXX/arc-ptr-comparison.mm
+++ b/clang/test/SemaObjCXX/arc-ptr-comparison.mm
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-arc -verify %s
+// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin11 -fsyntax-only -fobjc-runtime-has-weak -fobjc-arc -verify %s
// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin11 -fsyntax-only -verify -DNOARC %s
#ifdef NOARC
// expected-no-diagnostics
@@ -51,3 +51,17 @@ int testMixedQualComparisonRules(void *v, const void *cv, A *a, const A *ca) {
return a == cv;
return ca == v;
}
+
+#ifndef NOARC
+int testDoublePtr(void *pv, void **ppv, A *__strong* pspa, A *__weak* pwpa, A *__strong** ppspa) {
+ return pv == pspa;
+ return pspa == pv;
+ return pv == pspa;
+ return pv == pwpa;
+ return pspa == pwpa; // expected-error {{comparison of distinct pointer types}}
+ return ppv == pspa; // expected-error {{comparison of distinct pointer types}}
+ return pspa == ppv; // expected-error {{comparison of distinct pointer types}}
+ return pv == ppspa;
+ return ppv == ppspa; // expected-error{{comparison of distinct pointer types}}
+}
+#endif
More information about the cfe-commits
mailing list