diff options
author | Nathan Ridge | 2018-01-10 22:35:32 +0000 |
---|---|---|
committer | Nathan Ridge | 2018-01-25 22:04:22 +0000 |
commit | 7754023edaec9cde51fed6500c62f50ced621b92 (patch) | |
tree | bb882cb5cd6322dc1368d14540f7183c792c1aff /core | |
parent | 5801b60b191e6a0df24f9176534d2fc47182318c (diff) | |
download | org.eclipse.cdt-7754023edaec9cde51fed6500c62f50ced621b92.tar.gz org.eclipse.cdt-7754023edaec9cde51fed6500c62f50ced621b92.tar.xz org.eclipse.cdt-7754023edaec9cde51fed6500c62f50ced621b92.zip |
Bug 529646 - Avoid computing the value of static fields for every object of a class type
Change-Id: Ic07a1fe5c84b67ed4a9be5e2d50beb9d5c1a54af
Diffstat (limited to 'core')
2 files changed, 69 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java index c83115f0738..d759bb382e6 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java @@ -2495,4 +2495,70 @@ public class IndexCPPBindingResolutionTest extends IndexBindingResolutionTestBas public void testNestedClassDefinedOutOfLine_502999() throws Exception { checkBindings(); } + + // class MyClass + // { + // public: + // MyClass( int i ) + // { + // } + // static const MyClass CONSTANT_NAME1; + // static const MyClass CONSTANT_NAME2; + // static const MyClass CONSTANT_NAME3; + // static const MyClass CONSTANT_NAME4; + // static const MyClass CONSTANT_NAME5; + // static const MyClass CONSTANT_NAME6; + // static const MyClass CONSTANT_NAME7; + // static const MyClass CONSTANT_NAME8; + // static const MyClass CONSTANT_NAME9; + // static const MyClass CONSTANT_NAME10; + // static const MyClass CONSTANT_NAME11; + // static const MyClass CONSTANT_NAME12; + // static const MyClass CONSTANT_NAME13; + // static const MyClass CONSTANT_NAME14; + // static const MyClass CONSTANT_NAME15; + // static const MyClass CONSTANT_NAME16; + // static const MyClass CONSTANT_NAME17; + // static const MyClass CONSTANT_NAME18; + // static const MyClass CONSTANT_NAME19; + // static const MyClass CONSTANT_NAME20; + // static const MyClass CONSTANT_NAME21; + // static const MyClass CONSTANT_NAME22; + // static const MyClass CONSTANT_NAME23; + // static const MyClass CONSTANT_NAME24; + // static const MyClass CONSTANT_NAME25; + // static const MyClass CONSTANT_NAME26; + // }; + // + // const MyClass MyClass::CONSTANT_NAME1( 1 ); + // const MyClass MyClass::CONSTANT_NAME2( 2 ); + // const MyClass MyClass::CONSTANT_NAME3( 3 ); + // const MyClass MyClass::CONSTANT_NAME4( 4 ); + // const MyClass MyClass::CONSTANT_NAME5( 5 ); + // const MyClass MyClass::CONSTANT_NAME6( 6 ); + // const MyClass MyClass::CONSTANT_NAME7( 7 ); + // const MyClass MyClass::CONSTANT_NAME8( 8 ); + // const MyClass MyClass::CONSTANT_NAME9( 9 ); + // const MyClass MyClass::CONSTANT_NAME10( 10 ); + // const MyClass MyClass::CONSTANT_NAME11( 11 ); + // const MyClass MyClass::CONSTANT_NAME12( 12 ); + // const MyClass MyClass::CONSTANT_NAME13( 13 ); + // const MyClass MyClass::CONSTANT_NAME14( 14 ); + // const MyClass MyClass::CONSTANT_NAME15( 15 ); + // const MyClass MyClass::CONSTANT_NAME16( 16 ); + // const MyClass MyClass::CONSTANT_NAME17( 17 ); + // const MyClass MyClass::CONSTANT_NAME18( 18 ); + // const MyClass MyClass::CONSTANT_NAME19( 19 ); + // const MyClass MyClass::CONSTANT_NAME20( 20 ); + // const MyClass MyClass::CONSTANT_NAME21( 21 ); + // const MyClass MyClass::CONSTANT_NAME22( 22 ); + // const MyClass MyClass::CONSTANT_NAME23( 23 ); + // const MyClass MyClass::CONSTANT_NAME24( 24 ); + // const MyClass MyClass::CONSTANT_NAME25( 25 ); + // const MyClass MyClass::CONSTANT_NAME26( 26 ); + + // // empty file + public void testOOM_529646() throws Exception { + checkBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConstructor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConstructor.java index 1f3b058d748..5dbf28390fa 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConstructor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalConstructor.java @@ -176,6 +176,9 @@ public final class EvalConstructor extends CPPDependentEvaluation { ICPPField[] fields = classType.getDeclaredFields(); for (ICPPField field : fields) { + if (field.isStatic()) { + continue; + } final Map.Entry<IBinding, ICPPEvaluation> initializer = getInitializerFromMemberInitializerList(field, exec); |