Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/InitTweak/FixInit.cc

    r68f9c43 rb8baa37  
    454454                                resolved->env = nullptr;
    455455                        } // if
     456                        delete stmt;
    456457                        if ( TupleAssignExpr * assign = dynamic_cast< TupleAssignExpr * >( resolved ) ) {
    457458                                // fix newly generated StmtExpr
     
    553554                                result = result->clone();
    554555                                env->apply( result );
    555                                 if ( ! InitTweak::isConstructable( result ) ) return;
     556                                if ( ! InitTweak::isConstructable( result ) ) {
     557                                        delete result;
     558                                        return;
     559                                }
    556560
    557561                                // create variable that will hold the result of the stmt expr
     
    648652                        std::swap( impCpCtorExpr->env, callExpr->env );
    649653                        assert( impCpCtorExpr->env == nullptr );
     654                        delete impCpCtorExpr;
    650655
    651656                        if ( returnDecl ) {
     
    706711                        if ( unqMap.count( unqExpr->get_id() ) ) {
    707712                                // take data from other UniqueExpr to ensure consistency
     713                                delete unqExpr->get_expr();
    708714                                unqExpr->set_expr( unqMap[unqExpr->get_id()]->get_expr()->clone() );
     715                                delete unqExpr->get_result();
    709716                                unqExpr->set_result( maybeClone( unqExpr->get_expr()->get_result() ) );
    710717                                if ( unqCount[ unqExpr->get_id() ] == 0 ) {  // insert destructor after the last use of the unique expression
     
    817824                                                        // create a new object which is never used
    818825                                                        static UniqueName dummyNamer( "_dummy" );
    819                                                         return new ObjectDecl{
    820                                                                 dummyNamer.newName(), Type::StorageClasses( Type::Static ), LinkageSpec::Cforall, 0,
    821                                                                 new PointerType{ Type::Qualifiers(), new VoidType( Type::Qualifiers() ) },
    822                                                                 0, std::list< Attribute * >{ new Attribute("unused") } };
     826                                                        ObjectDecl * dummy = new ObjectDecl( dummyNamer.newName(), Type::StorageClasses( Type::Static ), LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new VoidType( Type::Qualifiers() ) ), 0, std::list< Attribute * >{ new Attribute("unused") } );
     827                                                        delete ctorInit;
     828                                                        return dummy;
    823829                                                }
    824830                                        } else {
     
    846852                                        objDecl->init = nullptr;
    847853                                } // if
     854                                delete ctorInit;
    848855                        } // if
    849856                        return objDecl;
     
    12211228                        ObjectDecl * tmp = ObjectDecl::newObject( tempNamer.newName(), callExpr->args.front()->result->clone(), nullptr );
    12221229                        declsToAddBefore.push_back( tmp );
     1230                        delete ctorExpr;
    12231231
    12241232                        // build assignment and replace constructor's first argument with new temporary
     
    12291237                        // resolve assignment and dispose of new env
    12301238                        ResolvExpr::findVoidExpression( assign, indexer );
     1239                        delete assign->env;
    12311240                        assign->env = nullptr;
    12321241
Note: See TracChangeset for help on using the changeset viewer.