51 lines · c
1// RUN: %clang_cc1 -Wfinal-macro %s -fsyntax-only -isystem %S/Inputs -verify2 3// Test warning production4#define Foo 15// expected-note@+1 4{{macro marked 'final' here}}6#pragma clang final(Foo)7 8// expected-warning@+2{{macro 'Foo' has been marked as final and should not be redefined}}9// expected-note@+1{{previous definition is here}}10#define Foo 111 12// expected-warning@+2{{macro 'Foo' has been marked as final and should not be redefined}}13// expected-warning@+1{{'Foo' macro redefined}}14#define Foo 215 16// expected-warning@+1{{redefining builtin macro}}17#define __TIME__ 118 19// expected-warning@+1{{undefining builtin macro}}20#undef __TIMESTAMP__21 22// expected-warning@+1{{macro 'Foo' has been marked as final and should not be undefined}}23#undef Foo24// expected-warning@+1{{macro 'Foo' has been marked as final and should not be redefined}}25#define Foo 326 27// Test parse errors28// expected-error@+1{{expected (}}29#pragma clang final30 31// expected-error@+1{{expected )}}32#pragma clang final(Foo33 34// expected-error@+1{{no macro named 'Baz'}}35#pragma clang final(Baz)36 37// expected-error@+1{{expected identifier}}38#pragma clang final(4)39 40// expected-error@+1{{expected (}}41#pragma clang final Baz42 43// no diagnostics triggered by these pragmas.44#pragma clang deprecated(Foo)45#pragma clang restrict_expansion(Foo)46 47#define SYSTEM_MACRO Woah48// expected-note@+1 2{{macro marked 'final' here}}49#pragma clang final(SYSTEM_MACRO)50#include <final-macro-system.h>51