Abstract out everything having to do with member pointers into the ABI
class; they should just be completely opaque throughout IR gen now,
although I haven't really audited that.
Fix a bug apparently inherited from gcc-4.2 where we failed to null-check
member data pointers when performing derived-to-base or base-to-derived
conversions on them.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111789 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CodeGenCXX/member-function-pointers.cpp b/test/CodeGenCXX/member-function-pointers.cpp
index 3e95f39..78a571e 100644
--- a/test/CodeGenCXX/member-function-pointers.cpp
+++ b/test/CodeGenCXX/member-function-pointers.cpp
@@ -38,14 +38,14 @@
// CHECK: [[TMP:%.*]] = load %0* @pa, align 8
// CHECK: [[TMPADJ:%.*]] = extractvalue %0 [[TMP]], 1
- // CHECK: [[ADJ:%.*]] = add i64 [[TMPADJ]], 16
+ // CHECK: [[ADJ:%.*]] = add nsw i64 [[TMPADJ]], 16
// CHECK: [[RES:%.*]] = insertvalue %0 [[TMP]], i64 [[ADJ]], 1
// CHECK: store %0 [[RES]], %0* @pc, align 8
pc = pa;
// CHECK: [[TMP:%.*]] = load %0* @pc, align 8
// CHECK: [[TMPADJ:%.*]] = extractvalue %0 [[TMP]], 1
- // CHECK: [[ADJ:%.*]] = sub i64 [[TMPADJ]], 16
+ // CHECK: [[ADJ:%.*]] = sub nsw i64 [[TMPADJ]], 16
// CHECK: [[RES:%.*]] = insertvalue %0 [[TMP]], i64 [[ADJ]], 1
// CHECK: store %0 [[RES]], %0* @pa, align 8
pa = static_cast<void (A::*)()>(pc);