diff options
author | Nathan Ridge | 2019-03-26 06:07:31 +0000 |
---|---|---|
committer | Nathan Ridge | 2019-03-26 06:07:31 +0000 |
commit | 2cdbc5ebb6126e73a797fe7cd475c456e78681c6 (patch) | |
tree | 262ad7df161b092c01ff72ed237928f1698f7d29 /core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal | |
parent | f2635eed74b108675d48c215e7ebc5d20773910b (diff) | |
download | org.eclipse.cdt-2cdbc5ebb6126e73a797fe7cd475c456e78681c6.tar.gz org.eclipse.cdt-2cdbc5ebb6126e73a797fe7cd475c456e78681c6.tar.xz org.eclipse.cdt-2cdbc5ebb6126e73a797fe7cd475c456e78681c6.zip |
Bug 545751 - NPE in EvalTypeId.getValue()
Change-Id: Ia11dc1a8af6633ffe54ca927c68bf8dc837604a0
Diffstat (limited to 'core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal')
-rw-r--r-- | core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalTypeId.java | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalTypeId.java index 1d56670dd21..fad9747c5c1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalTypeId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalTypeId.java @@ -42,6 +42,7 @@ import org.eclipse.cdt.internal.core.dom.parser.DependentValue; import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; import org.eclipse.cdt.internal.core.dom.parser.IntegralValue; import org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator; +import org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.SizeAndAlignment; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunction; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPPointerType; import org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper; @@ -195,15 +196,18 @@ public class EvalTypeId extends CPPDependentEvaluation { // Cast signed integer to unsigned. Long val = argVal.numberValue().longValue(); if (val < 0 && inputType instanceof ICPPBasicType && ((ICPPBasicType) inputType).isUnsigned()) { - long sizeof = SizeofCalculator.getSizeAndAlignment(inputType).size; - if (sizeof > 4) { - // Java's "long" can't represent the full range of an 64-bit unsigned integer - // in C++. - sizeof = 4; + SizeAndAlignment sizeAndAlignment = SizeofCalculator.getSizeAndAlignment(inputType); + if (sizeAndAlignment != null) { + long sizeof = sizeAndAlignment.size; + if (sizeof > 4) { + // Java's "long" can't represent the full range of an 64-bit unsigned integer + // in C++. + sizeof = 4; + } + long range = (1L << (sizeof * 8 - 1)); + val += range; + return IntegralValue.create(val); } - long range = (1L << (sizeof * 8 - 1)); - val += range; - return IntegralValue.create(val); } } return argVal; |