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

Ulrich Thomas Gabor via cfe-dev cfe-dev at lists.llvm.org
Wed Mar 27 15:54:35 PDT 2019


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!


Best
Ulrich


> Best,
> Bruno
>
>> _______________________________________________
>> cfe-dev mailing list
>> 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
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>





More information about the cfe-dev mailing list