[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 23:54:07 PDT 2026
TPPPP72 wrote:
@AaronBallman
Test on `sqlite`
```
--------------------------------------------------------------------------------
Command: ./llvm-project/llvm/build/bin/clang-old -c ./sqlite-amalgamation-3530000/sqlite3.c -O2
Massif arguments: --stacks=yes --depth=20 --massif-out-file=massif.old
ms_print arguments: massif.old
--------------------------------------------------------------------------------
MB
88.98^ #
| @@ @ @@ #
| @ : : @:: @ : :::@:::::::#
| @ :::@@@:: :@ : ::::::@:::::::#
| @ : @::::::::@ @:: :: :@ :::::@::::::@:::::::#
| @ : ::@::: ::::@ @::::::::: : ::::::@ ::: :@::::::@:::::::#
| @ : ::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
| @ :: ::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
| @ :: ::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
| @ ::@@:::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
| @ ::@ :::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
| @ ::@ :::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
| @ ::@ :::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
| @ ::@ :::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
| @ ::@ :::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
| @@@ ::@ :::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
|@@ @ ::@ :::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
|@@ @ ::@ :::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
|@@ @ ::@ :::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
|@@ @ ::@ :::::::@::@::: ::::@ @:::::: :: :::: :::@ ::: :@::::::@:::::::#
0 +----------------------------------------------------------------------->Gi
0 64.65
Number of snapshots: 74
Detailed snapshots: [1, 2, 3, 4, 7, 15, 19, 27, 28, 45, 51, 61, 71, 73 (peak)]
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 0 0 0 0
1 924,908,989 19,056,504 18,850,990 135,754 69,760
```
```
--------------------------------------------------------------------------------
Command: ./llvm-project/llvm/build/bin/clang-new -c ./sqlite-amalgamation-3530000/sqlite3.c -O2
Massif arguments: --stacks=yes --depth=20 --massif-out-file=massif.new
ms_print arguments: massif.new
--------------------------------------------------------------------------------
MB
88.98^ #
| @ @ #
| ::: @::: @ :: ::@:::::#
| : :::@: : :@ :::@::::::@:::::#
| :::::@: :: @: : ::@:::@@:::@::::::@:::::#
| ::: :: @: :: @: ::::::: : :@@:::@:: @ :::@::::::@:::::#
| : ::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| @::: ::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| @::: ::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| @::: ::::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| @:::@::::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| @:::@::::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| @:::@::::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| @:::@::::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| ::@:::@::::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| : @:::@::::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| @ @:::@::::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| @ @:::@::::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| @ @:::@::::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
| @ @:::@::::::@::::: :: @: :: @: :::: : @:::@ :::@:: @ :::@::::::@:::::#
0 +----------------------------------------------------------------------->Gi
0 64.65
Number of snapshots: 71
Detailed snapshots: [1, 3, 7, 14, 22, 26, 34, 38, 42, 46, 50, 60, 70 (peak)]
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 0 0 0 0
1 1,121,269,254 21,627,304 21,357,911 194,721 74,672
```
Test on this 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) REPEAT_10(M, ID##2) REPEAT_10(M, ID##3) REPEAT_10(M, ID##4) \
REPEAT_10(M, ID##5) REPEAT_10(M, ID##6) REPEAT_10(M, ID##7) REPEAT_10(M, ID##8) REPEAT_10(M, ID##9)
#define REPEAT_1000(M, ID) \
REPEAT_100(M, ID##0) REPEAT_100(M, ID##1) REPEAT_100(M, ID##2) REPEAT_100(M, ID##3) REPEAT_100(M, ID##4) \
REPEAT_100(M, ID##5) REPEAT_100(M, ID##6) REPEAT_100(M, ID##7) REPEAT_100(M, ID##8) REPEAT_100(M, ID##9)
#define REPEAT_10000(m, id) \
REPEAT_1000(m, id##0) REPEAT_1000(m, id##1) REPEAT_1000(m, id##2) REPEAT_1000(m, id##3) REPEAT_1000(m, id##4) \
REPEAT_1000(m, id##5) REPEAT_1000(m, id##6) REPEAT_1000(m, id##7) REPEAT_1000(m, id##8) REPEAT_1000(m, id##9)
#define TRIGGER_FUNC(ID) \
Tester trigger_##ID(Tester t) { return t; }
REPEAT_10000(TRIGGER_FUNC, test)
```
```
--------------------------------------------------------------------------------
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
56.88^ #
| : #
| ::::#:
| @ :@: ::#:
| @ ::@: ::#::
| @ :::@: ::#::
| @ ::::@: ::#:: :
| @ ::::::@: ::#:: :
| @ @@::::::@: ::#:: :
| @ @ ::::::@: ::#:: :
| @::@ ::::::@: ::#:: ::::::@::
| @::@ ::::::@: ::#:: ::@::::::@::::::@::
| @::@ ::::::@: ::#:: :::::::::::::@::::::@::::::@::
| @::@ ::::::@: ::#:: :::::::::::@:::: : ::::::@::::::@::::::@::
| @:@::@ ::::::@: ::#::::::::::::::::@:::: : ::::::@::::::@::::::@::
| @@:@::@ ::::::@: ::#::: ::::::::::::@:::: : ::::::@::::::@::::::@::
| :@@:@::@ ::::::@: ::#::: ::::::::::::@:::: : ::::::@::::::@::::::@::
| ::@@:@::@ ::::::@: ::#::: ::::::::::::@:::: : ::::::@::::::@::::::@::
| @::@@:@::@ ::::::@: ::#::: ::::::::::::@:::: : ::::::@::::::@::::::@::
|::@::@@:@::@ ::::::@: ::#::: ::::::::::::@:::: : ::::::@::::::@::::::@::
0 +----------------------------------------------------------------------->Gi
0 14.35
Number of snapshots: 77
Detailed snapshots: [2, 5, 6, 8, 11, 18, 22 (peak), 38, 53, 63, 73]
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 0 0 0 0
1 186,864,557 3,485,296 3,336,946 95,382 52,968
2 477,143,082 6,980,720 6,693,115 219,853 67,752
```
```
--------------------------------------------------------------------------------
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
56.88^ #
| ::#
| ::: #:
| :: : #:
| :::: : #:::
| : :: : #:: :
| ::: :: : #:: :
| :::: : :: : #:: :
| :: : : :: : #:: :
| : :: : : :: : #:: :
| ::::: : : :: : #:: :::::@:::
| :: :: : : :: : #:: ::::@::::@: :::@:::
| :: :: : : :: : #:: ::::::::::::: ::@::::@: :::@:::
| :: :: : : :: : #:: ::::::@@::: ::: : ::::: ::@::::@: :::@:::
| :::: :: : : :: : #:: ::::: :::@ ::: ::: : ::::: ::@::::@: :::@:::
| @:: :: :: : : :: : #:: :: :: :::@ ::: ::: : ::::: ::@::::@: :::@:::
| @:: :: :: : : :: : #:: :: :: :::@ ::: ::: : ::::: ::@::::@: :::@:::
| @@@:: :: :: : : :: : #:: :: :: :::@ ::: ::: : ::::: ::@::::@: :::@:::
| :@ @:: :: :: : : :: : #:: :: :: :::@ ::: ::: : ::::: ::@::::@: :::@:::
| ::@ @:: :: :: : : :: : #:: :: :: :::@ ::: ::: : ::::: ::@::::@: :::@:::
0 +----------------------------------------------------------------------->Gi
0 14.40
Number of snapshots: 55
Detailed snapshots: [3, 4, 16 (peak), 26, 41, 46, 51]
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 0 0 0 0
1 286,291,056 4,757,792 4,573,558 138,186 46,048
2 591,222,234 8,392,712 8,064,059 267,949 60,704
3 822,224,951 10,865,504 10,439,613 365,299 60,592
```
https://github.com/llvm/llvm-project/pull/192080
More information about the cfe-commits
mailing list