Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SymTab/Validate.cc

    r95d09bdb r8a3ecb9  
    8585                void previsit( AlignofExpr * );
    8686                void previsit( UntypedOffsetofExpr * );
    87                 void previsit( CompoundLiteralExpr * );
    8887                void handleType( Type * );
    8988        };
     
    351350        }
    352351
    353         void HoistTypeDecls::previsit( CompoundLiteralExpr * expr ) {
    354                 handleType( expr->result );
    355         }
    356 
    357352
    358353        Type * FixQualifiedTypes::postmutate( QualifiedType * qualType ) {
     
    368363                                auto base = td->base;
    369364                                assert( base );
    370                                 return base->clone();
     365                                Type * ret = base->clone();
     366                                ret->get_qualifiers() = qualType->get_qualifiers();
     367                                return ret;
    371368                        } else {
    372369                                // .T => T is not a type name
     
    388385                                        if ( StructDecl * aggr = dynamic_cast< StructDecl * >( member ) ) {
    389386                                                if ( aggr->name == inst->name ) {
     387                                                        // TODO: is this case, and other non-TypeInstType cases, necessary?
    390388                                                        return new StructInstType( qualType->get_qualifiers(), aggr );
    391389                                                }
     
    404402                                        }
    405403                                } else if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( child ) ) {
    406                                         // struct typedefs are being replaced by forward decls too early; move it to hoist struct
     404                                        // name on the right is a typedef
    407405                                        if ( NamedTypeDecl * aggr = dynamic_cast< NamedTypeDecl * > ( member ) ) {
    408406                                                if ( aggr->name == inst->name ) {
    409407                                                        assert( aggr->base );
    410                                                         return aggr->base->clone();
     408                                                        Type * ret = aggr->base->clone();
     409                                                        ret->get_qualifiers() = qualType->get_qualifiers();
     410                                                        return ret;
    411411                                                }
    412412                                        }
Note: See TracChangeset for help on using the changeset viewer.