This reverts commit bb4b27a2ca.
This commit is contained in:
Andreas Rumpf 2020-11-30 23:36:38 +01:00 • committed by GitHub
commit 2e4b6b94e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 61 additions and 126 deletions

View file

@ -125,53 +125,4 @@ proc main =
let rankdef = avals
echo avals.len, " ", rankdef.len
main()
#------------------------------------------------------------------------------
# Issue #16185, complex self-assingment elimination
#------------------------------------------------------------------------------
type
CpuStorage*[T] = ref CpuStorageObj[T]
CpuStorageObj[T] = object
size*: int
raw_buffer*: ptr UncheckedArray[T]
Tensor[T] = object
buf*: CpuStorage[T]
TestObject = object
x: Tensor[float]
proc `=destroy`[T](s: var CpuStorageObj[T]) =
if s.raw_buffer != nil:
s.raw_buffer.deallocShared()
s.size = 0
s.raw_buffer = nil
proc `=`[T](a: var CpuStorageObj[T]; b: CpuStorageObj[T]) {.error.}
proc allocCpuStorage[T](s: var CpuStorage[T], size: int) =
new(s)
s.raw_buffer = cast[ptr UncheckedArray[T]](allocShared0(sizeof(T) * size))
s.size = size
proc newTensor[T](size: int): Tensor[T] =
allocCpuStorage(result.buf, size)
proc `[]`[T](t: Tensor[T], idx: int): T = t.buf.raw_buffer[idx]
proc `[]=`[T](t: Tensor[T], idx: int, val: T) = t.buf.raw_buffer[idx] = val
proc toTensor[T](s: seq[T]): Tensor[T] =
result = newTensor[T](s.len)
for i, x in s:
result[i] = x
proc main2() =
var t: TestObject
t.x = toTensor(@[1.0, 2, 3, 4])
t.x = t.x
doAssert(t.x.buf != nil) # self-assignment above should be eliminated
main2()
main()