diff options
author | Akira Hatanaka <ahatanaka@apple.com> | 2018-04-16 19:38:00 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@apple.com> | 2018-04-16 19:38:00 +0000 |
commit | 1c3bd2ff0c71590ad02c68bf0d4bbd3bbc27837e (patch) | |
tree | 44512d33d16512e48ca5d8588a222452734c080a /clang/test/CodeGenObjC/strong-in-c-struct.m | |
parent | 92ad94e7cd8f95019d66b1534d6187f87c293a9c (diff) | |
download | bcm5719-llvm-1c3bd2ff0c71590ad02c68bf0d4bbd3bbc27837e.tar.gz bcm5719-llvm-1c3bd2ff0c71590ad02c68bf0d4bbd3bbc27837e.zip |
[CodeGen] Fix a crash that occurs when a non-trivial C struct with a
volatile array field is copied.
The crash occurs because method 'visitArray' passes a null FieldDecl to
method 'visit' and some of the methods called downstream expect a
non-null FieldDecl to be passed.
rdar://problem/33599681
llvm-svn: 330151
Diffstat (limited to 'clang/test/CodeGenObjC/strong-in-c-struct.m')
-rw-r--r-- | clang/test/CodeGenObjC/strong-in-c-struct.m | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/clang/test/CodeGenObjC/strong-in-c-struct.m b/clang/test/CodeGenObjC/strong-in-c-struct.m index 6310943d2ef..393a328ca8d 100644 --- a/clang/test/CodeGenObjC/strong-in-c-struct.m +++ b/clang/test/CodeGenObjC/strong-in-c-struct.m @@ -70,6 +70,11 @@ typedef struct { volatile char i6; } Bitfield1; +typedef struct { + id x; + volatile int a[16]; +} VolatileArray ; + #endif #ifdef USESTRUCT @@ -540,4 +545,17 @@ void test_strong_in_union() { U t; } +// CHECK: define void @test_copy_constructor_VolatileArray( +// CHECK: call void @__copy_constructor_8_8_s0_AB8s4n16_tv64w32_AE( + +// CHECK: define linkonce_odr hidden void @__copy_constructor_8_8_s0_AB8s4n16_tv64w32_AE( +// CHECK: %[[V12:.*]] = bitcast i8** %{{.*}} to i32* +// CHECK: %[[V13:.*]] = bitcast i8** %{{.*}} to i32* +// CHECK: %[[V14:.*]] = load volatile i32, i32* %[[V13]], align 4 +// CHECK: store volatile i32 %[[V14]], i32* %[[V12]], align 4 + +void test_copy_constructor_VolatileArray(VolatileArray *a) { + VolatileArray t = *a; +} + #endif /* USESTRUCT */ |