[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