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