Index: lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp =================================================================== --- lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp +++ lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp @@ -343,6 +343,7 @@ const std::vector groupsToIgnore = { "unused-value", "odr", + "unused-getter-return-value", }; for (const char *group : groupsToIgnore) { compiler.getDiagnostics().setSeverityForGroup( Index: lldb/test/API/lang/objc/warnings-in-expr-parser/Makefile =================================================================== --- /dev/null +++ lldb/test/API/lang/objc/warnings-in-expr-parser/Makefile @@ -0,0 +1,4 @@ +OBJC_SOURCES := main.m +LD_EXTRAS := -framework Foundation + +include Makefile.rules Index: lldb/test/API/lang/objc/warnings-in-expr-parser/TestObjCWarningsInExprParser.py =================================================================== --- /dev/null +++ lldb/test/API/lang/objc/warnings-in-expr-parser/TestObjCWarningsInExprParser.py @@ -0,0 +1,23 @@ +""" +Test the warnings that LLDB emits when parsing Objective-C expressions. +""" + +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + +class TestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @skipUnlessDarwin + @no_debug_info_test + def test(self): + self.build() + lldbutil.run_to_source_breakpoint(self, "// break here", lldb.SBFileSpec("main.m")) + + # Don't warn about not using the result of getters. This is perfectly + # fine in the expression parser and LLDB shouldn't warn the user about that. + result = self.frame().EvaluateExpression("m.m; unknown_var_to_cause_an_error") + self.assertNotIn("getters should not be used for side effects", str(result.GetError())) Index: lldb/test/API/lang/objc/warnings-in-expr-parser/main.m =================================================================== --- /dev/null +++ lldb/test/API/lang/objc/warnings-in-expr-parser/main.m @@ -0,0 +1,20 @@ +#include + +@interface MyClass : NSObject +@property(getter=getM) int m; +@end + +@implementation MyClass { +} +- (int)getM { + return 1; +} +@end + +int main() { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + MyClass *m = [[MyClass alloc] init]; + m.m; // break here + [pool drain]; + return 0; // break here +}