xref: /aosp_15_r20/external/clang/test/SemaObjC/format-ostrace-warning.m (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -Wcstring-format-directive -verify -fsyntax-only %s
2*67e74705SXin Li// rdar://19904147
3*67e74705SXin Li
4*67e74705SXin Litypedef __builtin_va_list __darwin_va_list;
5*67e74705SXin Litypedef __builtin_va_list va_list;
6*67e74705SXin Li
7*67e74705SXin Liva_list argList;
8*67e74705SXin Li
9*67e74705SXin Litypedef const struct __CFString * CFStringRef;
10*67e74705SXin Litypedef struct __CFString * CFMutableStringRef;
11*67e74705SXin Litypedef const struct __CFAllocator * CFAllocatorRef;
12*67e74705SXin Li
13*67e74705SXin Li
14*67e74705SXin Litypedef const struct __CFDictionary * CFDictionaryRef;
15*67e74705SXin Li
16*67e74705SXin LiCFStringRef CFSTR ( const char *cStr );
17*67e74705SXin Li
18*67e74705SXin Li
19*67e74705SXin Liextern
20*67e74705SXin LiCFStringRef CStringCreateWithFormat(CFAllocatorRef alloc, CFDictionaryRef formatOptions, const char* format, ...) __attribute__((format(os_trace, 3, 4)));
21*67e74705SXin Li
22*67e74705SXin Liextern
23*67e74705SXin LiCFStringRef CStringCreateWithFormatAndArguments(CFAllocatorRef alloc, CFDictionaryRef formatOptions, const char* format, va_list arguments) __attribute__((format(os_trace, 3, 0)));
24*67e74705SXin Li
25*67e74705SXin Liextern
26*67e74705SXin Livoid CStringAppendFormat(CFMutableStringRef theString, CFDictionaryRef formatOptions, const char* format, ...) __attribute__((format(os_trace, 3, 4)));
27*67e74705SXin Li
28*67e74705SXin Liextern
29*67e74705SXin Livoid CStringAppendFormatAndArguments(CFMutableStringRef theString, CFDictionaryRef formatOptions, const char* format, va_list arguments) __attribute__((format(os_trace, 3, 0)));
30*67e74705SXin Li
31*67e74705SXin Livoid Test1(va_list argList) {
32*67e74705SXin Li  CFAllocatorRef alloc;
33*67e74705SXin Li  CStringCreateWithFormatAndArguments (alloc, 0, "%s\n", argList);
34*67e74705SXin Li  CStringAppendFormatAndArguments ((CFMutableStringRef)@"AAAA", 0, "Hello %s there %d\n", argList);
35*67e74705SXin Li  CStringCreateWithFormatAndArguments (alloc, 0, "%c\n", argList);
36*67e74705SXin Li  CStringAppendFormatAndArguments ((CFMutableStringRef)@"AAAA", 0, "%d\n", argList);
37*67e74705SXin Li}
38*67e74705SXin Li
39*67e74705SXin Liextern void MyOSLog(const char* format, ...) __attribute__((format(os_trace, 1, 2)));
40*67e74705SXin Liextern void MyFStringCreateWithFormat(const char *format, ...) __attribute__((format(os_trace, 1, 2)));
41*67e74705SXin Liextern void XMyOSLog(int, const char* format, ...) __attribute__((format(os_trace, 2, 3)));
42*67e74705SXin Liextern void os_trace(const char *format, ...) __attribute__((format(os_trace, 1, 2)));
43*67e74705SXin Li
44*67e74705SXin Livoid Test2() {
45*67e74705SXin Li  MyOSLog("%s\n", "Hello");
46*67e74705SXin Li
47*67e74705SXin Li  MyFStringCreateWithFormat("%s", "Hello");
48*67e74705SXin Li  XMyOSLog(4, "%s\n", "Hello");
49*67e74705SXin Li
50*67e74705SXin Li  os_trace("testing %@, %s, %d, %@, %m", CFSTR("object"), "string", 3, "it"); // expected-warning {{format specifies type 'id' but the argument has type 'char *'}}
51*67e74705SXin Li
52*67e74705SXin Li  os_trace("testing %@, %s, %d, %@, %m", CFSTR("object"), "string", 3, @"ok");
53*67e74705SXin Li}
54*67e74705SXin Li
55