[cfe-dev] ifStmt::getThen() returns ifStmt again?

Artem Dergachev via cfe-dev cfe-dev at lists.llvm.org
Fri Mar 29 16:10:34 PDT 2019


I think people rarely make this mistake because most of the time 
statements are passed by pointers rather than by references.

On 3/28/19 12:57 AM, Ulrich Thomas Gabor via cfe-dev wrote:
> Hi
>
>> Am 27.03.2019 um 23:54 schrieb Ulrich Thomas Gabor via cfe-dev 
>> <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>>:
>>
>> Hi
>>
>>> On 27/03/2019 19:10, Ulrich Thomas Gabor via cfe-dev wrote:
>>>> Hi
>>>>
>>>> I recently started to test the current master
>>>> https://github.com/llvm/llvm-project/commit/e04483ee35ba28c089cbbcec97a96b67ce0a035e
>>>>
>>>> and found that ifStmt::getThen() now returns the ifStmt itself like in
>>>> the
>>>> following code where both dump calls give the same output:
>>>>
>>>> stmt.dump(dbgs());
>>>> const IfStmt ifS = cast<IfStmt>(stmt);
>>>> auto x = ifS.getThen();
>>>> x->dump(dbgs());
>>>>
>>>> The AST was generated for a simple program:
>>>>
>>>> int main(int argc, char ** argv) {
>>>> int a = 0;
>>>> if (true) {
>>>> a = 10;
>>>> }
>>>> return a;
>>>> }
>>>>
>>>>
>>>> This was not the case for LLVM 8, previously the a=10 stmt was 
>>>> returned.
>>>> Should it be that way or am I doing something wrong?
>>>>
>>>> Best
>>>> Ulrich
>>>>
>>>
>>> I cannot reproduce this with a recent clang (and if IfStmt::getThen
>>> returned the
>>> IfStmt itself, clang would be hopelessly broken). If you look at the
>>> implementation of
>>> IfStmt::getThen in AST/Stmt.h you can see that it returns the then
>>> statement, which
>>> is stored as a trailing object.
>>
>> Thank you for checking.
>>
>> I casted wrong...
>>
>>  const IfStmt ifS = cast<IfStmt>(stmt);
>>
>> should be
>>
>>  const IfStmt &ifS = cast<IfStmt>(stmt);
>>
>> Working now! Thanks!
>
> Thought about it again and was wondering, should copying not create 
> either a fully-functional object or be disallowed, i.e. have a deleted 
> copy constructor?
>
> Best
> Ulrich
>
>
>>
>>
>> Best
>> Ulrich
>>
>>
>>> Best,
>>> Bruno
>>>
>>>> _______________________________________________
>>>> cfe-dev mailing list
>>>> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>>
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>
>>
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
> --
> Ulrich Thomas Gabor, M.Sc.
> Technische Universität Dortmund
> Informatik, Lehrstuhl 12
> Otto-Hahn-Str. 16, E09
> 44227 Dortmund, Germany
>
> Phone:  +49 231 / 755-6263
> Fax:    +49 231 / 755-6116
> http://ess.cs.tu-dortmund.de/~ug
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20190329/2cc49ccd/attachment.html>


More information about the cfe-dev mailing list