Jordan Rose 864b810739 Preprocessor: don't consider // to be a line comment in -E -std=c89 mode.
It's beneficial when compiling to treat // as the start of a line
comment even in -std=c89 mode, since it's not valid C code (with a few
rare exceptions) and is usually intended as such. We emit a pedantic
warning and then continue on as if line comments were enabled.
This has been our behavior for quite some time.

However, people use the preprocessor for things besides C source files.
In today's prompting example, the input contains (unquoted) URLs, which
contain // but should still be preserved.

This change instructs the lexer to treat // as a plain token if Clang is
in C90 mode and generating preprocessed output rather than actually compiling.

<rdar://problem/13338743>

llvm-svn: 176526
2013-03-05 22:51:04 +00:00

16 lines
497 B
C

/* RUN: %clang_cc1 %s -std=c89 -Eonly -verify -pedantic-errors
* RUN: %clang_cc1 %s -std=c89 -E | FileCheck %s
*/
/* PR3919 */
#define foo`bar /* expected-error {{whitespace required after macro name}} */
#define foo2!bar /* expected-warning {{whitespace recommended after macro name}} */
#define foo3$bar /* expected-error {{'$' in identifier}} */
/* CHECK-NOT: this comment should be missing
* CHECK: {{^}}// this comment should be present{{$}}
*/
// this comment should be present