thakis marked 2 inline comments as done.
thakis added a comment.

Thanks!



================
Comment at: clang/lib/Lex/PPMacroExpansion.cpp:497
+
     Args = ReadMacroCallArgumentList(Identifier, MI, ExpansionEnd);
 
----------------
rnk wrote:
> thakis wrote:
> > rnk wrote:
> > > Can this re-enter, something like:
> > >   MACRO1(MACRO2(a1), MACRO3(
> > >   #include "asdf"
> > >   )
> > > In this case, I think your diagnostic might do a null-deref. Maybe just 
> > > add this test case and add a null test for it.
> > This works fine:
> > 
> > ```
> > #define MACRO1(a, b, c)
> > #define MACRO2(a, b, c)
> > #define MACRO3(a, b, c)
> > 
> > MACRO1(MACRO2(a1), MACRO3(
> > #include "asdf"
> > )
> > 
> > $ out/gn/bin/clang -c test.cc
> > test.cc:30:2: error: embedding a #include directive within macro arguments 
> > is not supported
> > #include "asdf"
> >  ^
> > test.cc:29:1: note: expansion of macro 'MACRO1' requested here
> > MACRO1(MACRO2(a1), MACRO3(
> > ^
> > test.cc:29:1: error: unterminated function-like macro invocation
> > MACRO1(MACRO2(a1), MACRO3(
> > ^
> > test.cc:25:9: note: macro 'MACRO1' defined here
> > #define MACRO1(a, b, c)
> >         ^
> > 2 errors generated.
> > ```
> > 
> > Note that the diag is only emitted if inMacroArgs is true, and ArgMacro is 
> > always set to non-nullptr exactly when that's true.
> > 
> > 
> Right, so even if it could re-enter (sequence being "enter, enter, leave, 
> directive, enter, leave, leave", we wouldn't emit this diagnostic, because 
> InMacroArgs will be false.
Since we don't have a stack of InMacroArgs, it looks like this always peels 
away the leftmost macro call, so enter is always followed by leave, and there's 
no enter/enter sequence. (I might be wrong.)


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D58161/new/

https://reviews.llvm.org/D58161



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to