From 0ae8bcc48c74e2997ce1d3c4f13d6ebbc8148f29 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Mon, 18 Feb 2013 17:49:55 -0800 Subject: [PATCH] Bug 401093 - Expression type for pointer difference does not fit on 64bit machines --- .../org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java | 4 ++-- .../eclipse/cdt/internal/core/dom/parser/c/CVisitor.java | 2 +- .../internal/core/dom/parser/cpp/semantics/CPPVisitor.java | 7 ++++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java index 096032fb9ab..e6631e9f890 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java @@ -7314,7 +7314,7 @@ public class AST2Tests extends AST2TestBase { parseAndCheckBindings(code, C, true); BindingAssertionHelper bh= new BindingAssertionHelper(code, false); ITypedef td= bh.assertNonProblem("ptrdiff_t", 0); - assertEquals("int", ASTTypeUtil.getType(td.getType())); + assertEquals("long int", ASTTypeUtil.getType(td.getType())); td= bh.assertNonProblem("size_t", 0); assertEquals("unsigned long int", ASTTypeUtil.getType(td.getType())); @@ -7322,7 +7322,7 @@ public class AST2Tests extends AST2TestBase { parseAndCheckBindings(code, CPP, true); bh= new BindingAssertionHelper(code, true); td= bh.assertNonProblem("ptrdiff_t", 0); - assertEquals("int", ASTTypeUtil.getType(td.getType())); + assertEquals("long int", ASTTypeUtil.getType(td.getType())); td= bh.assertNonProblem("size_t", 0); assertEquals("unsigned long int", ASTTypeUtil.getType(td.getType())); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java index d1f5cf77ea8..ec22a238aee 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CVisitor.java @@ -649,7 +649,7 @@ public class CVisitor extends ASTQueries { } } - return new CBasicType(Kind.eInt, 0, expr); + return new CBasicType(Kind.eInt, IBasicType.IS_LONG, expr); } static IType get_SIZE_T(IASTExpression expr) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index f5762cf74ef..d306479aaf5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -216,8 +216,9 @@ import org.eclipse.cdt.internal.core.index.IIndexScope; * Collection of methods to extract information from a C++ translation unit. */ public class CPPVisitor extends ASTQueries { - private static final CPPBasicType UNSIGNED_LONG = new CPPBasicType(Kind.eInt, IBasicType.IS_LONG | IBasicType.IS_UNSIGNED); private static final CPPBasicType INT_TYPE = new CPPBasicType(Kind.eInt, 0); + private static final CPPBasicType LONG_TYPE = new CPPBasicType(Kind.eInt, IBasicType.IS_LONG); + private static final CPPBasicType UNSIGNED_LONG = new CPPBasicType(Kind.eInt, IBasicType.IS_LONG | IBasicType.IS_UNSIGNED); public static final String BEGIN_STR = "begin"; //$NON-NLS-1$ public static final char[] BEGIN = BEGIN_STR.toCharArray(); @@ -225,7 +226,7 @@ public class CPPVisitor extends ASTQueries { static final String STD = "std"; //$NON-NLS-1$ private static final char[] SIZE_T = "size_t".toCharArray(); //$NON-NLS-1$ private static final char[] PTRDIFF_T = "ptrdiff_t".toCharArray(); //$NON-NLS-1$ - private static final char[] TYPE_INFO= "type_info".toCharArray(); //$NON-NLS-1$ + private static final char[] TYPE_INFO = "type_info".toCharArray(); //$NON-NLS-1$ private static final char[] INITIALIZER_LIST = "initializer_list".toCharArray(); //$NON-NLS-1$ private static final char[][] EMPTY_CHAR_ARRAY_ARRAY = {}; public static final IASTInitializerClause[] NO_ARGS = {}; @@ -2276,7 +2277,7 @@ public class CPPVisitor extends ASTQueries { public static IType getPointerDiffType(final IASTNode point) { IType t= getStdType(point, PTRDIFF_T); - return t != null ? t : INT_TYPE; + return t != null ? t : LONG_TYPE; } private static IType getStdType(final IASTNode node, char[] name) {