114e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis// RUN: %clang_cc1 %s -verify -Wconversion
214e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
314e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis// Don't crash (rdar://11168596)
414e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis#define A(desc) _Pragma("clang diagnostic push")  _Pragma("clang diagnostic ignored \"-Wparentheses\"") _Pragma("clang diagnostic pop")
514e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis#define B(desc) A(desc)
614e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios KyrtzidisB(_Pragma("clang diagnostic ignored \"-Wparentheses\""))
714e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
814e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
914e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis#define EMPTY(x)
1014e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis#define INACTIVE(x) EMPTY(x)
1114e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
1214e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis#define ID(x) x
1314e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis#define ACTIVE(x) ID(x)
1414e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
1514e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis// This should be ignored..
1614e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios KyrtzidisINACTIVE(_Pragma("clang diagnostic ignored \"-Wconversion\""))
1714e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
18a06642a3a3a8a9c82d6c636cd3f2c18c4fac66c4Argyrios Kyrtzidis#define IGNORE_CONV _Pragma("clang diagnostic ignored \"-Wconversion\"") _Pragma("clang diagnostic ignored \"-Wconversion\"")
1914e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
2014e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis// ..as should this.
2114e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios KyrtzidisINACTIVE(IGNORE_CONV)
2214e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
2314e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis#define IGNORE_POPPUSH(Pop, Push, W, D) Push W D Pop
2414e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios KyrtzidisIGNORE_POPPUSH(_Pragma("clang diagnostic pop"), _Pragma("clang diagnostic push"),
2514e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis               _Pragma("clang diagnostic ignored \"-Wconversion\""), int q = (double)1.0);
2614e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
2714e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidisint x1 = (double)1.0; // expected-warning {{implicit conversion}}
2814e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
2914e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios KyrtzidisACTIVE(_Pragma) ("clang diagnostic ignored \"-Wconversion\"")) // expected-error {{_Pragma takes a parenthesized string literal}} \
3014e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis                                      expected-error {{expected identifier or '('}} expected-error {{expected ')'}} expected-note {{to match this '('}}
3114e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
3214e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis// This should disable the warning.
3314e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios KyrtzidisACTIVE(IGNORE_CONV)
3414e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidis
3514e645557ae91c6770d62beb00a1c522e0bfd5d6Argyrios Kyrtzidisint x2 = (double)1.0;
36