Changeset eb50842


Ignore:
Timestamp:
Jun 26, 2015, 1:43:41 PM (9 years ago)
Author:
Aaron Moss <a3moss@…>
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:
937e51d
Parents:
0f19d763
Message:

Fixed pointer to pointer to const bug

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • .gitignore

    r0f19d763 reb50842  
     1# build files
     2*.[ado]
     3
     4# generated by configure
    15Makefile
    2 autom4te.cache/
     6aclocal.m4
     7autom4te.cache
    38config.h
     9config.status
    410config.log
    5 config.status
     11stamp-h1
    612driver/Makefile
     13libcfa/Makefile
     14src/Makefile
     15
     16# build directories
     17bin
     18lib
     19
     20# src executables, for lib and bin
    721driver/cc1
    8 driver/cc1.o
    922driver/cfa
    10 driver/cfa.o
    11 libcfa/Makefile
    12 libcfa/builtins.c
    13 libcfa/builtins.cf
     23src/cfa-cpp
    1424libcfa/libcfa-prelude.c
    15 libcfa/libcfa-prelude.o
    16 libcfa/libcfa.a
    17 src/*/*.d
    18 src/*/*.o
    19 src/MakeLibCfa.d
    20 src/MakeLibCfa.o
     25
     26# generated by bison and lex from cfa.y and lex.l, respectively
    2127src/Parser/cfa.output
    2228src/Parser/cfa.tab.cc
    2329src/Parser/cfa.tab.h
    2430src/Parser/lex.yy.cc
    25 src/cfa-cpp
    26 src/main.d
    27 src/main.o
    28 stamp-h1
  • src/ResolvExpr/FindOpenVars.h

    r0f19d763 reb50842  
    2121
    2222namespace ResolvExpr {
     23        // Updates open and closed variables and their associated assertions
    2324        void findOpenVars( Type *type, OpenVarSet &openVars, OpenVarSet &closedVars, AssertionSet &needAssertions, AssertionSet &haveAssertions, bool firstIsOpen );
    2425} // namespace ResolvExpr
  • src/ResolvExpr/Unify.cc

    r0f19d763 reb50842  
    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() );
     154                                newType->get_qualifiers() = typeInst->get_qualifiers();
    151155                                if ( unifyInexact( newType.get(), other, env, needAssertions, haveAssertions, openVars, widenMode & WidenMode( curClass.allowWidening, true ), indexer, common ) ) {
    152156                                        if ( common ) {
     
    279283                TypeEnvironment debugEnv( env );
    280284#endif
     285                if ( type1->get_qualifiers() != type2->get_qualifiers() ) {
     286                        return false;
     287                }
     288
    281289                bool result;
    282290                TypeInstType *var1 = dynamic_cast< TypeInstType* >( type1 );
     
    291299                bool isopen1 = var1 && ( entry1 != openVars.end() );
    292300                bool isopen2 = var2 && ( entry2 != openVars.end() );
    293                 if ( type1->get_qualifiers() != type2->get_qualifiers() ) {
    294                         return false;
    295                 } else if ( isopen1 && isopen2 && entry1->second == entry2->second ) {
     301
     302                if ( isopen1 && isopen2 && entry1->second == entry2->second ) {
    296303                        result = bindVarToVar( var1, var2, entry1->second, env, needAssertions, haveAssertions, openVars, widenMode, indexer );
    297304                } else if ( isopen1 ) {
Note: See TracChangeset for help on using the changeset viewer.