diff --git a/src/libs/3rdparty/cplusplus/Symbol.cpp b/src/libs/3rdparty/cplusplus/Symbol.cpp index b7caa001c96..b6216f002c8 100644 --- a/src/libs/3rdparty/cplusplus/Symbol.cpp +++ b/src/libs/3rdparty/cplusplus/Symbol.cpp @@ -237,6 +237,11 @@ void Symbol::setScope(Scope *scope) _scope = scope; } +void Symbol::resetScope() +{ + _scope = 0; +} + Namespace *Symbol::enclosingNamespace() const { for (Scope *s = _scope; s; s = s->enclosingScope()) { diff --git a/src/libs/3rdparty/cplusplus/Symbol.h b/src/libs/3rdparty/cplusplus/Symbol.h index 34231207456..a995f436312 100644 --- a/src/libs/3rdparty/cplusplus/Symbol.h +++ b/src/libs/3rdparty/cplusplus/Symbol.h @@ -291,6 +291,7 @@ public: Block *enclosingBlock() const; void setScope(Scope *enclosingScope); // ### make me private + void resetScope(); // ### make me private void setSourceLocation(unsigned sourceLocation, TranslationUnit *translationUnit); // ### make me private void visitSymbol(SymbolVisitor *visitor); diff --git a/src/libs/cplusplus/CppRewriter.cpp b/src/libs/cplusplus/CppRewriter.cpp index ba975b3cd13..8948b9297ef 100644 --- a/src/libs/cplusplus/CppRewriter.cpp +++ b/src/libs/cplusplus/CppRewriter.cpp @@ -151,6 +151,9 @@ public: newArg->setName(rewrite->rewriteName(arg->name())); newArg->setType(rewrite->rewriteType(arg->type())); + // the copy() call above set the scope to 'type' + // reset it to 0 before adding addMember to avoid assert + newArg->resetScope(); funTy->addMember(newArg); }