diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-12-20 23:49:09 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-12-20 23:49:09 +0000 |
commit | 789ce142dfbec434cb332247542ea8d437da53ce (patch) | |
tree | 31ab95d87d26651870f286934935612d12d399d2 /clang/test/CodeGenCXX/cxx0x-initializer-array.cpp | |
parent | 27c42e66bbe98924cedeaeb8a534b25ba0ce4310 (diff) | |
download | bcm5719-llvm-789ce142dfbec434cb332247542ea8d437da53ce.tar.gz bcm5719-llvm-789ce142dfbec434cb332247542ea8d437da53ce.zip |
Fix some bugs where we would sometimes use 0, not -1, when emitting a null constant of type pointer-to-data-member.
llvm-svn: 170806
Diffstat (limited to 'clang/test/CodeGenCXX/cxx0x-initializer-array.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/cxx0x-initializer-array.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/cxx0x-initializer-array.cpp b/clang/test/CodeGenCXX/cxx0x-initializer-array.cpp index df689978a88..5e81ba1ff9d 100644 --- a/clang/test/CodeGenCXX/cxx0x-initializer-array.cpp +++ b/clang/test/CodeGenCXX/cxx0x-initializer-array.cpp @@ -1,5 +1,7 @@ // RUN: %clang_cc1 -triple i386-unknown-unknown -std=c++11 -S -emit-llvm -o - %s | FileCheck %s +// CHECK: @[[THREE_NULL_MEMPTRS:.*]] = private constant [3 x i32] [i32 -1, i32 -1, i32 -1] + struct A { int a[1]; }; typedef A x[]; int f() { @@ -7,4 +9,42 @@ int f() { // CHECK: define i32 @_Z1fv // CHECK: store i32 1 // (It's okay if the output changes here, as long as we don't crash.) + return 0; +} + +namespace ValueInitArrayOfMemPtr { + struct S {}; + typedef int (S::*p); + typedef p a[3]; + void f(const a &); + + struct Agg1 { + int n; + p x; + }; + + struct Agg2 { + int n; + a x; + }; + + struct S1 { + p x; + S1(); + }; + + // CHECK: define void @_ZN22ValueInitArrayOfMemPtr1fEi + void f(int n) { + Agg1 a = { n }; + // CHECK: store i32 -1, + + Agg2 b = { n }; + // CHECK: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %{{.*}}, i8* bitcast ([3 x i32]* @[[THREE_NULL_MEMPTRS]] to i8*), i32 12, i32 4, i1 false) + } + + // CHECK: define void @_ZN22ValueInitArrayOfMemPtr1gEv + void g() { + // CHECK: store i32 -1, + f(a{}); + } } |