[all-commits] [llvm/llvm-project] 3cfdef: [Clang] Fix the for statement disappearing in AST ...
yronglin via All-commits
all-commits at lists.llvm.org
Fri Sep 8 09:48:19 PDT 2023
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 3cfdef37155d1f0e5b32abe7c84e8304ef77ca10
https://github.com/llvm/llvm-project/commit/3cfdef37155d1f0e5b32abe7c84e8304ef77ca10
Author: yronglin <yronglin777 at gmail.com>
Date: 2023-09-09 (Sat, 09 Sep 2023)
Changed paths:
M clang/lib/Parse/ParseStmt.cpp
M clang/test/AST/ast-dump-recovery.cpp
M clang/test/SemaCXX/constexpr-function-recovery-crash.cpp
Log Message:
-----------
[Clang] Fix the for statement disappearing in AST when an error occurs in the conditional expression of the for statement (#65381)
Consider:
```
constexpr int f() {
int sum = 0;
for (int i = 0; undefined_var; ++i) {
sum += i;
}
return sum;
}
static_assert(f());
```
The AST before this patch:
```
|-FunctionDecl <line:1:1, line:7:1> line:1:15 used constexpr f 'int ()' implicit-inline
| `-CompoundStmt <col:19, line:7:1>
| |-DeclStmt <line:2:5, col:16>
| | `-VarDecl <col:5, col:15> col:9 used sum 'int' cinit
| | `-IntegerLiteral <col:15> 'int' 0
| `-ReturnStmt <line:6:5, col:12>
| `-ImplicitCastExpr <col:12> 'int' <LValueToRValue>
| `-DeclRefExpr <col:12> 'int' lvalue Var 0xb870518 'sum' 'int'
```
The AST after this patch:
```
|-FunctionDecl 0x11d0f63f8 <./main.cpp:1:1, line:7:1> line:1:15 used constexpr f 'int ()' implicit-inline
| `-CompoundStmt 0x11d110880 <col:19, line:7:1>
| |-DeclStmt 0x11d0f65c8 <line:2:5, col:16>
| | `-VarDecl 0x11d0f6528 <col:5, col:15> col:9 used sum 'int' cinit
| | `-IntegerLiteral 0x11d0f6590 <col:15> 'int' 0
| |-ForStmt 0x11d110800 <line:3:5, line:5:5>
| | |-DeclStmt 0x11d0f66a0 <line:3:10, col:19>
| | | `-VarDecl 0x11d0f6600 <col:10, col:18> col:14 used i 'int' cinit
| | | `-IntegerLiteral 0x11d0f6668 <col:18> 'int' 0
| | |-<<<NULL>>>
| | |-RecoveryExpr 0x11d0f66e8 <col:21> 'bool' contains-errors
| | |-UnaryOperator 0x11d0f6728 <col:36, col:38> 'int' lvalue prefix '++'
| | | `-DeclRefExpr 0x11d0f6708 <col:38> 'int' lvalue Var 0x11d0f6600 'i' 'int'
| | `-CompoundStmt 0x11d0f67c8 <col:41, line:5:5>
| | `-CompoundAssignOperator 0x11d0f6798 <line:4:9, col:16> 'int' lvalue '+=' ComputeLHSTy='int' ComputeResultTy='int'
| | |-DeclRefExpr 0x11d0f6740 <col:9> 'int' lvalue Var 0x11d0f6528 'sum' 'int'
| | `-ImplicitCastExpr 0x11d0f6780 <col:16> 'int' <LValueToRValue>
| | `-DeclRefExpr 0x11d0f6760 <col:16> 'int' lvalue Var 0x11d0f6600 'i' 'int'
| `-ReturnStmt 0x11d110870 <line:6:5, col:12>
| `-ImplicitCastExpr 0x11d110858 <col:12> 'int' <LValueToRValue>
| `-DeclRefExpr 0x11d110838 <col:12> 'int' lvalue Var 0x11d0f6528 'sum' 'int'
```
---------
Co-authored-by: Shafik Yaghmour <shafik at users.noreply.github.com>
More information about the All-commits
mailing list