diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java index 57f2c350297..b57ac7e4338 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugs.java @@ -1334,4 +1334,13 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas assertTrue(name instanceof IASTImplicitName); assertEquals("base", name.resolveBinding().getOwner().getName()); } + + // class A { + // class B; + // }; + // class D : public A {}; + // class D::B {}; + public void _testInvalidOwner_412766() throws Exception { + checkBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java index d5bdbb357c8..63fc781e11c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPLinkage.java @@ -541,9 +541,14 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants { if (parent instanceof IPDOMCPPClassType) { if (originalBinding instanceof IEnumerator) originalBinding = originalBinding.getOwner(); - int visibility = getVisibility(originalBinding); - if (visibility >= 0) { - ((IPDOMCPPClassType) parent).addMember(binding, visibility); + try { + int visibility = getVisibility(originalBinding); + if (visibility >= 0) { + ((IPDOMCPPClassType) parent).addMember(binding, visibility); + return; + } + } catch (IllegalArgumentException e) { + CCorePlugin.log(e); return; } }