diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h
index 1918ee795350053b8f717f3d5bf4debf9001cb5c..f5e3ac42fc57463e533e6a4aa54d57792cc895b8 100644
--- a/src/shared/cplusplus/AST.h
+++ b/src/shared/cplusplus/AST.h
@@ -515,6 +515,9 @@ public:
     DeclarationAST *member_specifiers;
     unsigned rbrace_token;
 
+public: // annotations
+    Class *class_symbol;
+
 public:
     virtual unsigned firstToken() const;
     virtual unsigned lastToken() const;
diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp
index eeb59eebcc0aeb02f334c4283febe187f204e656..cb929b868caac1c68d314fc79ed7fa951983bf31 100644
--- a/src/shared/cplusplus/CheckSpecifier.cpp
+++ b/src/shared/cplusplus/CheckSpecifier.cpp
@@ -300,6 +300,7 @@ bool CheckSpecifier::visit(ClassSpecifierAST *ast)
 {
     Name *className = semantic()->check(ast->name, _scope);
     Class *klass = control()->newClass(ast->firstToken(), className);
+    ast->class_symbol = klass;
     unsigned classKey = tokenKind(ast->classkey_token);
     if (classKey == T_CLASS)
         klass->setClassKey(Class::ClassKey);
diff --git a/tests/auto/cplusplus/lookup/tst_lookup.cpp b/tests/auto/cplusplus/lookup/tst_lookup.cpp
index 12b1d1b6dfab24d2068ab0e65c6b928e086cf4ed..ecf3ae71fefe6164e1eab56cfc6d72b8fdc39481 100644
--- a/tests/auto/cplusplus/lookup/tst_lookup.cpp
+++ b/tests/auto/cplusplus/lookup/tst_lookup.cpp
@@ -1,6 +1,10 @@
 
 #include <QtTest>
 #include <QObject>
+
+#include <AST.h>
+#include <ASTVisitor.h>
+#include <TranslationUnit.h>
 #include <CppDocument.h>
 #include <LookupContext.h>
 #include <Symbols.h>
@@ -8,6 +12,29 @@
 
 CPLUSPLUS_USE_NAMESPACE
 
+class ClassSymbols: protected ASTVisitor,
+    public QMap<ClassSpecifierAST *, Class *>
+{
+public:
+    ClassSymbols(Control *control)
+        : ASTVisitor(control)
+    { }
+
+    void operator()(AST *ast)
+    { accept(ast); }
+
+protected:
+    virtual bool visit(ClassSpecifierAST *ast)
+    {
+        Class *classSymbol = ast->class_symbol;
+        Q_ASSERT(classSymbol != 0);
+
+        insert(ast, classSymbol);
+
+        return true;
+    }
+};
+
 class tst_Lookup: public QObject
 {
     Q_OBJECT
@@ -50,6 +77,17 @@ void tst_Lookup::base_class_defined_1()
 
     QCOMPARE(candidates.size(), 1);
     QCOMPARE(candidates.at(0), baseClass);
+
+    TranslationUnit *unit = doc->translationUnit();
+    QVERIFY(unit != 0);
+
+    TranslationUnitAST *ast = unit->ast()->asTranslationUnit();
+    QVERIFY(ast != 0);
+
+    ClassSymbols classSymbols(doc->control());
+    classSymbols(ast);
+
+    QCOMPARE(classSymbols.size(), 2);
 }
 
 QTEST_APPLESS_MAIN(tst_Lookup)