Index: clang/lib/CodeGen/CGDebugInfo.cpp =================================================================== --- clang/lib/CodeGen/CGDebugInfo.cpp +++ clang/lib/CodeGen/CGDebugInfo.cpp @@ -2363,13 +2363,10 @@ // We don't know the runtime offset of an ivar if we're using the // non-fragile ABI. For bitfields, use the bit offset into the first // byte of storage of the bitfield. For other fields, use zero. - if (Field->isBitField()) { - FieldOffset = - CGM.getObjCRuntime().ComputeBitfieldBitOffset(CGM, ID, Field); - FieldOffset %= CGM.getContext().getCharWidth(); - } else { - FieldOffset = 0; - } + FieldOffset = + Field->isBitField() + ? CGM.getObjCRuntime().ComputeBitfieldBitOffset(CGM, ID, Field) + : 0; } else { FieldOffset = RL.getFieldOffset(FieldNo); } Index: clang/test/CodeGenObjC/debug-info-ivars.m =================================================================== --- clang/test/CodeGenObjC/debug-info-ivars.m +++ clang/test/CodeGenObjC/debug-info-ivars.m @@ -15,30 +15,29 @@ } @end -@implementation BaseClass -@end + @implementation BaseClass + @end -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "i" -// CHECK-SAME: line: 10 -// CHECK-SAME: baseType: ![[INT:[0-9]+]] -// CHECK-SAME: size: 32, -// CHECK-NOT: offset: -// CHECK-SAME: flags: DIFlagProtected -// CHECK: ![[INT]] = !DIBasicType(name: "int" -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "flag_1" -// CHECK-SAME: line: 11 -// CHECK-SAME: baseType: ![[UNSIGNED:[0-9]+]] -// CHECK-SAME: size: 9, -// CHECK-NOT: offset: -// CHECK-SAME: flags: DIFlagProtected -// CHECK: ![[UNSIGNED]] = !DIBasicType(name: "unsigned int" -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "flag_2" -// CHECK-SAME: line: 12 -// CHECK-SAME: baseType: ![[UNSIGNED]] -// CHECK-SAME: size: 9, offset: 1, -// CHECK-SAME: flags: DIFlagProtected -// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "flag_3" -// CHECK-SAME: line: 14 -// CHECK-SAME: baseType: ![[UNSIGNED]] -// CHECK-SAME: size: 9, offset: 3, -// CHECK-SAME: flags: DIFlagProtected + // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "i" + // CHECK-SAME: line: 10 + // CHECK-SAME: baseType: ![[INT:[0-9]+]] + // CHECK-SAME: size: 32, + // CHECK-NOT: offset: + // CHECK-SAME: flags: DIFlagProtected + // CHECK: ![[INT]] = !DIBasicType(name: "int" + // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "flag_1" + // CHECK-SAME: line: 11 + // CHECK-SAME: baseType: ![[UNSIGNED:[0-9]+]] + // CHECK-SAME: size: 9, offset: 96 + // CHECK-SAME: flags: DIFlagProtected + // CHECK: ![[UNSIGNED]] = !DIBasicType(name: "unsigned int" + // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "flag_2" + // CHECK-SAME: line: 12 + // CHECK-SAME: baseType: ![[UNSIGNED]] + // CHECK-SAME: size: 9, offset: 105 + // CHECK-SAME: flags: DIFlagProtected + // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "flag_3" + // CHECK-SAME: line: 14 + // CHECK-SAME: baseType: ![[UNSIGNED]] + // CHECK-SAME: size: 9, offset: 115 + // CHECK-SAME: flags: DIFlagProtected