On Monday, 9 April 2018 at 11:06:50 UTC, Shachar Shemesh wrote:
struct S {
  int a;
  int[5000] arr = void;
}

void func() {
  S s;
}

During the s initialization, the entire "S" area is initialized, including the member arr which we asked to be = void.

Is this a bug?

Could be optimized, yes, provided that the spec is updated. We discussed this live at the end of my DConf talk last year, and Walter (in audience) agreed upon the needed spec change. I haven't had/taken the time to work on it yet :(

The optimization of simplifying the initialization isn't too hard. But it is a bit tricky, Johannes wrote down some good points here: https://issues.dlang.org/show_bug.cgi?id=15951 (note the padding bytes issue). The good news is that there doesn't appear to be any spec about it, so technically there is no language breakage and currently it is an "accepts invalid" bug...

Over dinner me, deadalnix and some others discussed further optimization where emission of the large S.init could be eliminated. We worked out some details, but it's a little harder thing to do.

cheers,
  Johan

Reply via email to