[I can't find Nathan's email, so sending to the submitter, Argyrios] Hi Argyrios/Nathan,
This change appears to be causing 9 tests on Windows to fail. It seems the compiler crashes when trying to run the tests. Can you please take a look? The affected tests are the following: Clang :: ASTMerge/property/test.m Clang :: Index/annotate-comments-objc.m Clang :: Index/c-index-api-loadTU-test.m Clang :: Index/index-pch-objc.m Clang :: Modules/objc-categories.m Clang :: PCH/chain-categories.m Clang :: PCH/chain-categories2.m Clang :: PCH/chain-class-extension.m Clang :: PCH/objc_property.m Recent failure of the PS4 Windows bot: http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/6902/steps/test/logs/stdio > -----Original Message----- > From: cfe-commits [mailto:cfe-commits-boun...@lists.llvm.org] On Behalf Of > Argyrios Kyrtzidis via cfe-commits > Sent: Thursday, March 16, 2017 11:26 > To: cfe-commits@lists.llvm.org > Subject: r297972 - [index/AST] Add references for ObjC getter=/setter= > property attributes and related property getter/setter role fixes > > Author: akirtzidis > Date: Thu Mar 16 13:25:40 2017 > New Revision: 297972 > > URL: http://llvm.org/viewvc/llvm-project?rev=297972&view=rev > Log: > [index/AST] Add references for ObjC getter=/setter= property attributes and > related property getter/setter role fixes > > This enhances the AST to keep track of locations of the names in those ObjC > property attributes, and reports them for indexing. > > Patch by Nathan Hawes! > https://reviews.llvm.org/D30907 > > Modified: > cfe/trunk/include/clang/AST/DeclObjC.h > cfe/trunk/include/clang/Sema/DeclSpec.h > cfe/trunk/include/clang/Sema/Sema.h > cfe/trunk/lib/AST/ASTImporter.cpp > cfe/trunk/lib/Index/IndexBody.cpp > cfe/trunk/lib/Index/IndexDecl.cpp > cfe/trunk/lib/Parse/ParseObjc.cpp > cfe/trunk/lib/Sema/SemaObjCProperty.cpp > cfe/trunk/lib/Serialization/ASTReaderDecl.cpp > cfe/trunk/lib/Serialization/ASTWriterDecl.cpp > cfe/trunk/test/Index/Core/index-source.m > > Modified: cfe/trunk/include/clang/AST/DeclObjC.h > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/include/clang/AST/DeclObjC.h?rev=297972&r1=297971&r2=297972& > view=diff > ============================================================================== > --- cfe/trunk/include/clang/AST/DeclObjC.h (original) > +++ cfe/trunk/include/clang/AST/DeclObjC.h Thu Mar 16 13:25:40 2017 > @@ -743,6 +743,8 @@ private: > > Selector GetterName; // getter name of NULL if no getter > Selector SetterName; // setter name of NULL if no setter > + SourceLocation GetterNameLoc; // location of the getter attribute's > + value SourceLocation SetterNameLoc; // location of the setter > + attribute's value > > ObjCMethodDecl *GetterMethodDecl; // Declaration of getter instance method > ObjCMethodDecl *SetterMethodDecl; // Declaration of setter instance method > @@ -855,10 +857,18 @@ public: > } > > Selector getGetterName() const { return GetterName; } > - void setGetterName(Selector Sel) { GetterName = Sel; } > + SourceLocation getGetterNameLoc() const { return GetterNameLoc; } > + void setGetterName(Selector Sel, SourceLocation Loc) { > + GetterName = Sel; > + GetterNameLoc = Loc; > + } > > Selector getSetterName() const { return SetterName; } > - void setSetterName(Selector Sel) { SetterName = Sel; } > + SourceLocation getSetterNameLoc() const { return SetterNameLoc; } > + void setSetterName(Selector Sel, SourceLocation Loc) { > + SetterName = Sel; > + SetterNameLoc = Loc; > + } > > ObjCMethodDecl *getGetterMethodDecl() const { return GetterMethodDecl; } > void setGetterMethodDecl(ObjCMethodDecl *gDecl) { GetterMethodDecl = gDecl; > } > > Modified: cfe/trunk/include/clang/Sema/DeclSpec.h > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/include/clang/Sema/DeclSpec.h?rev=297972&r1=297971&r2=297972 > &view=diff > ============================================================================== > --- cfe/trunk/include/clang/Sema/DeclSpec.h (original) > +++ cfe/trunk/include/clang/Sema/DeclSpec.h Thu Mar 16 13:25:40 2017 > @@ -861,11 +861,19 @@ public: > > const IdentifierInfo *getGetterName() const { return GetterName; } > IdentifierInfo *getGetterName() { return GetterName; } > - void setGetterName(IdentifierInfo *name) { GetterName = name; } > + SourceLocation getGetterNameLoc() const { return GetterNameLoc; } > + void setGetterName(IdentifierInfo *name, SourceLocation loc) { > + GetterName = name; > + GetterNameLoc = loc; > + } > > const IdentifierInfo *getSetterName() const { return SetterName; } > IdentifierInfo *getSetterName() { return SetterName; } > - void setSetterName(IdentifierInfo *name) { SetterName = name; } > + SourceLocation getSetterNameLoc() const { return SetterNameLoc; } > + void setSetterName(IdentifierInfo *name, SourceLocation loc) { > + SetterName = name; > + SetterNameLoc = loc; > + } > > private: > // FIXME: These two are unrelated and mutually exclusive. So perhaps @@ - > 882,6 +890,9 @@ private: > > IdentifierInfo *GetterName; // getter name or NULL if no getter > IdentifierInfo *SetterName; // setter name or NULL if no setter > + SourceLocation GetterNameLoc; // location of the getter attribute's > + value SourceLocation SetterNameLoc; // location of the setter > + attribute's value > + > }; > > /// \brief Represents a C++ unqualified-id that has been parsed. > > Modified: cfe/trunk/include/clang/Sema/Sema.h > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/include/clang/Sema/Sema.h?rev=297972&r1=297971&r2=297972&vie > w=diff > ============================================================================== > --- cfe/trunk/include/clang/Sema/Sema.h (original) > +++ cfe/trunk/include/clang/Sema/Sema.h Thu Mar 16 13:25:40 2017 > @@ -3266,7 +3266,9 @@ public: > SourceLocation LParenLoc, > FieldDeclarator &FD, > Selector GetterSel, > + SourceLocation GetterNameLoc, > Selector SetterSel, > + SourceLocation SetterNameLoc, > const bool isReadWrite, > unsigned &Attributes, > const unsigned AttributesAsWritten, @@ -3282,7 +3284,9 > @@ public: > SourceLocation LParenLoc, > FieldDeclarator &FD, > Selector GetterSel, > + SourceLocation GetterNameLoc, > Selector SetterSel, > + SourceLocation SetterNameLoc, > const bool isReadWrite, > const unsigned Attributes, > const unsigned AttributesAsWritten, > > Modified: cfe/trunk/lib/AST/ASTImporter.cpp > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=297972&r1=297971&r2=297972&view= > diff > ============================================================================== > --- cfe/trunk/lib/AST/ASTImporter.cpp (original) > +++ cfe/trunk/lib/AST/ASTImporter.cpp Thu Mar 16 13:25:40 2017 > @@ -4580,8 +4580,10 @@ Decl *ASTNodeImporter::VisitObjCProperty > ToProperty->setPropertyAttributes(D->getPropertyAttributes()); > ToProperty->setPropertyAttributesAsWritten( > D->getPropertyAttributesAsWritten()); > - ToProperty->setGetterName(Importer.Import(D->getGetterName())); > - ToProperty->setSetterName(Importer.Import(D->getSetterName())); > + ToProperty->setGetterName(Importer.Import(D->getGetterName()), > + Importer.Import(D->getGetterNameLoc())); > + ToProperty->setSetterName(Importer.Import(D->getSetterName()), > + Importer.Import(D->getSetterNameLoc())); > ToProperty->setGetterMethodDecl( > cast_or_null<ObjCMethodDecl>(Importer.Import(D- > >getGetterMethodDecl()))); > ToProperty->setSetterMethodDecl( > > Modified: cfe/trunk/lib/Index/IndexBody.cpp > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/lib/Index/IndexBody.cpp?rev=297972&r1=297971&r2=297972&view= > diff > ============================================================================== > --- cfe/trunk/lib/Index/IndexBody.cpp (original) > +++ cfe/trunk/lib/Index/IndexBody.cpp Thu Mar 16 13:25:40 2017 > @@ -22,6 +22,10 @@ class BodyIndexer : public RecursiveASTV > SmallVector<Stmt*, 16> StmtStack; > > typedef RecursiveASTVisitor<BodyIndexer> base; > + > + Stmt *getParentStmt() const { > + return StmtStack.size() < 2 ? nullptr : StmtStack.end()[-2]; } > public: > BodyIndexer(IndexingContext &indexCtx, > const NamedDecl *Parent, const DeclContext *DC) @@ -178,7 > +182,8 @@ public: > SymbolRoleSet Roles{}; > SmallVector<SymbolRelation, 2> Relations; > addCallRole(Roles, Relations); > - if (E->isImplicit()) > + Stmt *Containing = getParentStmt(); > + if (E->isImplicit() || (Containing && > + isa<PseudoObjectExpr>(Containing))) > Roles |= (unsigned)SymbolRole::Implicit; > > if (isDynamic(E)) { > @@ -194,9 +199,12 @@ public: > } > > bool VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { > - if (E->isExplicitProperty()) > + if (E->isExplicitProperty()) { > + SmallVector<SymbolRelation, 2> Relations; > + SymbolRoleSet Roles = getRolesForRef(E, Relations); > return IndexCtx.handleReference(E->getExplicitProperty(), E- > >getLocation(), > - Parent, ParentDC, SymbolRoleSet(), {}, > E); > + Parent, ParentDC, Roles, Relations, E); > + } > > // No need to do a handleReference for the objc method, because there > will > // be a message expr as part of PseudoObjectExpr. > > Modified: cfe/trunk/lib/Index/IndexDecl.cpp > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/lib/Index/IndexDecl.cpp?rev=297972&r1=297971&r2=297972&view= > diff > ============================================================================== > --- cfe/trunk/lib/Index/IndexDecl.cpp (original) > +++ cfe/trunk/lib/Index/IndexDecl.cpp Thu Mar 16 13:25:40 2017 > @@ -98,9 +98,28 @@ public: > if (MethodLoc.isInvalid()) > MethodLoc = D->getLocation(); > > + SourceLocation AttrLoc; > + > + // check for (getter=/setter=) > + if (AssociatedProp) { > + bool isGetter = !D->param_size(); > + AttrLoc = isGetter ? > + AssociatedProp->getGetterNameLoc(): > + AssociatedProp->getSetterNameLoc(); > + } > + > SymbolRoleSet Roles = (SymbolRoleSet)SymbolRole::Dynamic; > - if (D->isImplicit()) > - Roles |= (SymbolRoleSet)SymbolRole::Implicit; > + if (D->isImplicit()) { > + if (AttrLoc.isValid()) { > + MethodLoc = AttrLoc; > + } else { > + Roles |= (SymbolRoleSet)SymbolRole::Implicit; > + } > + } else if (AttrLoc.isValid()) { > + IndexCtx.handleReference(D, AttrLoc, cast<NamedDecl>(D- > >getDeclContext()), > + D->getDeclContext(), 0); > + } > + > if (!IndexCtx.handleDecl(D, MethodLoc, Roles, Relations)) > return false; > IndexCtx.indexTypeSourceInfo(D->getReturnTypeSourceInfo(), D); > > Modified: cfe/trunk/lib/Parse/ParseObjc.cpp > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=297972&r1=297971&r2=297972&view= > diff > ============================================================================== > --- cfe/trunk/lib/Parse/ParseObjc.cpp (original) > +++ cfe/trunk/lib/Parse/ParseObjc.cpp Thu Mar 16 13:25:40 2017 > @@ -929,7 +929,7 @@ void Parser::ParseObjCPropertyAttribute( > > if (IsSetter) { > DS.setPropertyAttributes(ObjCDeclSpec::DQ_PR_setter); > - DS.setSetterName(SelIdent); > + DS.setSetterName(SelIdent, SelLoc); > > if (ExpectAndConsume(tok::colon, > diag::err_expected_colon_after_setter_name)) { > @@ -938,7 +938,7 @@ void Parser::ParseObjCPropertyAttribute( > } > } else { > DS.setPropertyAttributes(ObjCDeclSpec::DQ_PR_getter); > - DS.setGetterName(SelIdent); > + DS.setGetterName(SelIdent, SelLoc); > } > } else if (II->isStr("nonnull")) { > if (DS.getPropertyAttributes() & ObjCDeclSpec::DQ_PR_nullability) > > Modified: cfe/trunk/lib/Sema/SemaObjCProperty.cpp > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/lib/Sema/SemaObjCProperty.cpp?rev=297972&r1=297971&r2=297972 > &view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaObjCProperty.cpp (original) > +++ cfe/trunk/lib/Sema/SemaObjCProperty.cpp Thu Mar 16 13:25:40 2017 > @@ -200,9 +200,10 @@ Decl *Sema::ActOnProperty(Scope *S, Sour > if (ObjCCategoryDecl *CDecl = dyn_cast<ObjCCategoryDecl>(ClassDecl)) { > if (CDecl->IsClassExtension()) { > Res = HandlePropertyInClassExtension(S, AtLoc, LParenLoc, > - FD, GetterSel, SetterSel, > - isReadWrite, > - Attributes, > + FD, > + GetterSel, ODS.getGetterNameLoc(), > + SetterSel, ODS.getSetterNameLoc(), > + isReadWrite, Attributes, > ODS.getPropertyAttributes(), > T, TSI, MethodImplKind); > if (!Res) > @@ -212,9 +213,10 @@ Decl *Sema::ActOnProperty(Scope *S, Sour > > if (!Res) { > Res = CreatePropertyDecl(S, ClassDecl, AtLoc, LParenLoc, FD, > - GetterSel, SetterSel, isReadWrite, > - Attributes, ODS.getPropertyAttributes(), > - T, TSI, MethodImplKind); > + GetterSel, ODS.getGetterNameLoc(), SetterSel, > + ODS.getSetterNameLoc(), isReadWrite, Attributes, > + ODS.getPropertyAttributes(), T, TSI, > + MethodImplKind); > if (lexicalDC) > Res->setLexicalDeclContext(lexicalDC); > } > @@ -412,7 +414,10 @@ Sema::HandlePropertyInClassExtension(Sco > SourceLocation AtLoc, > SourceLocation LParenLoc, > FieldDeclarator &FD, > - Selector GetterSel, Selector SetterSel, > + Selector GetterSel, > + SourceLocation GetterNameLoc, > + Selector SetterSel, > + SourceLocation SetterNameLoc, > const bool isReadWrite, > unsigned &Attributes, > const unsigned AttributesAsWritten, @@ - > 512,7 +517,8 @@ Sema::HandlePropertyInClassExtension(Sco > // Create a new ObjCPropertyDecl with the DeclContext being > // the class extension. > ObjCPropertyDecl *PDecl = CreatePropertyDecl(S, CDecl, AtLoc, LParenLoc, > - FD, GetterSel, SetterSel, > + FD, GetterSel, GetterNameLoc, > + SetterSel, > + SetterNameLoc, > isReadWrite, > Attributes, > AttributesAsWritten, > T, TSI, MethodImplKind, DC); > @@ -562,7 +568,9 @@ ObjCPropertyDecl *Sema::CreatePropertyDe > SourceLocation LParenLoc, > FieldDeclarator &FD, > Selector GetterSel, > + SourceLocation > + GetterNameLoc, > Selector SetterSel, > + SourceLocation > + SetterNameLoc, > const bool isReadWrite, > const unsigned Attributes, > const unsigned > AttributesAsWritten, @@ -640,8 +648,8 @@ ObjCPropertyDecl > *Sema::CreatePropertyDe > > // Regardless of setter/getter attribute, we save the default getter/setter > // selector names in anticipation of declaration of setter/getter methods. > - PDecl->setGetterName(GetterSel); > - PDecl->setSetterName(SetterSel); > + PDecl->setGetterName(GetterSel, GetterNameLoc); > + PDecl->setSetterName(SetterSel, SetterNameLoc); > PDecl->setPropertyAttributesAsWritten( > > makePropertyAttributesAsWritten(AttributesAsWritten)); > > > Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=297972&r1=297971&r2= > 297972&view=diff > ============================================================================== > --- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original) > +++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Thu Mar 16 13:25:40 > +++ 2017 > @@ -1124,8 +1124,10 @@ void ASTDeclReader::VisitObjCPropertyDec > (ObjCPropertyDecl::PropertyAttributeKind)Record.readInt()); > D->setPropertyImplementation( > (ObjCPropertyDecl::PropertyControl)Record.readInt()); > - D->setGetterName(Record.readDeclarationName().getObjCSelector()); > - D->setSetterName(Record.readDeclarationName().getObjCSelector()); > + D->setGetterName(Record.readDeclarationName().getObjCSelector(), > + ReadSourceLocation()); > + D->setSetterName(Record.readDeclarationName().getObjCSelector(), > + ReadSourceLocation()); > D->setGetterMethodDecl(ReadDeclAs<ObjCMethodDecl>()); > D->setSetterMethodDecl(ReadDeclAs<ObjCMethodDecl>()); > D->setPropertyIvarDecl(ReadDeclAs<ObjCIvarDecl>()); > > Modified: cfe/trunk/lib/Serialization/ASTWriterDecl.cpp > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/lib/Serialization/ASTWriterDecl.cpp?rev=297972&r1=297971&r2= > 297972&view=diff > ============================================================================== > --- cfe/trunk/lib/Serialization/ASTWriterDecl.cpp (original) > +++ cfe/trunk/lib/Serialization/ASTWriterDecl.cpp Thu Mar 16 13:25:40 > +++ 2017 > @@ -799,7 +799,9 @@ void ASTDeclWriter::VisitObjCPropertyDec > // FIXME: stable encoding > Record.push_back((unsigned)D->getPropertyImplementation()); > Record.AddDeclarationName(D->getGetterName()); > + Record.AddSourceLocation(D->getGetterNameLoc()); > Record.AddDeclarationName(D->getSetterName()); > + Record.AddSourceLocation(D->getSetterNameLoc()); > Record.AddDeclRef(D->getGetterMethodDecl()); > Record.AddDeclRef(D->getSetterMethodDecl()); > Record.AddDeclRef(D->getPropertyIvarDecl()); > > Modified: cfe/trunk/test/Index/Core/index-source.m > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/Core/index- > source.m?rev=297972&r1=297971&r2=297972&view=diff > ============================================================================== > --- cfe/trunk/test/Index/Core/index-source.m (original) > +++ cfe/trunk/test/Index/Core/index-source.m Thu Mar 16 13:25:40 2017 > @@ -121,39 +121,79 @@ extern int setjmp(jmp_buf); @end > > @interface I2 > +// CHECK: [[@LINE-1]]:12 | class/ObjC | I2 | [[I2_USR:.*]] | {{.*}} | > +Decl | rel: 0 > + > @property (readwrite) id prop; > +// CHECK: [[@LINE-1]]:26 | instance-method/acc-get/ObjC | prop | > +[[I2_prop_getter_USR:.*]] | -[I2 prop] | Decl,Dyn,Impl,RelChild,RelAcc > +| rel: 2 // CHECK: [[@LINE-2]]:26 | instance-method/acc-set/ObjC | > +setProp: | [[I2_prop_setter_USR:.*]] | -[I2 setProp:] | > +Decl,Dyn,Impl,RelChild,RelAcc | rel: 2 // CHECK: [[@LINE-3]]:26 | > +instance-property/ObjC | prop | [[I2_prop_USR:.*]] | <no-cgname> | > +Decl,RelChild | rel: 1 > + > +@property (readwrite, getter=customGet, setter=customSet:) id > +unrelated; // CHECK: [[@LINE-1]]:30 | instance-method/acc-get/ObjC | > +customGet | {{.*}} | -[I2 customGet] | Decl,Dyn,RelChild,RelAcc | rel: > +2 // CHECK: [[@LINE-2]]:48 | instance-method/acc-set/ObjC | customSet: > +| {{.*}} | -[I2 customSet:] | Decl,Dyn,RelChild,RelAcc | rel: 2 // > +CHECK: [[@LINE-3]]:63 | instance-property/ObjC | unrelated | {{.*}} | > +<no-cgname> | Decl,RelChild | rel: 1 > + > +-(id)declaredGet; > +@property (readwrite, getter=declaredGet) id otherProp; // CHECK: > +[[@LINE-1]]:30 | instance-method/acc-get/ObjC | declaredGet | {{.*}} | > +-[I2 declaredGet] | Ref,RelCont | rel: 1 // CHECK: [[@LINE-3]]:6 | > +instance-method/acc-get/ObjC | declaredGet | {{.*}} | -[I2 declaredGet] > +| Decl,Dyn,RelChild,RelAcc | rel: 2 // CHECK: [[@LINE-3]]:46 | > +instance-method/acc-set/ObjC | setOtherProp: | {{.*}} | -[I2 > +setOtherProp:] | Decl,Dyn,Impl,RelChild,RelAcc | rel: 2 > > -// CHECK: [[@LINE+4]]:63 | instance-property(IB,IBColl)/ObjC | buttons | > c:objc(cs)I2(py)buttons | <no-cgname> | Decl,RelChild | rel: 1 -// CHECK-NEXT: > RelChild | I2 | c:objc(cs)I2 > +// CHECK: [[@LINE+4]]:63 | instance-property(IB,IBColl)/ObjC | buttons > +| [[buttons_USR:.*]] | <no-cgname> | Decl,RelChild | rel: 1 // > +CHECK-NEXT: RelChild | I2 | [[I2_USR]] > // CHECK: [[@LINE+2]]:50 | class/ObjC | I1 | c:objc(cs)I1 | _OBJC_CLASS_$_I1 > | Ref,RelCont,RelIBType | rel: 1 -// CHECK-NEXT: RelCont,RelIBType | buttons | > c:objc(cs)I2(py)buttons > +// CHECK-NEXT: RelCont,RelIBType | buttons | [[buttons_USR]] > @property (nonatomic, strong) IBOutletCollection(I1) NSArray *buttons; @end > > @implementation I2 > -// CHECK: [[@LINE+9]]:13 | instance-property/ObjC | prop | > c:objc(cs)I2(py)prop | <no-cgname> | Def,RelChild,RelAcc | rel: 2 -// CHECK- > NEXT: RelChild | I2 | c:objc(cs)I2 > +// CHECK: [[@LINE+9]]:13 | instance-property/ObjC | prop | > +[[I2_prop_USR:.*]] | <no-cgname> | Def,RelChild,RelAcc | rel: 2 // > +CHECK-NEXT: RelChild | I2 | [[I2_USR]] > // CHECK-NEXT: RelAcc | _prop | c:objc(cs)I2@_prop -// CHECK: [[@LINE+6]]:13 > | instance-method/acc-get/ObjC | prop | c:objc(cs)I2(im)prop | -[I2 prop] | > Def,Impl,RelChild | rel: 1 -// CHECK-NEXT: RelChild | I2 | c:objc(cs)I2 -// > CHECK: [[@LINE+4]]:13 | instance-method/acc-set/ObjC | setProp: | > c:objc(cs)I2(im)setProp: | -[I2 setProp:] | Def,Impl,RelChild | rel: 1 -// > CHECK-NEXT: RelChild | I2 | c:objc(cs)I2 > +// CHECK: [[@LINE+6]]:13 | instance-method/acc-get/ObjC | prop | > +[[I2_prop_getter_USR]] | -[I2 prop] | Def,Impl,RelChild | rel: 1 // > +CHECK-NEXT: RelChild | I2 | [[I2_USR]] // CHECK: [[@LINE+4]]:13 | > +instance-method/acc-set/ObjC | setProp: | [[I2_prop_setter_USR]] | -[I2 > +setProp:] | Def,Impl,RelChild | rel: 1 // CHECK-NEXT: RelChild | I2 | > +[[I2_USR]] > // CHECK: [[@LINE+2]]:20 | field/ObjC | _prop | c:objc(cs)I2@_prop | <no- > cgname> | Def,RelChild | rel: 1 -// CHECK-NEXT: RelChild | I2 | c:objc(cs)I2 > +// CHECK-NEXT: RelChild | I2 | [[I2_USR]] > @synthesize prop = _prop; > > -// CHECK: [[@LINE+11]]:12 | instance-method(IB)/ObjC | doAction:foo: | > c:objc(cs)I2(im)doAction:foo: | -[I2 doAction:foo:] | Def,Dyn,RelChild | rel: > 1 -// CHECK-NEXT: RelChild | I2 | c:objc(cs)I2 > +// CHECK: [[@LINE+11]]:12 | instance-method(IB)/ObjC | doAction:foo: | > +[[doAction_USR:.*]] | -[I2 doAction:foo:] | Def,Dyn,RelChild | rel: 1 > +// CHECK-NEXT: RelChild | I2 | [[I2_USR]] > // CHECK: [[@LINE+9]]:22 | class/ObjC | I1 | c:objc(cs)I1 | _OBJC_CLASS_$_I1 > | Ref,RelCont,RelIBType | rel: 1 -// CHECK-NEXT: RelCont,RelIBType | > doAction:foo: | c:objc(cs)I2(im)doAction:foo: > +// CHECK-NEXT: RelCont,RelIBType | doAction:foo: | [[doAction_USR]] > // CHECK-NOT: [[@LINE+7]]:27 | param > // LOCAL: [[@LINE+6]]:27 | param(local)/C | sender | c:{{.*}} | _sender | > Def,RelChild | rel: 1 -// LOCAL-NEXT: RelChild | doAction:foo: | > c:objc(cs)I2(im)doAction:foo: > +// LOCAL-NEXT: RelChild | doAction:foo: | [[doAction_USR:.*]] > // CHECK: [[@LINE+4]]:39 | class/ObjC | I1 | c:objc(cs)I1 | _OBJC_CLASS_$_I1 > | Ref,RelCont | rel: 1 // CHECK-NOT: [[@LINE+3]]:44 | param // LOCAL: > [[@LINE+2]]:44 | param(local)/C | bar | c:{{.*}} | _bar | Def,RelChild | rel: > 1 -// LOCAL-NEXT: RelChild | doAction:foo: | c:objc(cs)I2(im)doAction:foo: > --(IBAction)doAction:(I1 *)sender foo:(I1 *)bar {} > +// LOCAL-NEXT: RelChild | doAction:foo: | [[doAction_USR]] > +-(IBAction)doAction:(I1 *)sender foo:(I1 *)bar { > + [self prop]; > + // CHECK: [[@LINE-1]]:9 | instance-method/acc-get/ObjC | prop | > +[[I2_prop_getter_USR]] | -[I2 prop] | > +Ref,Call,Dyn,RelRec,RelCall,RelCont | rel: 2 > + // CHECK-NEXT: RelCall,RelCont | doAction:foo: | [[doAction_USR]] > + // CHECK-NEXT: RelRec | I2 | [[I2_USR]] > + > + [self setProp: bar]; > + // CHECK: [[@LINE-1]]:9 | instance-method/acc-set/ObjC | setProp: | > + [[I2_prop_setter_USR]] | -[I2 setProp:] | > + Ref,Call,Dyn,RelRec,RelCall,RelCont | rel: 2 // CHECK-NEXT: > + RelCall,RelCont | doAction:foo: | [[doAction_USR]] // CHECK-NEXT: > + RelRec | I2 | [[I2_USR]] > + > + self.prop; > + // CHECK: [[@LINE-1]]:8 | instance-property/ObjC | prop | > + [[I2_prop_USR]] | <no-cgname> | Ref,RelCont | rel: 1 // CHECK-NEXT: > + RelCont | doAction:foo: | [[doAction_USR]] // CHECK: [[@LINE-3]]:8 | > + instance-method/acc-get/ObjC | prop | [[I2_prop_getter_USR]] | -[I2 > + prop] | Ref,Call,Dyn,Impl,RelRec,RelCall,RelCont | rel: 2 // > + CHECK-NEXT: RelCall,RelCont | doAction:foo: | [[doAction_USR]] // > + CHECK-NEXT: RelRec | I2 | [[I2_USR]] > + > + self.prop = self.prop; > + // CHECK: [[@LINE-1]]:8 | instance-property/ObjC | prop | > +[[I2_prop_USR]] | <no-cgname> | Ref,Writ,RelCont | rel: 1 > + // CHECK-NEXT: RelCont | doAction:foo: | [[doAction_USR]] > + // CHECK:[[@LINE-3]]:8 | instance-method/acc-set/ObjC | setProp: | > +[[I2_prop_setter_USR]] | -[I2 setProp:] | > +Ref,Call,Dyn,Impl,RelRec,RelCall,RelCont | rel: 2 > + // CHECK-NEXT: RelCall,RelCont | doAction:foo: | [[doAction_USR]] > + // CHECK-NEXT: RelRec | I2 | [[I2_USR]] } > @end > > @interface I3 > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits