Index: lib/CodeGen/CGExpr.cpp =================================================================== --- lib/CodeGen/CGExpr.cpp +++ lib/CodeGen/CGExpr.cpp @@ -708,6 +708,8 @@ DeclContext::decl_iterator(const_cast(FD))); return ++FI == FD->getParent()->field_end(); } + } else if (const auto *IRE = dyn_cast(E)) { + return IRE->getDecl()->getNextIvar() == nullptr; } return false; Index: test/CodeGenObjC/ubsan.m =================================================================== --- /dev/null +++ test/CodeGenObjC/ubsan.m @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -x objective-c -emit-llvm -triple x86_64-apple-macosx10.10.0 -Wno-objc-root-class -fsanitize=array-bounds %s -o - | FileCheck %s + +@interface HasFlexibleArray { + @public char chars[0]; +} +@end +@implementation HasFlexibleArray @end + +// CHECK-LABEL: do_not_instrument_flexible_array_members +char do_not_instrument_flexible_array_members(HasFlexibleArray *HFA) { +// CHECK-NOT: !nosanitize + return HFA->chars[1]; +// CHECK: } +}