Ignore:
Timestamp:
May 30, 2016, 12:51:22 PM (8 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
f1b1e4c
Parents:
677c1be
Message:

function scoped const objects can be constructed, add missing copy constructors to Initializer.cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/InitTweak/GenInit.cc

    r677c1be r70f89d00  
    143143                if ( tryConstruct( objDecl ) ) {
    144144                        if ( inFunction ) {
     145                                // remove qualifiers so that const objects can be initialized, and attach the
     146                                // qualifiers to ConstructorInit so that they can be replaced after resolving
     147                                Type * type = objDecl->get_type();
     148                                Type::Qualifiers qualifiers = type->get_qualifiers();
     149                                type->get_qualifiers() = Type::Qualifiers();
     150
    145151                                if ( ArrayType * at = dynamic_cast< ArrayType * >( objDecl->get_type() ) ) {
    146152                                        // call into makeArrayFunction from validate.cc to generate calls to ctor/dtor for each element of array
     
    165171                                                assert( dtor.size() == 1 );
    166172
    167                                                 objDecl->set_init( new ConstructorInit( ctor.front(), dtor.front(), objDecl->get_init() ) );
     173                                                objDecl->set_init( new ConstructorInit( ctor.front(), dtor.front(), objDecl->get_init(), objDecl, qualifiers ) );
    168174                                        } else {
    169175                                                // array came with an initializer list: initialize each element
     
    185191                                        ExprStmt * ctorStmt = new ExprStmt( noLabels, ctor );
    186192                                        ExprStmt * dtorStmt = new ExprStmt( noLabels, dtor );
    187                                         objDecl->set_init( new ConstructorInit( ctorStmt, dtorStmt, objDecl->get_init() ) );
     193                                        objDecl->set_init( new ConstructorInit( ctorStmt, dtorStmt, objDecl->get_init(), objDecl, qualifiers ) );
    188194                                }
    189195                        }
Note: See TracChangeset for help on using the changeset viewer.