probinson created this revision. probinson added a reviewer: rjmccall. probinson added a subscriber: cfe-commits. Herald added subscribers: rengolin, aemerson.
The test conjures up and returns a temp which has a struct type, and the struct has some empty/padding bytes in the middle. In C++03 these are handled as zero, so the code uses 'llvm.memset' to initialize the temp. In C++11, the padding is handled as undef, so the code uses 'llvm.memcpy' instead, making the test fail. I've made the test run twice, once per dialect, and check for the appropriate intrinsic. It doesn't look like this is the point of the test, though,. so maybe hard-coding the dialect would be preferable. https://reviews.llvm.org/D27955 Files: test/CodeGenCXX/arm-swiftcall.cpp Index: test/CodeGenCXX/arm-swiftcall.cpp =================================================================== --- test/CodeGenCXX/arm-swiftcall.cpp +++ test/CodeGenCXX/arm-swiftcall.cpp @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -triple armv7-apple-darwin9 -emit-llvm -o - %s -Wno-return-type-c-linkage | FileCheck %s +// RUN: %clang_cc1 -triple armv7-apple-darwin9 -emit-llvm -o - %s -Wno-return-type-c-linkage -std=c++03 | FileCheck %s -check-prefixes=CHECK,CHECKv03 +// RUN: %clang_cc1 -triple armv7-apple-darwin9 -emit-llvm -o - %s -Wno-return-type-c-linkage -std=c++11 | FileCheck %s -check-prefixes=CHECK,CHECKv11 // This isn't really testing anything ARM-specific; it's just a convenient // 32-bit platform. @@ -48,7 +49,8 @@ TEST(struct_1); // CHECK-LABEL: define {{.*}} @return_struct_1() // CHECK: [[RET:%.*]] = alloca [[REC:%.*]], align 4 -// CHECK: @llvm.memset +// CHECKv03: @llvm.memset +// CHECKv11: @llvm.memcpy // CHECK: [[CAST_TMP:%.*]] = bitcast [[REC]]* [[RET]] to [[AGG:{ i32, \[2 x i8\], i8, \[1 x i8\], float, float }]]* // CHECK: [[T0:%.*]] = getelementptr inbounds [[AGG]], [[AGG]]* [[CAST_TMP]], i32 0, i32 0 // CHECK: [[FIRST:%.*]] = load i32, i32* [[T0]], align 4
Index: test/CodeGenCXX/arm-swiftcall.cpp =================================================================== --- test/CodeGenCXX/arm-swiftcall.cpp +++ test/CodeGenCXX/arm-swiftcall.cpp @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -triple armv7-apple-darwin9 -emit-llvm -o - %s -Wno-return-type-c-linkage | FileCheck %s +// RUN: %clang_cc1 -triple armv7-apple-darwin9 -emit-llvm -o - %s -Wno-return-type-c-linkage -std=c++03 | FileCheck %s -check-prefixes=CHECK,CHECKv03 +// RUN: %clang_cc1 -triple armv7-apple-darwin9 -emit-llvm -o - %s -Wno-return-type-c-linkage -std=c++11 | FileCheck %s -check-prefixes=CHECK,CHECKv11 // This isn't really testing anything ARM-specific; it's just a convenient // 32-bit platform. @@ -48,7 +49,8 @@ TEST(struct_1); // CHECK-LABEL: define {{.*}} @return_struct_1() // CHECK: [[RET:%.*]] = alloca [[REC:%.*]], align 4 -// CHECK: @llvm.memset +// CHECKv03: @llvm.memset +// CHECKv11: @llvm.memcpy // CHECK: [[CAST_TMP:%.*]] = bitcast [[REC]]* [[RET]] to [[AGG:{ i32, \[2 x i8\], i8, \[1 x i8\], float, float }]]* // CHECK: [[T0:%.*]] = getelementptr inbounds [[AGG]], [[AGG]]* [[CAST_TMP]], i32 0, i32 0 // CHECK: [[FIRST:%.*]] = load i32, i32* [[T0]], align 4
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits