]> gcc.gnu.org Git - gcc.git/commit
Merge #814
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>
Tue, 23 Nov 2021 23:09:25 +0000 (23:09 +0000)
committerGitHub <noreply@github.com>
Tue, 23 Nov 2021 23:09:25 +0000 (23:09 +0000)
commit717b6da459b26ace9a3c303cfa5e485ff8935709
treefad38abf4fc4875a2d3c72336a154d3892a7f1a6
parenta41851dfb5bec6f40fd89db01ae75fee557306ee
parent8b36f2b80ebd0e0304b6df4020b5992640662667
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>
This page took 0.06747 seconds and 6 git commands to generate.