Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Ridge2019-03-26 06:07:31 +0000
committerNathan Ridge2019-03-26 06:07:31 +0000
commit2cdbc5ebb6126e73a797fe7cd475c456e78681c6 (patch)
tree262ad7df161b092c01ff72ed237928f1698f7d29 /core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal
parentf2635eed74b108675d48c215e7ebc5d20773910b (diff)
downloadorg.eclipse.cdt-2cdbc5ebb6126e73a797fe7cd475c456e78681c6.tar.gz
org.eclipse.cdt-2cdbc5ebb6126e73a797fe7cd475c456e78681c6.tar.xz
org.eclipse.cdt-2cdbc5ebb6126e73a797fe7cd475c456e78681c6.zip
Bug 545751 - NPE in EvalTypeId.getValue()
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.java20
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;

Back to the top