From 6882aa6e5653663bff6a8c58297fbde14135dd64 Mon Sep 17 00:00:00 2001 From: Alena Laskavaia Date: Tue, 11 May 2010 02:17:20 +0000 Subject: [PATCH] Fixed f.p. for gnu compound statement expression extension --- .../checkers/StatementHasNoEffectChecker.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java index 9701e2ac346..f24e7e2d870 100644 --- a/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java +++ b/codan/org.eclipse.cdt.codan.checkers/src/org/eclipse/cdt/codan/internal/checkers/StatementHasNoEffectChecker.java @@ -13,15 +13,18 @@ package org.eclipse.cdt.codan.internal.checkers; import org.eclipse.cdt.codan.core.cxx.model.AbstractIndexAstChecker; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTBinaryExpression; +import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; import org.eclipse.cdt.core.dom.ast.IASTExpression; import org.eclipse.cdt.core.dom.ast.IASTExpressionStatement; import org.eclipse.cdt.core.dom.ast.IASTIdExpression; +import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; import org.eclipse.cdt.core.dom.ast.IBasicType; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; +import org.eclipse.cdt.core.dom.ast.gnu.IGNUASTCompoundStatementExpression; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTBinaryExpression; /** @@ -114,8 +117,19 @@ public class StatementHasNoEffectChecker extends AbstractIndexAstChecker { } return true; } + // simply a; if (e instanceof IASTIdExpression) { - // simply a; + // check if it is part of GNU comp stmt expression i.e. ({foo();a;}) + IASTNode parent = e.getParent(); + if (parent instanceof IASTExpressionStatement) { + IASTNode parent2 = parent.getParent(); + if (parent2 instanceof IASTCompoundStatement) { + IASTNode parent3 = parent2.getParent(); + if (parent3 instanceof IGNUASTCompoundStatementExpression) { + return false; + } + } + } return true; } return false;