From f81b7832691426ad18ccf9ecc58988acdddda5bc Mon Sep 17 00:00:00 2001 From: Thomas Corbat Date: Thu, 10 Jul 2014 13:20:38 +0200 Subject: [PATCH] Bug 84144 - Occurrence marking for label references. --- .../dom/parser/cpp/semantics/CPPVisitor.java | 2 +- .../resources/ceditor/occurrences.cpp | 7 +++++ .../cdt/ui/tests/text/MarkOccurrenceTest.java | 28 ++++++++++++++++++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index 577570bb547..5054fa69efe 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -1713,7 +1713,7 @@ public class CPPVisitor extends ASTQueries { switch (kind) { case KIND_LABEL: - if (prop == IASTGotoStatement.NAME) + if (prop == IASTGotoStatement.NAME || prop == IASTIdExpression.ID_NAME) break; return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.ui.tests/resources/ceditor/occurrences.cpp b/core/org.eclipse.cdt.ui.tests/resources/ceditor/occurrences.cpp index 913e82a9345..c63250e4f5c 100644 --- a/core/org.eclipse.cdt.ui.tests/resources/ceditor/occurrences.cpp +++ b/core/org.eclipse.cdt.ui.tests/resources/ceditor/occurrences.cpp @@ -127,3 +127,10 @@ ConstantTemplate<5> c52; ConstantTemplate<4> c4; const int c= c5.getNumber(0); + +void functionWithLabelReferenceGoto() { + void * labelPointer = &&referencedLabel; + goto *labelPointer; + referencedLabel: + return; +} \ No newline at end of file diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/MarkOccurrenceTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/MarkOccurrenceTest.java index b3b6127c0c3..469aeba823a 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/MarkOccurrenceTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/MarkOccurrenceTest.java @@ -533,7 +533,33 @@ public class MarkOccurrenceTest extends BaseUITestCase { assertOccurrences(0, 0); assertOccurrencesInWidget(); } - + + public void testMarkLabelReference() { + try { + fMatch = fFindReplaceDocumentAdapter.find(0, "labelPointer", true, true, true, false); + } catch (BadLocationException e) { + fail(); + } + + fEditor.selectAndReveal(fMatch.getOffset(), fMatch.getLength()); + + assertOccurrences(2, 1); + assertOccurrencesInWidget(); + } + + public void testMarkReferencedLabel() { + try { + fMatch = fFindReplaceDocumentAdapter.find(0, "referencedLabel", true, true, true, false); + } catch (BadLocationException e) { + fail(); + } + + fEditor.selectAndReveal(fMatch.getOffset(), fMatch.getLength()); + + assertOccurrences(2, 0); + assertOccurrencesInWidget(); + } + private void assertOccurrencesInWidget() { EditorTestHelper.runEventQueue(100);