]> granicus.if.org Git - clang/commitdiff
objective-C blocks: Check for record type when deciding if
authorFariborz Jahanian <fjahanian@apple.com>
Tue, 11 Dec 2012 19:58:01 +0000 (19:58 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Tue, 11 Dec 2012 19:58:01 +0000 (19:58 +0000)
byref variable requires extended layout info. to prevent
a crash involving arrays declared __block. // rdar://12787751

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169908 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp
test/CodeGenObjC/block-byref-variable-layout.m

index 44f13b6906f7a783831d5fd81aa8ed3eca4f9f74..f3fa13584de4f5cd703f201659db22da9f578ee5 100644 (file)
@@ -4413,7 +4413,7 @@ bool ASTContext::getByrefLifetime(QualType Ty,
     return false;
   
   HasByrefExtendedLayout = false;
-  if (Ty->isAggregateType()) {
+  if (Ty->isRecordType()) {
     HasByrefExtendedLayout = true;
     LifeTime = Qualifiers::OCL_None;
   }
index 6030661af4dc2150851a549642caf889ad57cedb..9c8f6743be3da2412be0b9da7884af511d97d7e2 100644 (file)
@@ -40,3 +40,10 @@ int main() {
   };
   c();
 }
+
+// rdar://12787751
+typedef char mds_path_t[1024];
+void directVolumePerfWaitForStoreState()
+{
+ __block mds_path_t path;
+}