From 3fcbb5c7b59b91713797f272ce5553783d748c70 Mon Sep 17 00:00:00 2001 From: Marco Stornelli Date: Sun, 21 Apr 2019 12:17:39 +0200 Subject: [PATCH] Bug 492878 - Fix no-return in function with goto Change-Id: I39f2605aa2e5b697015a2dfdb795f163e76095cf Signed-off-by: Marco Stornelli --- .../cdt/codan/internal/checkers/ReturnChecker.java | 4 +++- .../core/internal/checkers/ReturnCheckerTest.java | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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 e12ea7bbf8c..da31be8f559 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 @@ -35,6 +35,7 @@ import org.eclipse.cdt.core.dom.ast.IASTDoStatement; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTForStatement; import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; +import org.eclipse.cdt.core.dom.ast.IASTGotoStatement; import org.eclipse.cdt.core.dom.ast.IASTIfStatement; import org.eclipse.cdt.core.dom.ast.IASTInitializerClause; import org.eclipse.cdt.core.dom.ast.IASTLabelStatement; @@ -210,7 +211,8 @@ public class ReturnChecker extends AbstractAstFunctionChecker { private boolean isCompoundStatement(IASTStatement last) { return last instanceof IASTIfStatement || last instanceof IASTWhileStatement || last instanceof IASTDoStatement || last instanceof IASTForStatement || last instanceof IASTSwitchStatement - || last instanceof IASTCompoundStatement || last instanceof ICPPASTTryBlockStatement; + || last instanceof IASTCompoundStatement || last instanceof ICPPASTTryBlockStatement + || last instanceof IASTGotoStatement; } protected boolean isFuncExitStatement(IASTStatement statement) { diff --git a/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java b/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java index 68290b6dfa6..9e24f732d79 100644 --- a/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java +++ b/codan/org.eclipse.cdt.codan.core.tests/src/org/eclipse/cdt/codan/core/internal/checkers/ReturnCheckerTest.java @@ -515,4 +515,16 @@ public class ReturnCheckerTest extends CheckerTestCase { public void testTemplateFunctionNoReturn() throws Exception { checkSampleAboveCpp(); } + + //int foo() { + // int errcode = -1; + // errcode = 0; + // cleanup: + // return errcode; + // barf: + // goto cleanup; + //} + public void testNoReturnWithGoto_Bug492878() throws Exception { + checkSampleAboveCpp(); + } }