diff options
| author | John McCall <rjmccall@apple.com> | 2019-04-10 18:07:18 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2019-04-10 18:07:18 +0000 |
| commit | 7ae29f574260811ce12fcf09bf5b27e058e2719e (patch) | |
| tree | 8d7fb9641209d5e0a51bb0dd2e479e0547ea5c29 /clang/test/CodeGenCXX | |
| parent | 4e3fd7757aa7d1b6193f74527c85bbcd76e54a66 (diff) | |
| download | bcm5719-llvm-7ae29f574260811ce12fcf09bf5b27e058e2719e.tar.gz bcm5719-llvm-7ae29f574260811ce12fcf09bf5b27e058e2719e.zip | |
Fix an off-by-one mistake in IRGen's copy-construction
special cases in the presence of zero-length arrays.
Patch by Joran Bigalet!
llvm-svn: 358115
Diffstat (limited to 'clang/test/CodeGenCXX')
| -rw-r--r-- | clang/test/CodeGenCXX/pod-member-memcpys.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/pod-member-memcpys.cpp b/clang/test/CodeGenCXX/pod-member-memcpys.cpp index 9facb8ad507..a43706cb370 100644 --- a/clang/test/CodeGenCXX/pod-member-memcpys.cpp +++ b/clang/test/CodeGenCXX/pod-member-memcpys.cpp @@ -45,6 +45,13 @@ struct ArrayMember { int w, x, y, z; }; +struct ZeroLengthArrayMember { + NonPOD np; + int a; + int b[0]; + int c; +}; + struct VolatileMember { int a, b, c, d; volatile int v; @@ -109,6 +116,7 @@ CALL_AO(Basic) CALL_AO(PODMember) CALL_AO(PODLikeMember) CALL_AO(ArrayMember) +CALL_AO(ZeroLengthArrayMember) CALL_AO(VolatileMember) CALL_AO(BitfieldMember) CALL_AO(InnerClassMember) @@ -142,6 +150,12 @@ CALL_AO(PackedMembers) // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 64, i1 {{.*}}) // CHECK: ret %struct.ArrayMember* +// ZeroLengthArrayMember copy-assignment: +// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ZeroLengthArrayMember* @_ZN21ZeroLengthArrayMemberaSERKS_(%struct.ZeroLengthArrayMember* %this, %struct.ZeroLengthArrayMember* dereferenceable({{[0-9]+}})) +// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD* @_ZN6NonPODaSERKS_ +// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 8, i1 {{.*}}) +// CHECK: ret %struct.ZeroLengthArrayMember* + // VolatileMember copy-assignment: // CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.VolatileMember* @_ZN14VolatileMemberaSERKS_(%struct.VolatileMember* %this, %struct.VolatileMember* dereferenceable({{[0-9]+}})) // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}} align 4 {{.*}} align 4 {{.*}}i64 16, i1 {{.*}}) |

