16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -fsyntax-only -verify %s
26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
36bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma clang optimize off
46bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
56bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma clang optimize on
66bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
76bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Extra arguments
86bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma clang optimize on top of spaghetti  // expected-error {{unexpected extra argument 'top' to '#pragma clang optimize'}}
96bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Wrong argument
116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma clang optimize something_wrong  // expected-error {{unexpected argument 'something_wrong' to '#pragma clang optimize'; expected 'on' or 'off'}}
126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// No argument
146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma clang optimize // expected-error {{missing argument to '#pragma clang optimize'; expected 'on' or 'off'}}
156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Check that macros can be used in the pragma
176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define OFF off
186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define ON on
196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma clang optimize OFF
206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#pragma clang optimize ON
216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Check that _Pragma can also be used to address the use case where users want
236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// to define optimization control macros to abstract out which compiler they are
246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// using.
256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define OPT_OFF _Pragma("clang optimize off")
266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define OPT_ON _Pragma("clang optimize on")
276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesOPT_OFF
286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesOPT_ON
29