mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 12:56:08 +00:00

This reverts commit d618f1c3b12effd0c2bdb7d02108d3551f389d3d. This commit wasn't reviewed ahead of time and significant concerns were raised immediately after it landed. According to our developer policy this warrants immediate revert of the commit. https://llvm.org/docs/DeveloperPolicy.html#patch-reversion-policy Differential Revision: https://reviews.llvm.org/D155509
77 lines
2.1 KiB
Objective-C
77 lines
2.1 KiB
Objective-C
// RUN: %clang_cc1 -fblocks -triple x86_64-apple-darwin -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck %s
|
|
// rdar: // 8390455
|
|
|
|
// CHECK: @ArrayRecurs = internal global
|
|
// CHECK: @FUNC.ArrayRecurs = internal global
|
|
// CHECK: @FUNC.ArrayRecurs.1 = internal global
|
|
// CHECK: @FUNC1.ArrayRecurs = internal global
|
|
|
|
@class NSArray;
|
|
|
|
static NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {
|
|
|
|
for(id rawAddress in addresses)
|
|
{
|
|
NSArray *separatedAddresses = ((NSArray*)0);
|
|
separatedAddresses = ArrayRecurs((NSArray *)rawAddress, level+1);
|
|
}
|
|
return (NSArray *)0;
|
|
};
|
|
|
|
extern NSArray *address;
|
|
extern unsigned long level;
|
|
|
|
void FUNC(void)
|
|
{
|
|
ArrayRecurs(address, level);
|
|
|
|
static NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {
|
|
|
|
for(id rawAddress in addresses)
|
|
{
|
|
NSArray *separatedAddresses = ((NSArray*)0);
|
|
separatedAddresses = ArrayRecurs((NSArray *)rawAddress, level+1);
|
|
}
|
|
return (NSArray *)0;
|
|
};
|
|
ArrayRecurs(address, level);
|
|
|
|
if (ArrayRecurs) {
|
|
static NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {
|
|
|
|
for(id rawAddress in addresses)
|
|
{
|
|
NSArray *separatedAddresses = ((NSArray*)0);
|
|
separatedAddresses = ArrayRecurs((NSArray *)rawAddress, level+1);
|
|
}
|
|
return (NSArray *)0;
|
|
};
|
|
ArrayRecurs(address, level);
|
|
}
|
|
}
|
|
|
|
void FUNC2(void) {
|
|
static void (^const block1)(int) = ^(int a){
|
|
if (a--)
|
|
block1(a);
|
|
};
|
|
}
|
|
|
|
// CHECK-LABEL: define{{.*}} void @FUNC2(
|
|
// CHECK: define internal void @_block_invoke{{.*}}(
|
|
// CHECK: call void %{{.*}}(ptr noundef @__block_literal_global{{.*}}, i32 noundef %{{.*}})
|
|
|
|
void FUNC1(void)
|
|
{
|
|
static NSArray *(^ArrayRecurs)(NSArray *addresses, unsigned long level) = ^(NSArray *addresses, unsigned long level) {
|
|
|
|
for(id rawAddress in addresses)
|
|
{
|
|
NSArray *separatedAddresses = ((NSArray*)0);
|
|
separatedAddresses = ArrayRecurs((NSArray *)rawAddress, level+1);
|
|
}
|
|
return (NSArray *)0;
|
|
};
|
|
ArrayRecurs(address, level);
|
|
}
|