cplusplus / CWG

Core Working Group
24 stars 7 forks source link

CWG2937 [lex.phases] Grammar for preprocessing-file has no normative effect #615

Open t3nsor opened 2 months ago

t3nsor commented 2 months ago

Full name of submitter: Brian Bi

Reference (section label): [lex.phases]

Issue description: [cpp.pre] defines the grammar production preprocessing-file but nothing in the standard specifies that a translation unit is ill-formed if it fails to match that grammar. Similarly, translation-unit has no normative effect.

Suggested resolution: Edit [lex.phases]/1.4:

The source file is analyzed as a preprocessing-file ([cpp.pre]). Preprocessing directives are executed, macro invocations are expanded, and _Pragma unary operator expressions are executed. A #include preprocessing directive causes the named header or source file to be processed from phase 1 through phase 4, recursively. All preprocessing directives are then deleted.

Edit [lex.phases]/1.7:

Whitespace characters separating tokens are no longer significant. Each preprocessing token is converted into a token ([lex.token]). The resulting tokens constitute a translation unit and are syntactically and semantically analyzed as a translation-unit ([basic.link]) and translated. [...]

jensmaurer commented 1 month ago

CWG2937