Ignore:
Timestamp:
Jun 26, 2015, 11:48:28 PM (9 years ago)
Author:
Peter A. Buhr <pabuhr@…>
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, string, with_gc
Children:
2871210
Parents:
721f17a (diff), 937e51d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg2:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Unify.cc

    r721f17a r0df292b  
    7373        };
    7474
     75        /// Attempts an inexact unification of type1 and type2.
     76        /// Returns false if no such unification; if the types can be unified, sets common (unless they unify exactly and have identical type qualifiers)
    7577        bool unifyInexact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer, Type *&common );
    7678        bool unifyExact( Type *type1, Type *type2, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer );
     
    148150                        if ( curClass.type ) {
    149151                                Type *common = 0;
     152                                // attempt to unify equivalence class type (which has qualifiers stripped, so they must be restored) with the type to bind to
    150153                                std::auto_ptr< Type > newType( curClass.type->clone() );
    151154                                newType->get_qualifiers() = typeInst->get_qualifiers();
     
    280283                TypeEnvironment debugEnv( env );
    281284#endif
     285                if ( type1->get_qualifiers() != type2->get_qualifiers() ) {
     286                        return false;
     287                }
     288
    282289                bool result;
    283290                TypeInstType *var1 = dynamic_cast< TypeInstType* >( type1 );
     
    292299                bool isopen1 = var1 && ( entry1 != openVars.end() );
    293300                bool isopen2 = var2 && ( entry2 != openVars.end() );
    294                 if ( type1->get_qualifiers() != type2->get_qualifiers() ) {
    295                         return false;
    296                 } else if ( isopen1 && isopen2 && entry1->second == entry2->second ) {
     301
     302                if ( isopen1 && isopen2 && entry1->second == entry2->second ) {
    297303                        result = bindVarToVar( var1, var2, entry1->second, env, needAssertions, haveAssertions, openVars, widenMode, indexer );
    298304                } else if ( isopen1 ) {
Note: See TracChangeset for help on using the changeset viewer.