modocache created this revision.
modocache added a reviewer: cfe-commits.
Depends on http://reviews.llvm.org/D12047.
Add a unit test which demonstrates the bug reported in
https://llvm.org/bugs/show_bug.cgi?id=24404.
If the macro is enclosed within parentheses, the warning is reported as
expected. Without parentheses, no warning is emitted--this is a bug.
http://reviews.llvm.org/D12048
Files:
test/SemaObjC/access-property-getter.m
Index: test/SemaObjC/access-property-getter.m
===================================================================
--- test/SemaObjC/access-property-getter.m
+++ test/SemaObjC/access-property-getter.m
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -verify %s
+// RUN: %clang_cc1 -fblocks -verify %s
@protocol Protocol
- (oneway void) method;
@@ -9,9 +9,27 @@
}
// rdar://19137815
+#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-getter-return-value"
void
accessMethodViaPropertySyntaxWhenWarningIsIgnoredDoesNotTriggerWarning(id<Protocol>
object) {
object.method;
}
+#pragma clang diagnostic pop
+
+@protocol ProtocolWithBlockProperty
+@property (readonly) void (^blockProperty)(void);
+@end
+
+id<ProtocolWithBlockProperty> protocolWithBlockPropertyConstructor(void);
+#define protocolWithBlockPropertyConstructorMacro
protocolWithBlockPropertyConstructor
+
+void accessBlockPropertyDoesNotTriggerWarning(void) {
+ protocolWithBlockPropertyConstructorMacro().blockProperty;
+}
+
+void accessBlockPropertyInParenthesesTriggersWarning(void) {
+ (protocolWithBlockPropertyConstructorMacro()).blockProperty; //
expected-warning {{property access result unused - getters should not be used
for side effects}}
+}
+
Index: test/SemaObjC/access-property-getter.m
===================================================================
--- test/SemaObjC/access-property-getter.m
+++ test/SemaObjC/access-property-getter.m
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -verify %s
+// RUN: %clang_cc1 -fblocks -verify %s
@protocol Protocol
- (oneway void) method;
@@ -9,9 +9,27 @@
}
// rdar://19137815
+#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-getter-return-value"
void accessMethodViaPropertySyntaxWhenWarningIsIgnoredDoesNotTriggerWarning(id<Protocol> object) {
object.method;
}
+#pragma clang diagnostic pop
+
+@protocol ProtocolWithBlockProperty
+@property (readonly) void (^blockProperty)(void);
+@end
+
+id<ProtocolWithBlockProperty> protocolWithBlockPropertyConstructor(void);
+#define protocolWithBlockPropertyConstructorMacro protocolWithBlockPropertyConstructor
+
+void accessBlockPropertyDoesNotTriggerWarning(void) {
+ protocolWithBlockPropertyConstructorMacro().blockProperty;
+}
+
+void accessBlockPropertyInParenthesesTriggersWarning(void) {
+ (protocolWithBlockPropertyConstructorMacro()).blockProperty; // expected-warning {{property access result unused - getters should not be used for side effects}}
+}
+
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits