Changes in / [ea23d10:424931d]


Ignore:
Location:
src
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    rea23d10 r424931d  
    8989        }
    9090
    91         CodeGenerator::CodeGenerator( std::ostream & os, bool pretty ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ), pretty( pretty ) {}
     91        CodeGenerator::CodeGenerator( std::ostream & os, bool mangle ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ), mangle( mangle ) {}
    9292
    9393        CodeGenerator::CodeGenerator( std::ostream & os, std::string init, int indentation, bool infunp )
     
    102102
    103103        string CodeGenerator::mangleName( DeclarationWithType * decl ) {
    104                 if ( pretty ) return decl->get_name();
     104                if ( ! mangle ) return decl->get_name();
    105105                if ( decl->get_mangleName() != "" ) {
    106106                        // need to incorporate scope level in order to differentiate names for destructors
     
    140140                        output << "_Noreturn ";
    141141                } // if
    142                 output << genType( functionDecl->get_functionType(), mangleName( functionDecl ), pretty );
     142                output << genType( functionDecl->get_functionType(), mangleName( functionDecl ) );
    143143
    144144                // how to get this to the Functype?
     
    161161
    162162                handleStorageClass( objectDecl );
    163                 output << genType( objectDecl->get_type(), mangleName( objectDecl ), pretty );
     163                output << genType( objectDecl->get_type(), mangleName( objectDecl ) );
    164164
    165165                asmName( objectDecl );
     
    178178        void CodeGenerator::handleAggregate( AggregateDecl * aggDecl ) {
    179179                genAttributes( aggDecl->get_attributes() );
    180 
     180               
    181181                if ( aggDecl->get_name() != "" )
    182182                        output << aggDecl->get_name();
     
    249249                assert( false && "Typedefs are removed and substituted in earlier passes." );
    250250                //output << "typedef ";
    251                 //output << genType( typeDecl->get_base(), typeDecl->get_name(), pretty );
     251                //output << genType( typeDecl->get_base(), typeDecl->get_name() );
    252252        }
    253253
     
    258258                output << "extern unsigned long " << typeDecl->get_name();
    259259                if ( typeDecl->get_base() ) {
    260                         output << " = sizeof( " << genType( typeDecl->get_base(), "", pretty ) << " )";
     260                        output << " = sizeof( " << genType( typeDecl->get_base(), "" ) << " )";
    261261                } // if
    262262        }
     
    552552                        // at least one result type of cast, but not an lvalue
    553553                        output << "(";
    554                         output << genType( castExpr->get_result(), "", pretty );
     554                        output << genType( castExpr->get_result(), "" );
    555555                        output << ")";
    556556                } else {
     
    592592                output << "sizeof(";
    593593                if ( sizeofExpr->get_isType() ) {
    594                         output << genType( sizeofExpr->get_type(), "", pretty );
     594                        output << genType( sizeofExpr->get_type(), "" );
    595595                } else {
    596596                        sizeofExpr->get_expr()->accept( *this );
     
    604604                output << "__alignof__(";
    605605                if ( alignofExpr->get_isType() ) {
    606                         output << genType( alignofExpr->get_type(), "", pretty );
     606                        output << genType( alignofExpr->get_type(), "" );
    607607                } else {
    608608                        alignofExpr->get_expr()->accept( *this );
     
    618618                // use GCC builtin
    619619                output << "__builtin_offsetof(";
    620                 output << genType( offsetofExpr->get_type(), "", pretty );
     620                output << genType( offsetofExpr->get_type(), "" );
    621621                output << ", " << mangleName( offsetofExpr->get_member() );
    622622                output << ")";
     
    680680        void CodeGenerator::visit( CompoundLiteralExpr *compLitExpr ) {
    681681                assert( compLitExpr->get_type() && dynamic_cast< ListInit * > ( compLitExpr->get_initializer() ) );
    682                 output << "(" << genType( compLitExpr->get_type(), "", pretty ) << ")";
     682                output << "(" << genType( compLitExpr->get_type(), "" ) << ")";
    683683                compLitExpr->get_initializer()->accept( *this );
    684684        }
  • src/CodeGen/CodeGenerator.h

    rea23d10 r424931d  
    3030                static int tabsize;
    3131
    32                 CodeGenerator( std::ostream &os, bool pretty = false );
     32                CodeGenerator( std::ostream &os, bool mangle = true );
    3333                CodeGenerator( std::ostream &os, std::string, int indent = 0, bool infun = false );
    3434                CodeGenerator( std::ostream &os, char *, int indent = 0, bool infun = false );
     
    119119                std::ostream &output;
    120120                LabelPrinter printLabels;
    121                 bool pretty = false;  // pretty print
     121                bool mangle = true;
    122122
    123123                void printDesignators( std::list< Expression * > & );
  • src/CodeGen/GenType.cc

    rea23d10 r424931d  
    2828        class GenType : public Visitor {
    2929          public:
    30                 GenType( const std::string &typeString, bool pretty = false );
     30                GenType( const std::string &typeString, bool mangle = true );
    3131                std::string get_typeString() const { return typeString; }
    3232                void set_typeString( const std::string &newValue ) { typeString = newValue; }
     
    5151
    5252                std::string typeString;
    53                 bool pretty = false; // pretty print
     53                bool mangle = true;
    5454        };
    5555
    56         std::string genType( Type *type, const std::string &baseString, bool pretty ) {
    57                 GenType gt( baseString, pretty );
     56        std::string genType( Type *type, const std::string &baseString, bool mangle ) {
     57                GenType gt( baseString, mangle );
    5858                std::ostringstream os;
    59 
     59               
    6060                if ( ! type->get_attributes().empty() ) {
    61                         CodeGenerator cg( os, pretty );
     61                        CodeGenerator cg( os, mangle );
    6262                        cg.genAttributes( type->get_attributes() );
    6363                } // if
     
    6767        }
    6868
    69   std::string genPrettyType( Type * type, const std::string & baseString ) {
    70         return genType( type, baseString, true );
    71   }
    72 
    73         GenType::GenType( const std::string &typeString, bool pretty ) : typeString( typeString ), pretty( pretty ) {}
     69        GenType::GenType( const std::string &typeString, bool mangle ) : typeString( typeString ), mangle( mangle ) {}
    7470
    7571        void GenType::visit( VoidType *voidType ) {
     
    112108                } // if
    113109                if ( dimension != 0 ) {
    114                         CodeGenerator cg( os, pretty );
     110                        CodeGenerator cg( os, mangle );
    115111                        dimension->accept( cg );
    116112                } else if ( isVarLen ) {
     
    166162                        } // if
    167163                } else {
    168                         CodeGenerator cg( os, pretty );
     164                        CodeGenerator cg( os, mangle );
    169165                        os << "(" ;
    170166
     
    207203
    208204        void GenType::visit( TupleType * tupleType ) {
    209                 assertf( pretty, "Tuple types should not make it to Code Gen." );
     205                assertf( ! mangle, "Tuple types should not make it to Code Gen." );
    210206                Visitor::visit( tupleType );
    211                 unsigned int i = 0;
    212                 std::ostringstream os;
    213                 os << "[";
    214                 for ( Type * t : *tupleType ) {
    215                         i++;
    216                         os << genType( t, "", pretty ) << (i == tupleType->size() ? "" : ", ");
    217                 }
    218                 os << "]";
    219                 typeString = os.str() + typeString;
    220207        }
    221208
     
    227214        void GenType::visit( ZeroType *zeroType ) {
    228215                // ideally these wouldn't hit codegen at all, but should be safe to make them ints
    229                 typeString = (pretty ? "zero_t " : "long int ") + typeString;
     216                typeString = "long int " + typeString;
    230217                handleQualifiers( zeroType );
    231218        }
     
    233220        void GenType::visit( OneType *oneType ) {
    234221                // ideally these wouldn't hit codegen at all, but should be safe to make them ints
    235                 typeString = (pretty ? "one_t " : "long int ") + typeString;
     222                typeString = "long int " + typeString;
    236223                handleQualifiers( oneType );
    237224        }
  • src/CodeGen/GenType.h

    rea23d10 r424931d  
    2121
    2222namespace CodeGen {
    23         std::string genType( Type *type, const std::string &baseString, bool pretty = false );
    24   std::string genPrettyType( Type * type, const std::string & baseString );
     23        std::string genType( Type *type, const std::string &baseString, bool mangle = true );
    2524} // namespace CodeGen
    2625
  • src/CodeGen/Generate.cc

    rea23d10 r424931d  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Generate.cc --
     7// Generate.cc -- 
    88//
    99// Author           : Richard C. Bilson
     
    2626
    2727namespace CodeGen {
    28         void generate( std::list< Declaration* > translationUnit, std::ostream &os, bool doIntrinsics, bool pretty ) {
    29                 CodeGen::CodeGenerator cgv( os, pretty );
     28        void generate( std::list< Declaration* > translationUnit, std::ostream &os, bool doIntrinsics ) {
     29                CodeGen::CodeGenerator cgv( os );
    3030
    3131                for ( std::list<Declaration *>::iterator i = translationUnit.begin(); i != translationUnit.end();  i++ ) {
  • src/CodeGen/Generate.h

    rea23d10 r424931d  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // Generate.h --
     7// Generate.h -- 
    88//
    99// Author           : Richard C. Bilson
     
    2424namespace CodeGen {
    2525        /// Generates code
    26         void generate( std::list< Declaration* > translationUnit, std::ostream &os, bool doIntrinsics, bool pretty );
     26        void generate( std::list< Declaration* > translationUnit, std::ostream &os, bool doIntrinsics );
    2727} // namespace CodeGen
    2828
  • src/GenPoly/Box.cc

    rea23d10 r424931d  
    13071307                                }
    13081308                        }
    1309                         // errors should have been caught by this point, remove initializers from parameters to allow correct codegen of default arguments
    1310                         for ( Declaration * param : functionDecl->get_functionType()->get_parameters() ) {
    1311                                 if ( ObjectDecl * obj = dynamic_cast< ObjectDecl * >( param ) ) {
    1312                                         delete obj->get_init();
    1313                                         obj->set_init( nullptr );
    1314                                 }
    1315                         }
    13161309                        return functionDecl;
    13171310                }
  • src/InitTweak/FixInit.cc

    rea23d10 r424931d  
    104104                        virtual void visit( CompoundStmt *compoundStmt ) override;
    105105                        virtual void visit( DeclStmt *stmt ) override;
    106 
    107                         // don't go into other functions
    108                         virtual void visit( FunctionDecl *decl ) override {}
    109 
    110106                  protected:
    111107                        ObjectSet curVars;
     
    170166                        typedef std::list< OrderedDecls > OrderedDeclsStack;
    171167
    172                         InsertDtors( LabelFinder & finder ) : finder( finder ), labelVars( finder.vars ) {}
     168                        InsertDtors( LabelFinder & finder ) : labelVars( finder.vars ) {}
    173169
    174170                        using Parent::visit;
    175171
    176172                        virtual void visit( ObjectDecl * objDecl ) override;
    177                         virtual void visit( FunctionDecl * funcDecl ) override;
    178173
    179174                        virtual void visit( CompoundStmt * compoundStmt ) override;
     
    183178                        void handleGoto( BranchStmt * stmt );
    184179
    185                         LabelFinder & finder;
    186180                        LabelFinder::LabelMap & labelVars;
    187181                        OrderedDeclsStack reverseDeclOrder;
     
    324318                        LabelFinder finder;
    325319                        InsertDtors inserter( finder );
     320                        acceptAll( translationUnit, finder );
    326321                        acceptAll( translationUnit, inserter );
    327322                }
     
    783778                }
    784779
    785                 void ObjDeclCollector::visit( CompoundStmt * compoundStmt ) {
     780                void ObjDeclCollector::visit( CompoundStmt *compoundStmt ) {
    786781                        std::set< ObjectDecl * > prevVars = curVars;
    787782                        Parent::visit( compoundStmt );
     
    789784                }
    790785
    791                 void ObjDeclCollector::visit( DeclStmt * stmt ) {
     786                void ObjDeclCollector::visit( DeclStmt *stmt ) {
    792787                        // keep track of all variables currently in scope
    793788                        if ( ObjectDecl * objDecl = dynamic_cast< ObjectDecl * > ( stmt->get_decl() ) ) {
     
    833828                        } // if
    834829                        Parent::visit( objDecl );
    835                 }
    836 
    837                 template< typename Visitor >
    838                 void handleFuncDecl( FunctionDecl * funcDecl, Visitor & visitor ) {
    839                         maybeAccept( funcDecl->get_functionType(), visitor );
    840                         acceptAll( funcDecl->get_oldDecls(), visitor );
    841                         maybeAccept( funcDecl->get_statements(), visitor );
    842                 }
    843 
    844                 void InsertDtors::visit( FunctionDecl * funcDecl ) {
    845                         // each function needs to have its own set of labels
    846                         ValueGuard< LabelFinder::LabelMap > oldLabels( labelVars );
    847                         labelVars.clear();
    848                         handleFuncDecl( funcDecl, finder );
    849 
    850                         // all labels for this function have been collected, insert destructors as appropriate.
    851                         // can't be Parent::mutate, because ObjDeclCollector bottoms out on FunctionDecl
    852                         handleFuncDecl( funcDecl, *this );
    853830                }
    854831
     
    975952                        std::set_difference( usedUninit.begin(), usedUninit.end(), unhandled.begin(), unhandled.end(), std::inserter( diff, diff.begin() ) );
    976953                        for ( DeclarationWithType * member : diff ) {
    977                                 emit( "in ", CodeGen::genPrettyType( function->get_functionType(), function->get_name() ), ", field ", member->get_name(), " used before being constructed" );
     954                                emit( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", field ", member->get_name(), " used before being constructed" );
    978955                        }
    979956
     
    1020997                                                        }
    1021998                                                } catch ( SemanticError & error ) {
    1022                                                         emit( "in ", CodeGen::genPrettyType( function->get_functionType(), function->get_name() ), ", field ", field->get_name(), " not explicitly ", isCtor ? "constructed" : "destructed",  " and no ", isCtor ? "default constructor" : "destructor", " found" );
     999                                                        emit( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", field ", field->get_name(), " not explicitly ", isCtor ? "constructed" : "destructed",  " and no ", isCtor ? "default constructor" : "destructor", " found" );
    10231000                                                }
    10241001                                        }
  • src/ResolvExpr/AlternativeFinder.cc

    rea23d10 r424931d  
    403403                        // End of actuals - Handle default values
    404404                        if ( SingleInit *si = dynamic_cast<SingleInit *>( defaultValue )) {
    405                                 if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( si->get_value() ) ) {
    406                                         // so far, only constant expressions are accepted as default values
    407                                         if ( ConstantExpr *cnstexpr = dynamic_cast<ConstantExpr *>( castExpr->get_arg() ) ) {
    408                                                 if ( Constant *cnst = dynamic_cast<Constant *>( cnstexpr->get_constant() ) ) {
    409                                                         if ( unify( formalType, cnst->get_type(), resultEnv, resultNeed, resultHave, openVars, indexer ) ) {
    410                                                                 *out++ = cnstexpr->clone();
    411                                                                 return true;
    412                                                         } // if
     405                                // so far, only constant expressions are accepted as default values
     406                                if ( ConstantExpr *cnstexpr = dynamic_cast<ConstantExpr *>( si->get_value()) ) {
     407                                        if ( Constant *cnst = dynamic_cast<Constant *>( cnstexpr->get_constant() ) ) {
     408                                                if ( unify( formalType, cnst->get_type(), resultEnv, resultNeed, resultHave, openVars, indexer ) ) {
     409                                                        // xxx - Don't know if this is right
     410                                                        *out++ = cnstexpr->clone();
     411                                                        return true;
    413412                                                } // if
    414413                                        } // if
    415                                 }
     414                                } // if
    416415                        } // if
    417416                        return false;
  • src/SymTab/Mangler.cc

    rea23d10 r424931d  
    172172                        for ( std::list< Expression* >::const_iterator param = params.begin(); param != params.end(); ++param ) {
    173173                                TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
    174                                 assertf(paramType, "Aggregate parameters should be type expressions: %s", toString(*param).c_str());
     174                                assert(paramType && "Aggregate parameters should be type expressions");
    175175                                maybeAccept( paramType->get_type(), *this );
    176176                        }
  • src/SymTab/Validate.cc

    rea23d10 r424931d  
    696696                        FunctionDecl * newDecl = new FunctionDecl( ret->get_name(), ret->get_storageClass(), ret->get_linkage(), funtype, 0, ret->get_isInline(), ret->get_isNoreturn(), objDecl->get_attributes() );
    697697                        objDecl->get_attributes().clear();
    698                         objDecl->set_type( nullptr );
    699698                        delete objDecl;
    700699                        return newDecl;
  • src/main.cc

    rea23d10 r424931d  
    7676        validp = false,
    7777        errorp = false,
    78         codegenp = false,
    79         prettycodegenp = false;
     78        codegenp = false;
    8079
    8180static void parse_cmdline( int argc, char *argv[], const char *& filename );
     
    310309                } // if
    311310
    312                 CodeGen::generate( translationUnit, *output, ! noprotop, prettycodegenp );
     311                CodeGen::generate( translationUnit, *output, ! noprotop );
    313312
    314313                CodeGen::FixMain::fix( *output, treep ? "../prelude/bootloader.c" : CFA_LIBDIR "/bootloader.c" );
     
    375374
    376375        int c;
    377         while ( (c = getopt_long( argc, argv, "abBcdefglmnpqrstTvyzZD:F:", long_opts, &long_index )) != -1 ) {
     376        while ( (c = getopt_long( argc, argv, "abBcdefglmnpqrstTvyzD:F:", long_opts, &long_index )) != -1 ) {
    378377                switch ( c ) {
    379378                  case Ast:
     
    451450                  case 'z':
    452451                        codegenp = true;
    453                         case 'Z':
    454                         prettycodegenp = true;
    455452                        break;
    456453                  case 'D':                                                                             // ignore -Dxxx
  • src/tests/.expect/32/declarationSpecifier.txt

    rea23d10 r424931d  
    1 __attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
     1__attribute__ ((__malloc__,__nothrow__,__leaf__)) extern void *malloc(unsigned int __size);
    22__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
    3 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
    4 __attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern int atexit(void (*__func)(void));
    5 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(int __status);
     3__attribute__ ((__noreturn__,__nothrow__,__leaf__)) extern void abort(void);
     4__attribute__ ((__nonnull__(1),__nothrow__,__leaf__)) extern int atexit(void (*__func)(void));
     5__attribute__ ((__noreturn__,__nothrow__,__leaf__)) extern void exit(int __status);
    66extern int printf(const char *__restrict __format, ...);
    77volatile const short __x1__CVs_1;
     
    629629}
    630630static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi_iPPCc__1(argc, argv); }
    631 __attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
     631__attribute__ ((__malloc__,__nothrow__,__leaf__)) extern void *malloc(unsigned int __size);
    632632__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
    633 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
    634 __attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern int atexit(void (*__func)(void));
    635 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(int __status);
     633__attribute__ ((__noreturn__,__nothrow__,__leaf__)) extern void abort(void);
     634__attribute__ ((__nonnull__(1),__nothrow__,__leaf__)) extern int atexit(void (*__func)(void));
     635__attribute__ ((__noreturn__,__nothrow__,__leaf__)) extern void exit(int __status);
    636636extern int printf(const char *__restrict __format, ...);
    637637static inline int invoke_main(int argc, char **argv, char **envp);
  • src/tests/.expect/32/extension.txt

    rea23d10 r424931d  
    1 __attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
     1__attribute__ ((__malloc__,__nothrow__,__leaf__)) extern void *malloc(unsigned int __size);
    22__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
    3 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
    4 __attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern int atexit(void (*__func)(void));
    5 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(int __status);
     3__attribute__ ((__noreturn__,__nothrow__,__leaf__)) extern void abort(void);
     4__attribute__ ((__nonnull__(1),__nothrow__,__leaf__)) extern int atexit(void (*__func)(void));
     5__attribute__ ((__noreturn__,__nothrow__,__leaf__)) extern void exit(int __status);
    66extern int printf(const char *__restrict __format, ...);
    77__extension__ int __a__i_1;
     
    7777    __B__C2eE_1,
    7878};
    79 __extension__ int __f__Fi___1();
    80 __extension__ int i;
    81 __extension__ int j;
    8279__extension__ int __fred__Fi_i__1(int __p__i_1){
    8380    int ___retval_fred__i_1;
     
    8683        __extension__ int __b__i_2;
    8784        __extension__ int __c__i_2;
    88         __extension__ int *__x__Pi_2;
    89         __extension__ int *__y__Pi_2;
    90         __extension__ int *__z__Pi_2;
    9185    };
    9286    int __i__i_2 = ((int )(__extension__ __a__i_1+__extension__ 3));
     
    10094    ((void)((_tmp_cp_ret0=__extension__ __fred__Fi_i__1(3)) , _tmp_cp_ret0));
    10195    ((void)((*((int *)(&_tmp_cp_ret0)))) /* ^?{} */);
    102     __extension__ int __mary__Fi_i__2(int __p__i_2){
    103         int ___retval_mary__i_2;
    104     }
    10596    ((void)__extension__ sizeof(3));
    10697    ((void)__extension__ (((int )(3!=((int )0))) || ((int )(4!=((int )0)))));
  • src/tests/.expect/32/gccExtensions.txt

    rea23d10 r424931d  
    1 __attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
     1__attribute__ ((__malloc__,__nothrow__,__leaf__)) extern void *malloc(unsigned int __size);
    22__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
    3 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
    4 __attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern int atexit(void (*__func)(void));
    5 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(int __status);
     3__attribute__ ((__noreturn__,__nothrow__,__leaf__)) extern void abort(void);
     4__attribute__ ((__nonnull__(1),__nothrow__,__leaf__)) extern int atexit(void (*__func)(void));
     5__attribute__ ((__noreturn__,__nothrow__,__leaf__)) extern void exit(int __status);
    66extern int printf(const char *__restrict __format, ...);
    77extern int __x__i_1 asm ( "xx" );
     
    166166}
    167167static inline int invoke_main(int argc, char* argv[], char* envp[]) { (void)argc; (void)argv; (void)envp; return __main__Fi_iPPCc__1(argc, argv); }
    168 __attribute__ ((__nothrow__,__leaf__,__malloc__)) extern void *malloc(unsigned int __size);
     168__attribute__ ((__malloc__,__nothrow__,__leaf__)) extern void *malloc(unsigned int __size);
    169169__attribute__ ((__nothrow__,__leaf__)) extern void free(void *__ptr);
    170 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void abort(void);
    171 __attribute__ ((__nothrow__,__leaf__,__nonnull__(1))) extern int atexit(void (*__func)(void));
    172 __attribute__ ((__nothrow__,__leaf__,__noreturn__)) extern void exit(int __status);
     170__attribute__ ((__noreturn__,__nothrow__,__leaf__)) extern void abort(void);
     171__attribute__ ((__nonnull__(1),__nothrow__,__leaf__)) extern int atexit(void (*__func)(void));
     172__attribute__ ((__noreturn__,__nothrow__,__leaf__)) extern void exit(int __status);
    173173extern int printf(const char *__restrict __format, ...);
    174174static inline int invoke_main(int argc, char **argv, char **envp);
Note: See TracChangeset for help on using the changeset viewer.