llvm-project/clang/test/CodeGenObjC/debug-info-block-line.m
Douglas Katzman 3459ce2e5e Stop messing with the 'g' group of options in CompilerInvocation.
With this change, most 'g' options are rejected by CompilerInvocation.
They remain only as Driver options. The new way to request debug info
from cc1 is with "-debug-info-kind={line-tables-only|limited|standalone}"
and "-dwarf-version={2|3|4}". In the absence of a command-line option
to specify Dwarf version, the Toolchain decides it, rather than placing
Toolchain-specific logic in CompilerInvocation.

Also fix a bug in the Windows compatibility argument parsing
in which the "rightmost argument wins" principle failed.

Differential Revision: http://reviews.llvm.org/D13221

llvm-svn: 249655
2015-10-08 04:24:12 +00:00

93 lines
3.0 KiB
Objective-C

// REQUIRES: x86-registered-target
// RUN: %clang_cc1 -emit-llvm -fblocks -fobjc-arc -debug-info-kind=limited -triple x86_64-apple-darwin10 %s -o - | FileCheck %s
// rdar://11562117
typedef unsigned int NSUInteger;
typedef long NSInteger;
typedef signed char BOOL;
#define nil ((void*) 0)
#define YES ((BOOL)1)
#define NO ((BOOL)0)
@interface NSObject
- (id)init;
@end
@interface NSError : NSObject
@end
@interface NSString : NSObject
@end
@interface NSString (NSStringExtensionMethods)
- (void)enumerateLinesUsingBlock:(void (^)(NSString *line, BOOL *stop))block;
@end
@interface NSData : NSObject
@end
@interface NSData (ASBase64)
- (NSString *)encodedString:(NSInteger)position;
- (NSData *)compressedData;
@end
typedef void (^TDataCompletionBlock)(NSData *data, NSError *error);
@interface TMap : NSObject
- (NSString *)identifier;
- (NSString *)name;
+ (TMap *)mapForID:(NSString *)identifier;
- (void)dataWithCompletionBlock:(TDataCompletionBlock)block;
@end
typedef enum : NSUInteger {
TOK = 100,
TError = 125,
} TResponseCode;
@interface TConnection : NSObject
- (void)sendString:(NSString *)string;
- (void)sendFormat:(NSString *)format, ...;
- (void)sendResponseCode:(TResponseCode)responseCode dataFollows:(BOOL)flag
format:(NSString *)format, ...;
@end
@interface TServer : NSObject
@end
@implementation TServer
- (void)serverConnection:(TConnection *)connection getCommand:(NSString *)str
{
NSString *mapID = nil;
TMap *map = [TMap mapForID:mapID];
// Make sure we do not map code generated for the block to the above line.
// CHECK: define internal void @"__39-[TServer serverConnection:getCommand:]_block_invoke"
// CHECK: call void @objc_storeStrong(i8** [[ZERO:%.*]], i8* [[ONE:%.*]]) [[NUW:#[0-9]+]]
// CHECK: call void @objc_storeStrong(i8** [[TWO:%.*]], i8* [[THREE:%.*]]) [[NUW]]
// CHECK: call {{.*}}@objc_msgSend{{.*}}, !dbg ![[LINE_ABOVE:[0-9]+]]
// CHECK: getelementptr
// CHECK-NOT: !dbg, ![[LINE_ABOVE]]
// CHECK: bitcast %5** [[TMP:%.*]] to i8**
// CHECK-NOT: !dbg, ![[LINE_ABOVE]]
// CHECK: call void @objc_storeStrong(i8** [[VAL1:%.*]], i8* null) [[NUW]]
// CHECK-NEXT: bitcast %4** [[TMP:%.*]] to i8**
// CHECK-NEXT: call void @objc_storeStrong(i8** [[VAL2:%.*]], i8* null) [[NUW]]
// CHECK-NEXT: ret
// CHECK: attributes [[NUW]] = { nounwind }
[map dataWithCompletionBlock:^(NSData *data, NSError *error) {
if (data) {
NSString *encoded = [[data compressedData] encodedString:18];
[connection sendResponseCode:TOK dataFollows:YES
format:@"Sending \"%@\" (%@)", [map name], [map identifier]];
[encoded enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
[connection sendFormat:@"%@\r\n", line];
}];
[connection sendString:@".\r\n"];
} else {
[connection sendResponseCode:TError dataFollows:NO
format:@"Failed \"%@\" (%@)", [map name], [map identifier]];
}
}];
}
@end