Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/SymTab/Validate.cc

    r2a6292d rd5916ce  
    13331333        void FindSpecialDeclarations::previsit( FunctionDecl * funcDecl ) {
    13341334                if ( ! dereferenceOperator ) {
    1335                         if ( funcDecl->get_name() == "*?" && funcDecl->get_linkage() == LinkageSpec::Intrinsic ) {
    1336                                 FunctionType * ftype = funcDecl->get_functionType();
    1337                                 if ( ftype->get_parameters().size() == 1 && ftype->get_parameters().front()->get_type()->get_qualifiers() == Type::Qualifiers() ) {
    1338                                         dereferenceOperator = funcDecl;
     1335                        // find and remember the intrinsic dereference operator for object pointers
     1336                        if ( funcDecl->name == "*?" && funcDecl->linkage == LinkageSpec::Intrinsic ) {
     1337                                FunctionType * ftype = funcDecl->type;
     1338                                if ( ftype->parameters.size() == 1 ) {
     1339                                        PointerType * ptrType = strict_dynamic_cast<PointerType *>( ftype->parameters.front()->get_type() );
     1340                                        if ( ptrType->base->get_qualifiers() == Type::Qualifiers() ) {
     1341                                                TypeInstType * inst = dynamic_cast<TypeInstType *>( ptrType->base );
     1342                                                if ( inst && ! inst->get_isFtype() ) {
     1343                                                        dereferenceOperator = funcDecl;
     1344                                                }
     1345                                        }
    13391346                                }
    13401347                        }
Note: See TracChangeset for help on using the changeset viewer.