www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Was this supposed to be allowed?

reply =?UTF-8?B?772a?= <z z.com> writes:
```D
float[2] somevalue = somefloat3value[] + cast(Unqual!float[2]) 
[somesharedfloatarray1[i],somesharedfloatarray2[ii]];
```
Older LDC/DMD releases never complained but now that i upgraded 
DMD, DMD-compiled builds suffer from runtime assert error 
`core.internal.array.operations.arrayOp!(float[], float[], 
float[], "+", "=").arrayOp at 
.....\src\druntime\import\core\internal\array\operations.d(45) : 
Mismatched array lengths for vector operation `

Explicitly specifying `somefloat3value[0..2]` now works, and it 
seems that this assert check is an addition to a recent DMD 
version's `druntime`, does it means that this was a recent change 
in the language+runtime or just a retroactive enforcement of 
language rules that didn't use to be enforced?
Big thanks.
Sep 15 2021
parent Petar Kirov [ZombineDev] <petar.p.kirov gmail.com> writes:
On Wednesday, 15 September 2021 at 13:52:40 UTC, z wrote:
 ```D
 float[2] somevalue = somefloat3value[] + cast(Unqual!float[2]) 
 [somesharedfloatarray1[i],somesharedfloatarray2[ii]];
 ```
 Older LDC/DMD releases never complained but now that i upgraded 
 DMD, DMD-compiled builds suffer from runtime assert error 
 `core.internal.array.operations.arrayOp!(float[], float[], 
 float[], "+", "=").arrayOp at 
 .....\src\druntime\import\core\internal\array\operations.d(45) 
 : Mismatched array lengths for vector operation `

 Explicitly specifying `somefloat3value[0..2]` now works, and it 
 seems that this assert check is an addition to a recent DMD 
 version's `druntime`, does it means that this was a recent 
 change in the language+runtime or just a retroactive 
 enforcement of language rules that didn't use to be enforced?
 Big thanks.
The history is roughly as follows: * between dmd 2.065 and 2.076 (including), this used to fail at runtime with message "Array lengths don't match for vector operation: 2 != 3" * dmd 2.077 included [druntime PR 1891][1] which was a ground-up re-implementation of the way array operations are implemented and in general a very welcome improvement. Unfortunately that PR didn't include checks to ensure that all arrays have equal length (or perhaps it had insufficient checks, I didn't dig into the details). * 2020-08-04 The issue was reported: https://issues.dlang.org/show_bug.cgi?id=21110 * 2021-08-09 A PR that fixes the issue was merged: https://github.com/dlang/druntime/pull/3267 * 2021-08-09 The fix was released in 2.097.2 In summary, the validation was always supposed to be there, but between 2.077.0 and 2.097.1 it wasn't. [1]: https://github.com/dlang/druntime/pull/1891
Sep 15 2021