summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/CheckDeclaration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus/CheckDeclaration.cpp')
-rw-r--r--src/shared/cplusplus/CheckDeclaration.cpp34
1 files changed, 18 insertions, 16 deletions
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index ef71c79809..038d70b9a4 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -304,26 +304,28 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast)
ast->symbol = fun;
_scope->enterSymbol(fun);
- if (ast->ctor_initializer) {
- bool looksLikeCtor = false;
- if (ty.isValid() || ! fun->identity())
- looksLikeCtor = false;
- else if (fun->identity()->isNameId() || fun->identity()->isTemplateNameId())
- looksLikeCtor = true;
-
- if (! looksLikeCtor) {
- translationUnit()->error(ast->ctor_initializer->firstToken(),
- "only constructors take base initializers");
+ if (! semantic()->skipFunctionBodies()) {
+ if (ast->ctor_initializer) {
+ bool looksLikeCtor = false;
+ if (ty.isValid() || ! fun->identity())
+ looksLikeCtor = false;
+ else if (fun->identity()->isNameId() || fun->identity()->isTemplateNameId())
+ looksLikeCtor = true;
+
+ if (! looksLikeCtor) {
+ translationUnit()->error(ast->ctor_initializer->firstToken(),
+ "only constructors take base initializers");
+ }
}
- }
- const int previousVisibility = semantic()->switchVisibility(Symbol::Public);
- const int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod);
+ const int previousVisibility = semantic()->switchVisibility(Symbol::Public);
+ const int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod);
- semantic()->check(ast->function_body, fun->members());
+ semantic()->check(ast->function_body, fun->members());
- semantic()->switchMethodKey(previousMethodKey);
- semantic()->switchVisibility(previousVisibility);
+ semantic()->switchMethodKey(previousMethodKey);
+ semantic()->switchVisibility(previousVisibility);
+ }
return false;
}