Sorry for the delayed response to this. Playing with your example, I found 
another bug:

void test_macro_expansion4() {
#define FOO(X) (int*) X ## L
  int *p = FOO(0);
  // becomes: int *p = nullptr(0);
#undef FOO
}

Not sure if PR15572 will fix this problem entirely but I'll open a bug report 
for this and revisit this after PR15572 is fixed.

Regarding Start/End location coming from different places, I tried:

void foo2() {
#define FOO(X) X ## ULL
  int *p = FOO(N);
#undef FOO
}

And with the http://llvm-reviews.chandlerc.com/D549 patch applied, it seems to 
be working fine. Thanks.


On 2013-03-21, at 6:13 AM, Manuel Klimek 
<[email protected]<mailto:[email protected]>> wrote:

On Wed, Mar 20, 2013 at 5:16 PM, Tareq A. Siraj 
<[email protected]<mailto:[email protected]>> wrote:


================
Comment at: cpp11-migrate/UseNullptr/NullptrActions.cpp:125
@@ +124,3 @@
+    // coming from a macro called NULL.
+    if (SM.isMacroArgExpansion(StartLoc) && SM.isMacroArgExpansion(EndLoc)) {
+      StartLoc = SM.getFileLoc(StartLoc);
----------------
Manuel Klimek wrote:
> I assume we don't care that those can both be true, but start and end can 
> still be produced from different macro expansions? Or do we check that 
> somewhere else?
Can you provide an example for start/end coming from different macro expansions 
in case of ImplicitCastNodes? I don't think we do this check but is it really 
necessary for ImplicitCastNodes? Thanks.

Well, I'm not sure. What about:
#define B(X) X ## .742

void f(int i) {
  f(B(3));
}


--
Tareq A. Siraj
  Software Developer
  SSG/DPD/ECDL/DMP
  Phone: +1 519 772 2577




_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to