87 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| // RUN: cp %s %t
 | |
| // RUN: %clang_cc1 -triple x86_64-apple-darwin9 -fsyntax-only -fblocks -Wformat -fixit %t
 | |
| // RUN: grep -v CHECK %t | FileCheck %s
 | |
| 
 | |
| /* This is a test of code modifications created by darwin format fix-its hints 
 | |
|    that are provided as part of warning */
 | |
| 
 | |
| int printf(const char * restrict, ...);
 | |
| 
 | |
| #if __LP64__
 | |
| typedef long CFIndex;
 | |
| typedef long NSInteger;
 | |
| typedef unsigned long NSUInteger;
 | |
| #else
 | |
| typedef int CFIndex;
 | |
| typedef int NSInteger;
 | |
| typedef unsigned int NSUInteger;
 | |
| #endif
 | |
| CFIndex getCFIndex();
 | |
| NSInteger getNSInteger();
 | |
| NSUInteger getNSUInteger();
 | |
| 
 | |
| #define Log1(...) \
 | |
| do { \
 | |
|   printf(__VA_ARGS__); \
 | |
| } while (0)
 | |
| 
 | |
| #define Log2(...) \
 | |
| do { \
 | |
|   printf(__VA_ARGS__); \
 | |
|   printf(__VA_ARGS__); \
 | |
| } while (0) \
 | |
| 
 | |
| #define Log3(X, Y, Z) \
 | |
| do { \
 | |
|   printf(X, Y); \
 | |
|   printf(X, Z); \
 | |
| } while (0) \
 | |
| 
 | |
| void test() {
 | |
|   printf("test 1: %s", getNSInteger()); 
 | |
|   // CHECK: printf("test 1: %ld", (long)getNSInteger());
 | |
|   printf("test 2: %s %s", getNSInteger(), getNSInteger());
 | |
|   // CHECK: printf("test 2: %ld %ld", (long)getNSInteger(), (long)getNSInteger());
 | |
|   
 | |
|   Log1("test 3: %s", getNSInteger());
 | |
|   // CHECK: Log1("test 3: %ld", (long)getNSInteger());
 | |
|   Log1("test 4: %s %s", getNSInteger(), getNSInteger());
 | |
|   // CHECK: Log1("test 4: %ld %ld", (long)getNSInteger(), (long)getNSInteger());
 | |
|   
 | |
|   Log2("test 5: %s", getNSInteger());
 | |
|   // CHECK: Log2("test 5: %ld", (long)getNSInteger()); 
 | |
|   Log2("test 6: %s %s", getNSInteger(), getNSInteger());
 | |
|   // CHECK: Log2("test 6: %ld %ld", (long)getNSInteger(), (long)getNSInteger());
 | |
|   
 | |
|   // Artificial test to check that X (in Log3(X, Y, Z))
 | |
|   // is modified only according to the diagnostics
 | |
|   // for the first printf and the modification caused 
 | |
|   // by the second printf is dropped.
 | |
|   Log3("test 7: %s", getNSInteger(), getNSUInteger());
 | |
|   // CHECK: Log3("test 7: %ld", (long)getNSInteger(), (unsigned long)getNSUInteger());
 | |
| }
 | |
| 
 | |
| #define Outer1(...) \
 | |
| do { \
 | |
|   printf(__VA_ARGS__); \
 | |
| } while (0)
 | |
| 
 | |
| #define Outer2(...) \
 | |
| do { \
 | |
|   Outer1(__VA_ARGS__); Outer1(__VA_ARGS__); \
 | |
| } while (0)
 | |
| 
 | |
| void bug33447() {
 | |
|   Outer2("test 8: %s", getNSInteger());  
 | |
|   // CHECK: Outer2("test 8: %ld", (long)getNSInteger());
 | |
|   Outer2("test 9: %s %s", getNSInteger(), getNSInteger());
 | |
|   // CHECK: Outer2("test 9: %ld %ld", (long)getNSInteger(), (long)getNSInteger());
 | |
| }
 | |
| 
 | |
| void testCFIndex() {
 | |
|   printf("test 10: %s", getCFIndex()); 
 | |
|   // CHECK: printf("test 10: %ld", (long)getCFIndex());
 | |
|   printf("test 11: %s %s", getCFIndex(), getCFIndex());
 | |
|   // CHECK: printf("test 11: %ld %ld", (long)getCFIndex(), (long)getCFIndex());
 | |
| }
 |