Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java9
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java5
2 files changed, 9 insertions, 5 deletions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java
index 6be6f35ccd3..5cee2cbb004 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateId.java
@@ -65,13 +65,18 @@ public class CPPASTTemplateId extends CPPASTNode implements ICPPASTTemplateId, I
private IASTNode [] templateArguments = null;
private IBinding binding = null;
+ private boolean resolving = false;
/* (non-Javadoc)
* @see org.eclipse.cdt.core.dom.ast.IASTName#resolveBinding()
*/
public IBinding resolveBinding() {
- if( binding == null )
- binding = CPPTemplates.createBinding( this );
+ if (binding == null && !resolving) {
+ // protect for infinite recursion
+ resolving = true;
+ binding = CPPTemplates.createBinding( this );
+ resolving = false;
+ }
return binding;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java
index 54eddf1aa53..f5b40b5c255 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassScope.java
@@ -255,9 +255,8 @@ public class CPPClassScope extends CPPScope implements ICPPClassScope {
Object obj = set.keyAt( i );
if( obj instanceof IASTName ){
IASTName n = (IASTName) obj;
- binding = n.getBinding();
- if( binding != null || forceResolve ){
- binding = n.resolveBinding();
+ binding = forceResolve ? n.resolveBinding() : n.getBinding();
+ if( binding != null ) {
set.remove( n );
set.put( binding );
i--;

Back to the top