1*67e74705SXin Li // RUN: %clang_cc1 -verify -fsyntax-only -Wshadow -Wold-style-cast %s 2*67e74705SXin Li 3*67e74705SXin Li // Test that macro expansions from system headers don't trigger 'syntactic' 4*67e74705SXin Li // warnings that are not actionable. 5*67e74705SXin Li 6*67e74705SXin Li #ifdef IS_SYSHEADER 7*67e74705SXin Li #pragma clang system_header 8*67e74705SXin Li 9*67e74705SXin Li #define SANITY(a) (a / 0) 10*67e74705SXin Li 11*67e74705SXin Li #define SHADOW(a) __extension__({ int v = a; v; }) 12*67e74705SXin Li 13*67e74705SXin Li #define OLD_STYLE_CAST(a) ((int) (a)) 14*67e74705SXin Li 15*67e74705SXin Li #else 16*67e74705SXin Li 17*67e74705SXin Li #define IS_SYSHEADER 18*67e74705SXin Li #include __FILE__ 19*67e74705SXin Li testSanity()20*67e74705SXin Livoid testSanity() { 21*67e74705SXin Li // Validate that the test is set up correctly 22*67e74705SXin Li int i = SANITY(0); // expected-warning {{division by zero is undefined}} 23*67e74705SXin Li } 24*67e74705SXin Li PR16093()25*67e74705SXin Livoid PR16093() { 26*67e74705SXin Li // no -Wshadow in system macro expansion 27*67e74705SXin Li int i = SHADOW(SHADOW(1)); 28*67e74705SXin Li } 29*67e74705SXin Li PR18147()30*67e74705SXin Livoid PR18147() { 31*67e74705SXin Li // no -Wold_style_cast in system macro expansion 32*67e74705SXin Li int i = OLD_STYLE_CAST(0); 33*67e74705SXin Li } 34*67e74705SXin Li 35*67e74705SXin Li #endif 36