summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/CheckSpecifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus/CheckSpecifier.cpp')
-rw-r--r--src/shared/cplusplus/CheckSpecifier.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp
index cd26423cfd..e79f6aa0ba 100644
--- a/src/shared/cplusplus/CheckSpecifier.cpp
+++ b/src/shared/cplusplus/CheckSpecifier.cpp
@@ -296,8 +296,13 @@ bool CheckSpecifier::visit(SimpleSpecifierAST *ast)
bool CheckSpecifier::visit(ClassSpecifierAST *ast)
{
+ unsigned sourceLocation = ast->firstToken();
+
+ if (ast->name)
+ sourceLocation = ast->name->firstToken();
+
Name *className = semantic()->check(ast->name, _scope);
- Class *klass = control()->newClass(ast->firstToken(), className);
+ Class *klass = control()->newClass(sourceLocation, className);
ast->symbol = klass;
unsigned classKey = tokenKind(ast->classkey_token);
if (classKey == T_CLASS)
@@ -358,8 +363,12 @@ bool CheckSpecifier::visit(ElaboratedTypeSpecifierAST *ast)
bool CheckSpecifier::visit(EnumSpecifierAST *ast)
{
+ unsigned sourceLocation = ast->firstToken();
+ if (ast->name)
+ sourceLocation = ast->name->firstToken();
+
Name *name = semantic()->check(ast->name, _scope);
- Enum *e = control()->newEnum(ast->firstToken(), name);
+ Enum *e = control()->newEnum(sourceLocation, name);
e->setVisibility(semantic()->currentVisibility());
_scope->enterSymbol(e);
_fullySpecifiedType.setType(e);