/* Copyright 2007 Free Software Foundation, Inc. Contributed by Ollie Wild . */ /* { dg-do preprocess } */ /* { dg-options -fdirectives-only } */ /* Tests scan_translation_unit_directives_only()'s handling of corner cases. */ /* Ignore directives inside block comments... #error directive inside block comment */ // Escaped newline doesn't terminate line comment \ #error directive inside line comment /* A comment canot start inside a string. */ const char *c1 = "/*"; #define NOT_IN_COMMENT const char *c2 = "*/"; #ifndef NOT_IN_COMMENT #error Comment started inside a string literal #endif /* Escaped newline handling. */ int i; \ #error ignored escaped newline \ \ #define BOL #ifndef BOL #error escaped newline did not preserve beginning of line #endif /* Handles \\ properly at the end of a string. */ "string ends in \\"/* #error Missed string terminator. */ /* Handles macro expansion in preprocessing directives. */ #define HEADER "dir-only-1.h" #include HEADER #ifndef GOT_HEADER #error Failed to include header. #endif /\ * #define IN_COMMENT */ #ifdef IN_COMMENT #error Escaped newline breaks block comment initiator. #endif /* *\ / #define NOT_IN_COMMENT2 /**/ #ifndef NOT_IN_COMMENT2 #error Escaped newline breaks block comment terminator. #endif /* Test escaped newline inside character escape sequence. */ "\\ \"/* #error Missed string terminator */ /* Block comments don't mask trailing preprocessing directive. */ #define NOT_MASKED #ifndef NOT_MASKED #error Comment masks trailing directive. #endif