diff options
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 14 | ||||
| -rw-r--r-- | clang/test/SemaObjC/duplicate-ivar-check.m | 2 | 
2 files changed, 10 insertions, 6 deletions
| diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 3ae2ba14c91..9647740b14c 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -3980,12 +3980,14 @@ void Sema::ActOnFields(Scope* S,          for (ObjCInterfaceDecl::ivar_iterator IVI = ID->ivar_begin(),                IVE = ID->ivar_end(); IVI != IVE; ++IVI) {            ObjCIvarDecl* Ivar = (*IVI); -          IdentifierInfo *II = Ivar->getIdentifier(); -          ObjCIvarDecl* prevIvar = -            ID->getSuperClass()->lookupInstanceVariable(Context, II); -          if (prevIvar) { -            Diag(Ivar->getLocation(), diag::err_duplicate_member) << II; -            Diag(prevIvar->getLocation(), diag::note_previous_declaration); + +          if (IdentifierInfo *II = Ivar->getIdentifier()) { +            ObjCIvarDecl* prevIvar = +              ID->getSuperClass()->lookupInstanceVariable(Context, II); +            if (prevIvar) { +              Diag(Ivar->getLocation(), diag::err_duplicate_member) << II; +              Diag(prevIvar->getLocation(), diag::note_previous_declaration); +            }            }          }        } diff --git a/clang/test/SemaObjC/duplicate-ivar-check.m b/clang/test/SemaObjC/duplicate-ivar-check.m index a5e2cb918e0..7cab982e6e2 100644 --- a/clang/test/SemaObjC/duplicate-ivar-check.m +++ b/clang/test/SemaObjC/duplicate-ivar-check.m @@ -3,6 +3,7 @@  @interface B1 {  @public    double fill_B;	// expected-note {{previous declaration is here}} +  unsigned : 0;  }  @end @@ -10,6 +11,7 @@  @public    int one;	// expected-note {{previous declaration is here}}    int one;	// expected-error {{duplicate member 'one'}} +  unsigned : 0;  }  @end | 

