diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-11-23 23:09:25 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-23 23:09:25 +0000 |
commit | 717b6da459b26ace9a3c303cfa5e485ff8935709 (patch) | |
tree | fad38abf4fc4875a2d3c72336a154d3892a7f1a6 /gcc/rust/backend/rust-compile-resolve-path.cc | |
parent | a41851dfb5bec6f40fd89db01ae75fee557306ee (diff) | |
parent | 8b36f2b80ebd0e0304b6df4020b5992640662667 (diff) | |
download | gcc-717b6da459b26ace9a3c303cfa5e485ff8935709.zip gcc-717b6da459b26ace9a3c303cfa5e485ff8935709.tar.gz gcc-717b6da459b26ace9a3c303cfa5e485ff8935709.tar.bz2 |
Merge #814
814: Set TREE_ADDRESSABLE when we need to borrow any expression r=philberty a=philberty
GCC requires VAR_DECL's and PARAM_DECL's to be marked with TREE_ADDRESSABLE
when the declaration will be used in borrow's ('&' getting the address).
This takes into account the implicit addresses when we do autoderef in
method resolution/operator-overloading.
If it is not set we end up in cases like this:
```c
i32 main ()
{
i32 a.1;
i32 D.86;
i32 a;
a = 1;
a.1 = a; // this is wrong
<i32 as AddAssign>::add_assign (&a.1, 2);
D.86 = 0;
return D.86;
}
```
You can see GCC will automatically make a copy of the VAR_DECL resulting bad code-generation.
Fixes #804
Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Diffstat (limited to 'gcc/rust/backend/rust-compile-resolve-path.cc')
0 files changed, 0 insertions, 0 deletions