diff options
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGen/designated-initializers.c | 30 | ||||
| -rw-r--r-- | clang/test/CodeGenObjC/designated-initializers.m | 8 |
2 files changed, 38 insertions, 0 deletions
diff --git a/clang/test/CodeGen/designated-initializers.c b/clang/test/CodeGen/designated-initializers.c index 6561ce56d82..b41898600b2 100644 --- a/clang/test/CodeGen/designated-initializers.c +++ b/clang/test/CodeGen/designated-initializers.c @@ -52,6 +52,36 @@ struct ds ds7 = { .b = 3 }; + +// <rdar://problem/10465114> +struct overwrite_string_struct1 { + __typeof(L"foo"[0]) L[6]; + int M; +} overwrite_string1[] = { { { L"foo" }, 1 }, [0].L[2] = L'x'}; +// CHECK: [6 x i32] [i32 102, i32 111, i32 120, i32 0, i32 0, i32 0], i32 1 +struct overwrite_string_struct2 { + char L[6]; + int M; +} overwrite_string2[] = { { { "foo" }, 1 }, [0].L[2] = 'x'}; +// CHECK: [6 x i8] c"fox\00\00\00", i32 1 +struct overwrite_string_struct3 { + char L[3]; + int M; +} overwrite_string3[] = { { { "foo" }, 1 }, [0].L[2] = 'x'}; +// CHECK: [3 x i8] c"fox", i32 1 +struct overwrite_string_struct4 { + char L[3]; + int M; +} overwrite_string4[] = { { { "foobar" }, 1 }, [0].L[2] = 'x'}; +// CHECK: [3 x i8] c"fox", i32 1 +struct overwrite_string_struct5 { + char L[6]; + int M; +} overwrite_string5[] = { { { "foo" }, 1 }, [0].L[4] = 'y'}; +// CHECK: [6 x i8] c"foo\00y\00", i32 1 + + + void test1(int argc, char **argv) { // CHECK: internal global %struct.foo { i8* null, i32 1024 } diff --git a/clang/test/CodeGenObjC/designated-initializers.m b/clang/test/CodeGenObjC/designated-initializers.m new file mode 100644 index 00000000000..80dfdf3602c --- /dev/null +++ b/clang/test/CodeGenObjC/designated-initializers.m @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s + +// <rdar://problem/10465114> +struct overwrite_string_struct { + char L[3]; + int M; +} overwrite_string[] = { { { @encode(void**) }, 1 }, [0].L[1] = 'x'}; +// CHECK: [3 x i8] c"^xv", i32 1 |

