]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaObjC/format-strings-objc.m
Updaet clang to 92395.
[FreeBSD/FreeBSD.git] / test / SemaObjC / format-strings-objc.m
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2
3 //===----------------------------------------------------------------------===//
4 // The following code is reduced using delta-debugging from
5 // Foundation.h (Mac OS X).
6 //
7 // It includes the basic definitions for the test cases below.
8 // Not including Foundation.h directly makes this test case both svelt and
9 // portable to non-Mac platforms.
10 //===----------------------------------------------------------------------===//
11
12 typedef signed char BOOL;
13 typedef unsigned int NSUInteger;
14 @class NSString, Protocol;
15 extern void NSLog(NSString *format, ...) __attribute__((format(__NSString__, 1, 2)));
16 typedef struct _NSZone NSZone;
17 @class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator;
18 @protocol NSObject  - (BOOL)isEqual:(id)object; @end
19 @protocol NSCopying  - (id)copyWithZone:(NSZone *)zone; @end
20 @protocol NSMutableCopying  - (id)mutableCopyWithZone:(NSZone *)zone; @end
21 @protocol NSCoding  - (void)encodeWithCoder:(NSCoder *)aCoder; @end
22 @interface NSObject <NSObject> {} @end
23 typedef float CGFloat;
24 @interface NSString : NSObject <NSCopying, NSMutableCopying, NSCoding>    - (NSUInteger)length; @end
25 @interface NSSimpleCString : NSString {} @end
26 @interface NSConstantString : NSSimpleCString @end
27 extern void *_NSConstantStringClassReference;
28
29 typedef const struct __CFString * CFStringRef;
30 extern void CFStringCreateWithFormat(CFStringRef format, ...) __attribute__((format(CFString, 1, 2)));
31
32 //===----------------------------------------------------------------------===//
33 // Test cases.
34 //===----------------------------------------------------------------------===//
35
36 void check_nslog(unsigned k) {
37   NSLog(@"%d%%", k); // no-warning
38   NSLog(@"%s%lb%d", "unix", 10,20); // expected-warning {{lid conversion '%lb'}}
39 }
40
41 // Check type validation
42 extern void NSLog2(int format, ...) __attribute__((format(__NSString__, 1, 2))); // expected-error {{format argument not an NSString}}
43 extern void CFStringCreateWithFormat2(int *format, ...) __attribute__((format(CFString, 1, 2))); // expected-error {{format argument not a CFString}}