diff options
author | Marco Stornelli | 2020-01-18 08:27:52 +0000 |
---|---|---|
committer | Marco Stornelli | 2020-01-19 10:28:15 +0000 |
commit | b5cde3b61c728b73e686a0f19c9954ff229c10d5 (patch) | |
tree | 86ead462e52fd456afd391169d1e54ec07fa009d | |
parent | 2c266d91fcbbf0c542797d6ee5c393c8feec6905 (diff) | |
download | org.eclipse.cdt-b5cde3b61c728b73e686a0f19c9954ff229c10d5.tar.gz org.eclipse.cdt-b5cde3b61c728b73e686a0f19c9954ff229c10d5.tar.xz org.eclipse.cdt-b5cde3b61c728b73e686a0f19c9954ff229c10d5.zip |
Bug 559313 - decltype evaluated as a write operation
If a variable is in a decl type specifier can't be evaluated as
written.
Change-Id: If78a567dab99e55c78e16c3b7f10c45bbd0a0606
Signed-off-by: Marco Stornelli <marco.stornelli@gmail.com>
2 files changed, 15 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/VariableReadWriteFlagsTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/VariableReadWriteFlagsTest.java index 5eb63ee3714..a0111a56922 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/VariableReadWriteFlagsTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/VariableReadWriteFlagsTest.java @@ -245,4 +245,16 @@ public class VariableReadWriteFlagsTest extends AST2TestBase { a.assertReadWriteFlags("a = arr[0];", "arr", READ); a.assertReadWriteFlags("return arr[0];", "arr", READ); } + + // class Test { + // public: + // int v; + // void test() const { + // decltype(v) o = 14; + // } + // }; + public void testDeclType() throws Exception { + AssertionHelper a = getCPPAssertionHelper(); + a.assertReadWriteFlags("decltype(v) o = 14;", "v", READ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/VariableReadWriteFlags.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/VariableReadWriteFlags.java index a7bc98a9041..1d58c90b89a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/VariableReadWriteFlags.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/VariableReadWriteFlags.java @@ -21,6 +21,7 @@ import org.eclipse.cdt.core.dom.ast.IASTCaseStatement; import org.eclipse.cdt.core.dom.ast.IASTCastExpression; import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; import org.eclipse.cdt.core.dom.ast.IASTConditionalExpression; +import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.IASTDeclarator; import org.eclipse.cdt.core.dom.ast.IASTDoStatement; import org.eclipse.cdt.core.dom.ast.IASTEqualsInitializer; @@ -81,6 +82,8 @@ public abstract class VariableReadWriteFlags { return READ; // dimension } else if (parent instanceof IASTInitializerList) { return rwInInitializerList((IASTInitializerList) parent, indirection); + } else if (parent instanceof IASTDeclSpecifier) { + return READ; } return READ | WRITE; // fallback } |