From 432c3eaa0450eb03bc328d34a1219b5f71f23c33 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sat, 29 Apr 2017 02:19:53 -0400 Subject: [PATCH] Bug 512932 - Do not perform extra type manipulations in EvalMemberAccess.computeType() The manipulations removed in this change have no basis in the standard, as far as I can tell by looking at [expr.ref]. Change-Id: I4fc8c342b590dbeb5a876543f736934c162034cc --- .../cdt/core/parser/tests/ast2/AST2CPPTests.java | 14 ++++++++++++++ .../dom/parser/cpp/semantics/EvalMemberAccess.java | 6 ------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index 67f95d07b7b..6d977a3200b 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -12269,4 +12269,18 @@ public class AST2CPPTests extends AST2TestBase { public void testEnumeratorAttribute_514821() throws Exception { parseAndCheckBindings(getAboveComment(), CPP, true /* use GNU extensions */); } + + // struct CType { + // char m_Array[4]; + // }; + // + // void foo(char(&)[4]); + // + // int main() { + // char name[sizeof(CType().m_Array)]; + // foo(name); + // } + public void testSizeofArrayField_512932() throws Exception { + parseAndCheckBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java index 44de9979fc1..646c27557a3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java @@ -15,7 +15,6 @@ import static org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory.LVALUE; import static org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory.PRVALUE; import static org.eclipse.cdt.core.dom.ast.IASTExpression.ValueCategory.XVALUE; import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExpressionTypes.glvalueType; -import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExpressionTypes.prvalueType; import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExpressionTypes.prvalueTypeWithResolvedTypedefs; import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.ExpressionTypes.typeFromFunctionCall; import static org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil.ALLCVQ; @@ -265,11 +264,6 @@ public class EvalMemberAccess extends CPPDependentEvaluation { e2 = glvalueType(e2); } else if (fMember instanceof ICPPField && !((ICPPField) fMember).isStatic()) { e2 = addQualifiersForAccess((ICPPField) fMember, e2, fOwnerType); - if (!fIsPointerDeref && fOwnerValueCategory == PRVALUE) { - e2 = prvalueType(e2); - } else { - e2 = glvalueType(e2); - } } return SemanticUtil.mapToAST(e2, point); }