https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61412

--- Comment #5 from Matt Godbolt <matt at godbolt dot org> ---
I produced the file by preprocessing an existing file with g++ -E on an
existing file that exhibited the file (250k+ lines).

The full line I used to create the original preprocessed file is:
$ g++ -c -std=gnu++1y -ggdb3 -Wall -Wextra -Werror -fdiagnostics-show-option
-Wno-unused-local-typedefs -DBOOST_ASIO_DISABLE_EVENTFD -DBOOST_OKAY
-march=core2 -Isrc -isystem include -O3 -DNDEBUG -DBOOST_ASIO_DISABLE_ASSERTS
-DBOOST_DISABLE_ASSERTS -MMD -MP -MFout/main/helix/HelixRegressionModule.d -MT
out/main/helix/HelixRegressionModule.o
-MTout/main/helix/HelixRegressionModule.d -E
src/helix/HelixRegressionModule.cpp

That 250K+ file also exhibits the problem: that is, the warning is suppressed
even within the main body of the file. I then whittled down the preprocessed
file to just those two lines. In the original file the "# ..." line came from
the middle of a macro expansion defined by a header included via an -isystem
path. The filename in the "# " line refers to the C++ file though in both
cases.

The macro is a LOG4CPLUS macro and it expands in the original file to:

        if (numSkipped)
            do { if((L).isEnabledFor(log4cplus::WARN_LOG_LEVEL)) {
log4cplus::tostringstream _log4cplus_buf; _log4cplus_buf << "Skipped " <<
numSkipped << " orders due to juncture mismatches, erf target=" << juncture <<
" hdf5 epoch now=" << (row < numRows? records[row].epoch:0);
(L).forcedLog(log4cplus::WARN_LOG_LEVEL, _log4cplus_buf.str(),


 "src/helix/HelixRegressionModule.cpp"
# 88 "src/helix/HelixRegressionModule.cpp" 3 4
            ,


 91
# 88 "src/helix/HelixRegressionModule.cpp" 3 4
            ); } } while (0)


                                                             ;

where line 88 of the original file is:
        if (numSkipped)
            LOG4CPLUS_WARN(L, "Skipped " << numSkipped
                    << " orders due to juncture mismatches, erf target="
                    << juncture << " hdf5 epoch now="
                    << (row < numRows? records[row].epoch:0));


I had not previously encountered the "#" directive with trailing numbers so it
aroused my suspicion. That made me hone in on it and discover that just the "#"
directive alone is enough to seemingly convince GCC that what follows is a
system header.

Reply via email to