Ignore:
Timestamp:
Aug 25, 2016, 2:03:29 PM (6 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, resolv-new, with_gc
Children:
32a2a99
Parents:
486341f
git-author:
Rob Schluntz <rschlunt@…> (08/25/16 11:09:18)
git-committer:
Rob Schluntz <rschlunt@…> (08/25/16 14:03:29)
Message:

change constructor warnings into errors and update the test output

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/InitTweak/FixInit.cc

    r486341f ra2a8d2a6  
    188188                        virtual void visit( ApplicationExpr * appExpr );
    189189
     190                        SemanticError errors;
    190191                  private:
    191192                        void handleFirstParam( Expression * firstParam );
     193                        template< typename... Params >
     194                        void emit( const Params &... params );
    192195
    193196                        FunctionDecl * function = 0;
     
    258261                                WarnStructMembers warner;
    259262                                acceptAll( translationUnit, warner );
     263
     264                                // visitor doesn't throw so that it can collect all errors
     265                                if ( ! warner.errors.isEmpty() ) {
     266                                        throw warner.errors;
     267                                }
    260268                        }
    261269                }
     
    735743                        for ( DeclarationWithType * member : unhandled ) {
    736744                                // emit a warning for each unhandled member
    737                                 warn( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", member ", member->get_name(), " may not have been ", isConstructor( funcDecl->get_name() ) ? "constructed" : "destructed" );
     745                                emit( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", member ", member->get_name(), " may not have been ", isConstructor( funcDecl->get_name() ) ? "constructed" : "destructed" );
    738746                        }
    739747
     748                        // need to steal the errors before they're lost
     749                        old.errors.append( errors );
    740750                        *this = old;
    741751                }
     
    797807                                                        if ( unhandled.count( memberExpr->get_member() ) ) {
    798808                                                                // emit a warning because a member was used before it was constructed
    799                                                                 warn( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", member ", memberExpr->get_member()->get_name(), " used before being constructed" );
     809                                                                emit( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", member ", memberExpr->get_member()->get_name(), " used before being constructed" );
    800810                                                        }
    801811                                                }
     
    805815                        Parent::visit( memberExpr );
    806816                }
     817
     818                template< typename Visitor, typename... Params >
     819                void error( Visitor & v, const Params &... params ) {
     820                        v.errors.append( toString( params... ) );
     821                }
     822
     823                template< typename... Params >
     824                void WarnStructMembers::emit( const Params &... params ) {
     825                        // toggle warnings vs. errors here.
     826                        // warn( params... );
     827                        error( *this, params... );
     828                }
    807829        } // namespace
    808830} // namespace InitTweak
Note: See TracChangeset for help on using the changeset viewer.