1b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth/* Test pragma message directive from 2b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth http://msdn.microsoft.com/en-us/library/x7dkzch2.aspx */ 3b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth 4b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth// message: Sends a string literal to the standard output without terminating 5b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth// the compilation. 6b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth// #pragma message(messagestring) 7b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth// OR 8b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth// #pragma message messagestring 9b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth// 1013d7dc04f3ae095c195446376df54fb2c8d4aeadArgyrios Kyrtzidis// RUN: %clang_cc1 -fsyntax-only -verify -Werror %s 11b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth#define STRING2(x) #x 12b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth#define STRING(x) STRING2(x) 13b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth#pragma message(":O I'm a message! " STRING(__LINE__)) // expected-warning {{:O I'm a message! 13}} 14b6448943ba1fe01be7cd658437dacae9d2fee8a8Chandler Carruth#pragma message ":O gcc accepts this! " STRING(__LINE__) // expected-warning {{:O gcc accepts this! 14}} 1597f8461a2c553f68a258612d2322e4281c3f0915Andy Gibbs 1697f8461a2c553f68a258612d2322e4281c3f0915Andy Gibbs#pragma message(invalid) // expected-error {{expected string literal in pragma message}} 17076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs 18076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs// GCC supports a similar pragma, #pragma GCC warning (which generates a warning 19076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs// message) and #pragma GCC error (which generates an error message). 20076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs 21076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs#pragma GCC warning(":O I'm a message! " STRING(__LINE__)) // expected-warning {{:O I'm a message! 21}} 22076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs#pragma GCC warning ":O gcc accepts this! " STRING(__LINE__) // expected-warning {{:O gcc accepts this! 22}} 23076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs 24076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs#pragma GCC error(":O I'm a message! " STRING(__LINE__)) // expected-error {{:O I'm a message! 24}} 25076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs#pragma GCC error ":O gcc accepts this! " STRING(__LINE__) // expected-error {{:O gcc accepts this! 25}} 26076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs 27076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs#define COMPILE_ERROR(x) _Pragma(STRING2(GCC error(x))) 28076eea20b80024fc63bbd71fb019375983680ea6Andy GibbsCOMPILE_ERROR("Compile error at line " STRING(__LINE__) "!"); // expected-error {{Compile error at line 28!}} 29076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs 30076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs#pragma message // expected-error {{pragma message requires parenthesized string}} 31076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs#pragma GCC warning("" // expected-error {{pragma warning requires parenthesized string}} 32076eea20b80024fc63bbd71fb019375983680ea6Andy Gibbs#pragma GCC error(1) // expected-error {{expected string literal in pragma error}} 33