Ignore:
Timestamp:
Aug 18, 2020, 4:26:19 PM (4 years ago)
Author:
Fangren Yu <f37yu@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
13d33a75
Parents:
4fe6224
Message:

fix lost typeinst in resolved assertions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Unify.cc

    r4fe6224 ref9988b  
    791791                        for ( const ast::DeclWithType * d : src ) {
    792792                                ast::Pass<TtypeExpander_new> expander{ env };
    793                                 d = d->accept( expander );
    794                                 auto types = flatten( d->get_type() );
     793                                // TtypeExpander pass is impure (may mutate nodes in place)
     794                                // need to make nodes shared to prevent accidental mutation
     795                                ast::ptr<ast::DeclWithType> dc = d;
     796                                dc = dc->accept( expander );
     797                                auto types = flatten( dc->get_type() );
    795798                                for ( ast::ptr< ast::Type > & t : types ) {
    796799                                        // outermost const, volatile, _Atomic qualifiers in parameters should not play
     
    801804                                        // requirements than a non-mutex function
    802805                                        remove_qualifiers( t, ast::CV::Const | ast::CV::Volatile | ast::CV::Atomic );
    803                                         dst.emplace_back( new ast::ObjectDecl{ d->location, "", t } );
     806                                        dst.emplace_back( new ast::ObjectDecl{ dc->location, "", t } );
    804807                                }
    805808                        }
     
    11101113
    11111114                        ast::Pass<TtypeExpander_new> expander{ tenv };
    1112                         const ast::Type * flat = tuple->accept( expander );
    1113                         const ast::Type * flat2 = tuple2->accept( expander );
     1115
     1116                        ast::ptr<ast::TupleType> tuplec = tuple;
     1117                        ast::ptr<ast::TupleType> tuple2c = tuple2;
     1118                        const ast::Type * flat = tuplec->accept( expander );
     1119                        const ast::Type * flat2 = tuple2c->accept( expander );
    11141120
    11151121                        auto types = flatten( flat );
Note: See TracChangeset for help on using the changeset viewer.