Skip to content

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

Closed
cplusplus/draft
#7458
@t3nsor

Description

@t3nsor

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. [...]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions