-
Notifications
You must be signed in to change notification settings - Fork 55
Description
Wave is not emitting the line directive if the first line in the included file is a #if or #ifdef that evaluates true and has content in its block. Likewise, it won't emit the line directive if the first line is a #define. This issue only occurs if there are not multiple #define or #if occurring on subsequent lines.
When using default_preprocessing_hooks, the above applies if the #if/#ifdef/#define is the first non-empty line or non-comment line. Essentially, if the directive immediately precedes the first content emitted from the included file. With eat_whitespace, the directive must be on the very first line of the include file to exhibit the issue.
Not sure if I've explained it very well, but I think an example will help better demonstrate the issue.
Example:
a.cpp
#include "if.h"
#include "def.h"
test
if.h
#if 1 //This must be on the first line for eat_whitespace, can be on 2nd, 3rd etc, for default_preprocessing_hooks as long as it's whitespace before it
if_h
#endif
def.h
#define A
def_h
Resulting preprocessed file:
a.preproc
if_h
def_h
Expected output:
#line 2 "if.h"
if_h
#line 2 "def.h"
def_h
As mentioned, the line directives do get emitted correctly if the include file is something like this:
#define A
#define B
content
So it's only occurring when there's a single directive at the beginning.