From f611b46e72c788c016933033dfadee6a9e138d47 Mon Sep 17 00:00:00 2001 From: Matt Bauman Date: Wed, 20 Mar 2019 10:57:26 -0400 Subject: [PATCH] Fix 29545: Implement unaliascopy for ReinterpretArray (#30296) * Fix 29545: Implement unaliascopy for ReinterpretArray --- base/reinterpretarray.jl | 1 + test/reinterpretarray.jl | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/base/reinterpretarray.jl b/base/reinterpretarray.jl index 4a156d11d1cf5..fa2af7a20af10 100644 --- a/base/reinterpretarray.jl +++ b/base/reinterpretarray.jl @@ -96,6 +96,7 @@ IndexStyle(a::ReinterpretArray) = IndexStyle(a.parent) parent(a::ReinterpretArray) = a.parent dataids(a::ReinterpretArray) = dataids(a.parent) +unaliascopy(a::ReinterpretArray{T}) where {T} = reinterpret(T, unaliascopy(a.parent)) function size(a::ReinterpretArray{T,N,S} where {N}) where {T,S} psize = size(a.parent) diff --git a/test/reinterpretarray.jl b/test/reinterpretarray.jl index 6a52fa8b0b098..0247f03a4d644 100644 --- a/test/reinterpretarray.jl +++ b/test/reinterpretarray.jl @@ -182,6 +182,16 @@ let a = [0.1 0.2; 0.3 0.4], at = reshape([(i,i+1) for i = 1:2:8], 2, 2) @test r == OffsetArray(reshape(1:8, 2, 2, 2), (0, offsetvt...)) end +@testset "potentially aliased copies" begin + buffer = UInt8[1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0] + mid = length(buffer) รท 2 + x1 = reinterpret(Int64, @view buffer[1:mid]) + x2 = reinterpret(Int64, @view buffer[mid+1:end]) + x1 .= x2 + @test x1 == x2 == [2] + @test x1[] === x2[] === Int64(2) +end + # Test 0-dimensional Arrays A = zeros(UInt32) B = reinterpret(Int32,A)