From 08cf5bcb277304d8a394016d74b5dd28b96bd269 Mon Sep 17 00:00:00 2001 From: Alena Laskavaia Date: Tue, 18 Jan 2011 03:18:53 +0000 Subject: [PATCH] Bug 332285 - fixed lambda expressions --- .../internal/checkers/ReturnChecker.java | 10 ++++++++++ .../internal/checkers/ReturnCheckerTest.java | 19 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ReturnChecker.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ReturnChecker.java index 3ebc6131945..2a4d5626a10 100644 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ReturnChecker.java +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/ReturnChecker.java @@ -24,6 +24,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.IASTDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement; import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.IASTNamedTypeSpecifier; @@ -37,6 +38,7 @@ import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; +import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; /** * The checker suppose to find issue related to mismatched return value/function @@ -89,6 +91,14 @@ public class ReturnChecker extends AbstractAstFunctionChecker { return PROCESS_SKIP; } + if (stmt instanceof IASTExpressionStatement) { + // do not process expression they may contain nasty stuff + IASTExpressionStatement stmt1 = (IASTExpressionStatement) stmt; + if (stmt1.getExpression() instanceof IGNUASTCompoundStatementExpression) { + return PROCESS_CONTINUE; + } + return PROCESS_SKIP; + } return PROCESS_CONTINUE; } /** diff --git a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java index bdb3ccd76bc..4939dab5789 100644 --- a/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java +++ b/codan/org.eclipse.cdt.codan.core.test/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java @@ -138,4 +138,23 @@ public class ReturnCheckerTest extends CheckerTestCase { loadCodeAndRunCpp(getAboveComment()); checkNoErrors(); } + + // void f() + // { + // [](int r){return r;}(5); + // } + public void testLambda_Bug332285() { + loadCodeAndRunCpp(getAboveComment()); + checkNoErrors(); + } + + // void g() + // { + // int r; + // ({return r;}); + // } + public void testGccExtensions() { + loadCodeAndRunCpp(getAboveComment()); + checkErrorLine(4); + } } \ No newline at end of file