Author: rjmccall Date: Wed Oct 21 13:06:38 2015 New Revision: 250917 URL: http://llvm.org/viewvc/llvm-project?rev=250917&view=rev Log: Some minor ARC diagnostic improvements.
Modified: cfe/trunk/include/clang/AST/Type.h cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td cfe/trunk/lib/Sema/JumpDiagnostics.cpp cfe/trunk/test/ARCMT/checking.m cfe/trunk/test/SemaObjC/arc-property-lifetime.m cfe/trunk/test/SemaObjC/arc.m cfe/trunk/test/SemaObjCXX/arc-type-conversion.mm Modified: cfe/trunk/include/clang/AST/Type.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Type.h?rev=250917&r1=250916&r2=250917&view=diff ============================================================================== --- cfe/trunk/include/clang/AST/Type.h (original) +++ cfe/trunk/include/clang/AST/Type.h Wed Oct 21 13:06:38 2015 @@ -441,7 +441,8 @@ public: /// /// One set of Objective-C lifetime qualifiers compatibly includes the other /// if the lifetime qualifiers match, or if both are non-__weak and the - /// including set also contains the 'const' qualifier. + /// including set also contains the 'const' qualifier, or both are non-__weak + /// and one is None (which can only happen in non-ARC modes). bool compatiblyIncludesObjCLifetime(Qualifiers other) const { if (getObjCLifetime() == other.getObjCLifetime()) return true; @@ -449,6 +450,9 @@ public: if (getObjCLifetime() == OCL_Weak || other.getObjCLifetime() == OCL_Weak) return false; + if (getObjCLifetime() == OCL_None || other.getObjCLifetime() == OCL_None) + return true; + return hasConst(); } Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=250917&r1=250916&r2=250917&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Oct 21 13:06:38 2015 @@ -4423,8 +4423,10 @@ def note_protected_by_seh_finally : Note "jump bypasses initialization of __finally block">; def note_protected_by___block : Note< "jump bypasses setup of __block variable">; -def note_protected_by_objc_ownership : Note< - "jump bypasses initialization of retaining variable">; +def note_protected_by_objc_strong_init : Note< + "jump bypasses initialization of __strong variable">; +def note_protected_by_objc_weak_init : Note< + "jump bypasses initialization of __weak variable">; def note_enters_block_captures_cxx_obj : Note< "jump enters lifetime of block which captures a destructible C++ object">; def note_enters_block_captures_strong : Note< @@ -4461,8 +4463,10 @@ def note_exits_seh_finally : Note< "jump exits __finally block">; def note_exits_objc_autoreleasepool : Note< "jump exits autoreleasepool block">; -def note_exits_objc_ownership : Note< - "jump exits scope of retaining variable">; +def note_exits_objc_strong : Note< + "jump exits scope of __strong variable">; +def note_exits_objc_weak : Note< + "jump exits scope of __weak variable">; def note_exits_block_captures_cxx_obj : Note< "jump exits lifetime of block which captures a destructible C++ object">; def note_exits_block_captures_strong : Note< @@ -4665,7 +4669,7 @@ def err_arc_strong_property_ownership : "existing instance variable %1 for strong property %0 may not be " "%select{|__unsafe_unretained||__weak}2">; def err_arc_assign_property_ownership : Error< - "existing instance variable %1 for property %0 with %select{unsafe_unretained| assign}2 " + "existing instance variable %1 for property %0 with %select{unsafe_unretained|assign}2 " "attribute must be __unsafe_unretained">; def err_arc_inconsistent_property_ownership : Error< "%select{|unsafe_unretained|strong|weak}1 property %0 may not also be " Modified: cfe/trunk/lib/Sema/JumpDiagnostics.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/JumpDiagnostics.cpp?rev=250917&r1=250916&r2=250917&view=diff ============================================================================== --- cfe/trunk/lib/Sema/JumpDiagnostics.cpp (original) +++ cfe/trunk/lib/Sema/JumpDiagnostics.cpp Wed Oct 21 13:06:38 2015 @@ -147,9 +147,12 @@ static ScopePair GetDiagForGotoScopeDecl if (VD->hasLocalStorage()) { switch (VD->getType().isDestructedType()) { case QualType::DK_objc_strong_lifetime: + return ScopePair(diag::note_protected_by_objc_strong_init, + diag::note_exits_objc_strong); + case QualType::DK_objc_weak_lifetime: - return ScopePair(diag::note_protected_by_objc_ownership, - diag::note_exits_objc_ownership); + return ScopePair(diag::note_protected_by_objc_weak_init, + diag::note_exits_objc_weak); case QualType::DK_cxx_destructor: OutDiag = diag::note_exits_dtor; Modified: cfe/trunk/test/ARCMT/checking.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/checking.m?rev=250917&r1=250916&r2=250917&view=diff ============================================================================== --- cfe/trunk/test/ARCMT/checking.m (original) +++ cfe/trunk/test/ARCMT/checking.m Wed Oct 21 13:06:38 2015 @@ -180,7 +180,7 @@ void test6(unsigned cond) { switch (cond) { case 0: ; - id x; // expected-note {{jump bypasses initialization of retaining variable}} + id x; // expected-note {{jump bypasses initialization of __strong variable}} case 1: // expected-error {{cannot jump}} x = 0; Modified: cfe/trunk/test/SemaObjC/arc-property-lifetime.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/arc-property-lifetime.m?rev=250917&r1=250916&r2=250917&view=diff ============================================================================== --- cfe/trunk/test/SemaObjC/arc-property-lifetime.m (original) +++ cfe/trunk/test/SemaObjC/arc-property-lifetime.m Wed Oct 21 13:06:38 2015 @@ -70,7 +70,7 @@ // rdar://9341593 @interface Gorf { id __unsafe_unretained x; - id y; // expected-error {{existing instance variable 'y' for property 'y' with assign attribute must be __unsafe_unretained}} + id y; // expected-error {{existing instance variable 'y' for property 'y' with assign attribute must be __unsafe_unretained}} } @property(assign) id __unsafe_unretained x; @property(assign) id y; // expected-note {{property declared here}} @@ -180,7 +180,7 @@ void foo(Baz *f) { @end @interface Foo2 { - id _prop; // expected-error {{existing instance variable '_prop' for property 'prop' with assign attribute must be __unsafe_unretained}} + id _prop; // expected-error {{existing instance variable '_prop' for property 'prop' with assign attribute must be __unsafe_unretained}} } @property (nonatomic, assign) id prop; // expected-note {{property declared here}} @end Modified: cfe/trunk/test/SemaObjC/arc.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/arc.m?rev=250917&r1=250916&r2=250917&view=diff ============================================================================== --- cfe/trunk/test/SemaObjC/arc.m (original) +++ cfe/trunk/test/SemaObjC/arc.m Wed Oct 21 13:06:38 2015 @@ -127,7 +127,17 @@ void test6(unsigned cond) { switch (cond) { case 0: ; - id x; // expected-note {{jump bypasses initialization of retaining variable}} + id x; // expected-note {{jump bypasses initialization of __strong variable}} + + case 1: // expected-error {{cannot jump}} + break; + } +} +void test6a(unsigned cond) { + switch (cond) { + case 0: + ; + __weak id x; // expected-note {{jump bypasses initialization of __weak variable}} case 1: // expected-error {{cannot jump}} break; Modified: cfe/trunk/test/SemaObjCXX/arc-type-conversion.mm URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/arc-type-conversion.mm?rev=250917&r1=250916&r2=250917&view=diff ============================================================================== --- cfe/trunk/test/SemaObjCXX/arc-type-conversion.mm (original) +++ cfe/trunk/test/SemaObjCXX/arc-type-conversion.mm Wed Oct 21 13:06:38 2015 @@ -6,8 +6,8 @@ void * cvt(id arg) // expected-note{{can void* voidp_val; (void)(int*)arg; // expected-error {{cast of an Objective-C pointer to 'int *' is disallowed with ARC}} (void)(id)arg; - (void)(__autoreleasing id*)arg; // expected-error{{C-style cast from 'id' to '__autoreleasing id *' casts away qualifiers}} - (void)(id*)arg; // expected-error{{C-style cast from 'id' to '__strong id *' casts away qualifiers}} + (void)(__autoreleasing id*)arg; // expected-error{{cast of an Objective-C pointer to '__autoreleasing id *' is disallowed with ARC}} + (void)(id*)arg; // expected-error{{cast of an Objective-C pointer to '__strong id *' is disallowed with ARC}} (void)(__autoreleasing id**)voidp_val; (void)(void*)voidp_val; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits