Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/GenPoly/Box.cc

    r18070ee r801978b  
    189189                        /// Enters a new scope for type-variables, adding the type variables from ty
    190190                        void beginTypeScope( Type *ty );
     191                        /// Exits the type-variable scope
     192                        void endTypeScope();
    191193                        /// Enters a new scope for knowLayouts and knownOffsets and queues exit calls
    192194                        void beginGenericScope();
     
    196198                        UniqueName bufNamer;                           ///< Namer for VLA buffers
    197199                        Expression * addrMember = nullptr;             ///< AddressExpr argument is MemberExpr?
    198                         bool expect_func_type = false;                 ///< used to avoid recursing too deep in type decls
    199200                };
    200201
     
    12761277                        FunctionType * ftype = functionDecl->type;
    12771278                        if ( ! ftype->returnVals.empty() && functionDecl->statements ) {
    1278                                 // intrinsic functions won't be using the _retval so no need to generate it.
    1279                                 if ( functionDecl->linkage != LinkageSpec::Intrinsic && !isPrefix( functionDecl->name, "_thunk" ) && ! isPrefix( functionDecl->name, "_adapter" ) ) { // xxx - remove check for prefix once thunks properly use ctor/dtors
     1279                                if ( ! isPrefix( functionDecl->name, "_thunk" ) && ! isPrefix( functionDecl->name, "_adapter" ) ) { // xxx - remove check for prefix once thunks properly use ctor/dtors
    12801280                                        assert( ftype->returnVals.size() == 1 );
    12811281                                        DeclarationWithType * retval = ftype->returnVals.front();
     
    14181418                void PolyGenericCalculator::beginGenericScope() {
    14191419                        GuardScope( *this );
    1420                         // We expect the first function type see to be the type relating to this scope
    1421                         // but any further type is probably some unrelated function pointer
    1422                         // keep track of which is the first
    1423                         GuardValue( expect_func_type );
    1424                         expect_func_type = true;
    14251420                }
    14261421
     
    14721467                void PolyGenericCalculator::premutate( FunctionType *funcType ) {
    14731468                        beginTypeScope( funcType );
    1474 
    1475                         GuardValue( expect_func_type );
    1476 
    1477                         if(!expect_func_type) {
    1478                                 GuardAction( [this]() {
    1479                                         knownLayouts.endScope();
    1480                                         knownOffsets.endScope();
    1481                                 });
    1482                                 // If this is the first function type we see
    1483                                 // Then it's the type of the declaration and we care about it
    1484                                 knownLayouts.beginScope();
    1485                                 knownOffsets.beginScope();
    1486                         }
    1487 
    1488                         // The other functions type we will see in this scope are probably functions parameters
    1489                         // they don't help us with the layout and offsets so don't mark them as known in this scope
    1490                         expect_func_type = false;
    14911469
    14921470                        // make sure that any type information passed into the function is accounted for
     
    17671745                                }
    17681746
    1769                                 // std::cout << "TRUE 2" << std::endl;
    1770 
    17711747                                return true;
    17721748                        } else if ( UnionInstType *unionTy = dynamic_cast< UnionInstType* >( ty ) ) {
Note: See TracChangeset for help on using the changeset viewer.