From c39ddef02fa22af321e62c84e6eb1c938362929b Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Wed, 3 Apr 2019 23:22:22 -0400 Subject: [PATCH] Bug 545756 - Handle the case where CPPVisitor.get_SIZE_T() returns a typedef Change-Id: Ib30c68c4d7de72d9a6cb2a90b9030aaad4932e6f --- .../parser/cpp/semantics/EvalUnaryTypeID.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java index ff508152fbb..7d91bdeea9d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java @@ -160,14 +160,18 @@ public class EvalUnaryTypeID extends CPPDependentEvaluation { case op_sizeof: case op_sizeofParameterPack: case op_alignof: - IType o = CPPVisitor.get_SIZE_T(); - if (o instanceof CPPBasicType) { - CPPBasicType t = (CPPBasicType) o.clone(); - if (getValue().numberValue() != null) - t.setAssociatedNumericalValue(getValue().numberValue().longValue()); - return t; + IType result = (IType) CPPVisitor.get_SIZE_T().clone(); + IType simplifiedResult = SemanticUtil.getSimplifiedType(result); + if (simplifiedResult instanceof CPPBasicType) { + CPPBasicType t = (CPPBasicType) simplifiedResult; + IValue value = getValue(); + if (value != null && value.numberValue() != null) { + t.setAssociatedNumericalValue(value.numberValue().longValue()); + } + // We're still returning 'result', which is now modified. + // This preserves the 'size_t' typedef. } - return o; + return result; case op_typeid: return CPPVisitor.get_type_info(); case op_has_nothrow_copy: