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