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