http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52998
--- Comment #2 from Manuel López-Ibáñez <manu at gcc dot gnu.org> 2012-04-15 20:37:44 UTC --- (In reply to comment #1) > I think with and without macro expansion, the error should be given at 13:3, > and unwind from outermost to innermost. Innermost to outermost makes sense if > we show preprocessed lines: > > macro-caret.c:5:14: error: invalid operands to binary << (have ‘double’ and > ‘int’) > 1.0 << 1 > ^ But with preprocessed source lines, the best location is 5:14, because this way the user can compare what is in that line with the preprocessed line shown by GCC. So, in some sense, cc1 is right, and cc1plus is wrong.