> On Sep 10, 2015, at 12:22 PM, Angel Garcia via cfe-commits 
> <cfe-commits@lists.llvm.org> wrote:
> 
> Hi Argyrios,
> 
> Thank you for your answer. I think that it is pretty clear that we don't 
> really want to allow changes like the one in your example. But my problem is 
> almost the opposite. I have something like this:
> 
> #define MY_MAC(x,y) doSomething(x, y);
> 
> which is used in this way:
> 
> MY_MAC(var1, var1);
> 
> and I want to replace all usages of "var1" to another thing, "var2". Each of 
> the arguments of the macro is used only once, so it should be safe to replace 
> each of them independently and obtain
> 
> MY_MAC(var2, var2);
> 
> But right now what I would obtain is
> 
> MY_MAC(var2, );

That doesn’t seem like a case where the change was rejected but where it was 
misapplied.
Could you provide a reduced test case along with your clang-tidy changes and 
how to invoke it against the test case ?

> 
> They look like different cases to me, even though the threshold is not very 
> clear. Maybe there is a way to allow this transformation, but still disallow 
> yours. Or do you think that this isn't safe? I started working on this hardly 
> a month ago, so I am not totally aware of the risks of these things.
> 
> Angel
> 
> 
> 
> On Thu, Sep 10, 2015 at 9:01 PM, Argyrios Kyrtzidis <kyrtzi...@apple.com 
> <mailto:kyrtzi...@apple.com>> wrote:
> Hi Angel,
> 
> This part of the code is conservative because it is not clear if accepting 
> the change in all the different places where the macro argument is expanded 
> is acceptable or not.
> For a contrived example, let’s say you have this macro definition:
> 
>       #define MY_MAC(x) foo(x) + bar(x)
> 
> and you use it like this:
> 
>       int a = MY_MAC(b);
> 
> which expands to this:
> 
>       int a = foo(b) + bar(b);
> 
> Now suppose you want to find all places where “foo(b)” is used and change it 
> to “foo(b.c)”. You walk the AST and find “foo(b)” from the macro expansion 
> and you change ‘b’ to ‘b.c’. This change will apply to the macro argument:
> 
>       int a = MY_MAC(b.c);
> 
> But this now expands like this:
> 
>       int a = foo(b.c) + bar(b.c)
> 
> And you unintentionally also changed the ‘bar’ call.
> 
> 
> Now, ideally we would keep track of all such changes and if you tried to 
> change the ‘b’ in both “foo(b)” and “bar(b)” we would automatically accept 
> it; but this is a bit complicated.
> In the meantime we could add a ‘knob' to control this behavior. We could have 
> a field in Commit object that you set to true to indicate that it is ok to 
> accept a change in a macro argument that expands in multiple places, and also 
> for convenience add such a knob to EditedSource object for accepting in all 
> commits without needing to set it for each commit separately.
> 
> What do you think ?
> 
>> On Sep 9, 2015, at 6:05 AM, Angel Garcia via cfe-commits 
>> <cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>> wrote:
>> 
>> +cfe-commits
>> 
>> On Tue, Sep 8, 2015 at 6:56 PM, Angel Garcia <angelgar...@google.com 
>> <mailto:angelgar...@google.com>> wrote:
>> Hi Ted,
>> 
>> I was working on a clang-tidy check, and today I discovered that it was 
>> unable to do several replacements in different arguments of the same macro 
>> call. At first, I thought it was a bug, and trying to figure out why this 
>> was happening, I found that the replacements were rejected in 
>> lib/Edit/EditedSource.cpp:46, where there is a comment that says "Trying to 
>> write in a macro argument input that has already been written for another 
>> argument of the same macro". This comment means that this changes are 
>> rejected on purpose.
>> 
>> At the commit history, I saw that you had commited 
>> <http://reviews.llvm.org/rL152141> this code (that's why I am asking you). 
>> Do you think that there is a way around this? I don't really understand why 
>> there is a particular case for the macros here, and understanding it would 
>> help me to decide whether I should give up on trying to make this work, or 
>> try to find a "better" solution.
>> 
>> Thanks and sorry for the inconvenience,
>> Angel
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits 
>> <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits>
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

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

Reply via email to