[clang] [Clang] Fix stack-use-after-return in TryArrayCopy by allocating OpaqueValueExpr on the ASTContext (PR #192080)
via cfe-commits
cfe-commits at lists.llvm.org
Sat May 2 22:41:41 PDT 2026
TPPPP72 wrote:
For code
```cpp
struct MassiveNode {
int data[100][100];
};
struct Tester {
MassiveNode nodes[50];
Tester() = default;
Tester(const Tester&) = default;
};
#define REPEAT_10(M, ID) M(ID##0) M(ID##1) M(ID##2) M(ID##3) M(ID##4) M(ID##5) M(ID##6) M(ID##7) M(ID##8) M(ID##9)
#define REPEAT_100(M, ID) REPEAT_10(M, ID##0) REPEAT_10(M, ID##1)
#define REPEAT_1000(M, ID) REPEAT_100(M, ID##0) REPEAT_100(M, ID##1)
#define TRIGGER_FUNC(ID) \
Tester trigger_##ID(Tester t) { return t; }
REPEAT_1000(TRIGGER_FUNC, test)
```
```
--------------------------------------------------------------------------------
Command: ./llvm-project/llvm/build/bin/clang-new -c ./stress.cpp -O2
Massif arguments: --stacks=yes --depth=20 --massif-out-file=massif.new
ms_print arguments: massif.new
--------------------------------------------------------------------------------
MB
2.893^ :
| @::::::::@:::::@:::::@::#:::::@::
| @:@::::::::@:::::@:::::@::#:::::@::
| @:@::::::::@:::::@:::::@::#:::::@::
| : @::::@:::: @:@::::::::@:::::@:::::@::#:::::@::
| @:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| @:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| @:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| @:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| @:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| @:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| @:@:::@:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| @@:@:::@:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| :@@:@:::@:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| @@:@@:@:::@:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| @@:@@:@:::@:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| @@:@@:@:::@:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| @@:@@:@:::@:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| ::@@:@@:@:::@:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
| : @@:@@:@:::@:@:@:::@::::@:::::@:@::::::::@:::::@:::::@::#:::::@::
0 +----------------------------------------------------------------------->Mi
0 75.50
Number of snapshots: 99
Detailed snapshots: [8, 9, 10, 12, 13, 16, 20, 22, 24, 28, 34, 42, 44, 58, 68, 78, 84 (peak), 94]
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 0 0 0 0
1 791,233 1,272 0 0 1,272
2 1,734,074 1,496 0 0 1,496
3 2,439,639 1,592 0 0 1,592
4 3,403,811 1,272 0 0 1,272
5 5,613,376 1,272 0 0 1,272
6 6,707,892 173,808 172,518 906 384
7 7,673,340 370,592 344,121 4,847 21,624
8 8,801,718 706,392 652,220 12,268 41,904
```
```
--------------------------------------------------------------------------------
Command: ./llvm-project/llvm/build/bin/clang-old -c ./stress.cpp -O2
Massif arguments: --stacks=yes --depth=20 --massif-out-file=massif.old
ms_print arguments: massif.old
--------------------------------------------------------------------------------
MB
2.895^ :
| @:::::::::::::::::@:::::#::::::@:
| @@::::: :::::::::::@:::::#::::::@:
| @@::::: :::::::::::@:::::#::::::@:
| ::::::::::: @@::::: :::::::::::@:::::#::::::@:
| ::@:: :::::: ::::@@::::: :::::::::::@:::::#::::::@:
| ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| ::::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| : ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| : ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| : ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| @::::::: ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| @@:::: :: ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| @@:::: :: ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| :@@@:::: :: ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| :@@@:::: :: ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| @:@@@:::: :: ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| @:@@@:::: :: ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| @:@@@:::: :: ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
| ::@:@@@:::: :: ::@:: :::::: ::: @@::::: :::::::::::@:::::#::::::@:
0 +----------------------------------------------------------------------->Mi
0 75.47
Number of snapshots: 73
Detailed snapshots: [5, 7, 8, 9, 18, 31, 32, 51, 60 (peak), 70]
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 0 0 0 0
1 1,625,736 1,736 0 0 1,736
2 3,393,184 1,736 0 0 1,736
3 5,613,376 1,272 0 0 1,272
4 7,091,107 237,784 236,079 1,409 296
5 8,802,112 706,392 652,220 12,268 41,904
```
https://github.com/llvm/llvm-project/pull/192080
More information about the cfe-commits
mailing list