// 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()); }