Changes in / [10e90cb:8ca3a72]
- Location:
- src
- Files:
-
- 1 added
- 3 deleted
- 34 edited
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/CodeGenerator.cc
r10e90cb r8ca3a72 267 267 } 268 268 269 void CodeGenerator::visit( __attribute__((unused))TraitDecl * traitDecl ) {}269 void CodeGenerator::visit( TraitDecl * traitDecl ) {} 270 270 271 271 void CodeGenerator::visit( TypedefDecl * typeDecl ) { … … 328 328 } 329 329 330 void CodeGenerator::visit( __attribute__((unused))ConstructorInit * init ){330 void CodeGenerator::visit( ConstructorInit * init ){ 331 331 assertf( ! genC, "ConstructorInit nodes should not reach code generation." ); 332 332 // xxx - generate something reasonable for constructor/destructor pairs … … 962 962 } 963 963 964 void CodeGenerator::visit( __attribute__((unused))NullStmt * nullStmt ) {964 void CodeGenerator::visit( NullStmt * nullStmt ) { 965 965 //output << indent << CodeGenerator::printLabels( nullStmt->get_labels() ); 966 966 output << "/* null statement */ ;"; -
src/CodeTools/TrackLoc.cc
r10e90cb r8ca3a72 85 85 } 86 86 87 void postvisit( __attribute__((unused)) BaseSyntaxNode * node) {87 void postvisit(BaseSyntaxNode * node) { 88 88 parents.pop(); 89 89 } -
src/Common/Assert.cc
r10e90cb r8ca3a72 21 21 extern const char * __progname; // global name of running executable (argv[0]) 22 22 23 #define CFA_ASSERT_FMT "*CFA assertion error* \"%s\"from program \"%s\" in \"%s\" at line %d in file \"%s\""23 #define CFA_ASSERT_FMT "*CFA assertion error* from program \"%s\" in \"%s\" at line %d in file \"%s\"" 24 24 25 25 // called by macro assert in assert.h 26 26 void __assert_fail( const char *assertion, const char *file, unsigned int line, const char *function ) { 27 fprintf( stderr, CFA_ASSERT_FMT ".\n", assertion,__progname, function, line, file );27 fprintf( stderr, CFA_ASSERT_FMT ".\n", __progname, function, line, file ); 28 28 abort(); 29 29 } … … 31 31 // called by macro assertf 32 32 void __assert_fail_f( const char *assertion, const char *file, unsigned int line, const char *function, const char *fmt, ... ) { 33 fprintf( stderr, CFA_ASSERT_FMT ": ", assertion,__progname, function, line, file );33 fprintf( stderr, CFA_ASSERT_FMT ": ", __progname, function, line, file ); 34 34 va_list args; 35 35 va_start( args, fmt ); -
src/Common/PassVisitor.h
r10e90cb r8ca3a72 231 231 std::list< Statement* > * get_beforeStmts() { return stmtsToAddBefore_impl( pass, 0); } 232 232 std::list< Statement* > * get_afterStmts () { return stmtsToAddAfter_impl ( pass, 0); } 233 bool visit_children() { bool* skip = skip_children_impl(pass, 0); return ! (skip && *skip); }234 233 }; 235 234 -
src/Common/PassVisitor.impl.h
r10e90cb r8ca3a72 3 3 #define VISIT_START( node ) \ 4 4 call_previsit( node ); \ 5 if( visit_children() ) { \ 6 7 #define VISIT_END( node ) \ 8 } \ 5 6 #define VISIT_END( node ) \ 9 7 return call_postvisit( node ); \ 10 8 11 9 #define MUTATE_START( node ) \ 12 10 call_premutate( node ); \ 13 if( visit_children() ) { \14 11 15 12 #define MUTATE_END( type, node ) \ 16 } \17 13 return call_postmutate< type * >( node ); \ 18 14 -
src/Common/PassVisitor.proto.h
r10e90cb r8ca3a72 23 23 24 24 template<typename pass_type, typename node_type> 25 static inline void previsit_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused))node_type * node, __attribute__((unused)) long unused ) {}25 static inline void previsit_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) {} 26 26 27 27 … … 32 32 33 33 template<typename pass_type, typename node_type> 34 static inline void postvisit_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused))node_type * node, __attribute__((unused)) long unused ) {}34 static inline void postvisit_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) {} 35 35 36 36 // Mutate … … 41 41 42 42 template<typename pass_type, typename node_type> 43 static inline void premutate_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused))node_type * node, __attribute__((unused)) long unused ) {}43 static inline void premutate_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) {} 44 44 45 45 … … 71 71 72 72 // Fields 73 #define FIELD_PTR( type, name ) \74 template<typename pass_type> \75 static inline auto name##_impl( pass_type& pass, __attribute__((unused)) int unused ) ->decltype( &pass.name ) { return &pass.name; } \76 \77 template<typename pass_type> \73 #define FIELD_PTR( type, name ) \ 74 template<typename pass_type> \ 75 static inline auto name##_impl( pass_type& pass, __attribute__((unused)) int unused ) ->decltype( &pass.name ) { return &pass.name; } \ 76 \ 77 template<typename pass_type> \ 78 78 static inline type * name##_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) long unused ) { return nullptr;} \ 79 79 … … 81 81 FIELD_PTR( std::list< Statement* >, stmtsToAddBefore ) 82 82 FIELD_PTR( std::list< Statement* >, stmtsToAddAfter ) 83 FIELD_PTR( bool, skip_children ) -
src/Concurrency/Keywords.cc
r10e90cb r8ca3a72 65 65 FunctionDecl * forwardDeclare( StructDecl * ); 66 66 ObjectDecl * addField( StructDecl * ); 67 void addRoutines( ObjectDecl *, FunctionDecl * );67 void addRoutines( StructDecl *, ObjectDecl *, FunctionDecl * ); 68 68 69 69 virtual bool is_target( StructDecl * decl ) = 0; … … 247 247 void ConcurrentSueKeyword::visit(StructDecl * decl) { 248 248 Visitor::visit(decl); 249 if( decl->get_name() == type_name && decl->has_body()) {249 if( decl->get_name() == type_name ) { 250 250 assert( !type_decl ); 251 251 type_decl = decl; … … 264 264 FunctionDecl * func = forwardDeclare( decl ); 265 265 ObjectDecl * field = addField( decl ); 266 addRoutines( field, func );266 addRoutines( decl, field, func ); 267 267 } 268 268 … … 359 359 } 360 360 361 void ConcurrentSueKeyword::addRoutines( ObjectDecl * field, FunctionDecl * func ) {361 void ConcurrentSueKeyword::addRoutines( StructDecl * decl, ObjectDecl * field, FunctionDecl * func ) { 362 362 CompoundStmt * statement = new CompoundStmt( noLabels ); 363 363 statement->push_back( -
src/GenPoly/Box.cc
r10e90cb r8ca3a72 101 101 void passTypeVars( ApplicationExpr *appExpr, Type *polyRetType, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars ); 102 102 /// wraps a function application with a new temporary for the out-parameter return value 103 Expression *addRetParam( ApplicationExpr *appExpr, Type *retType, std::list< Expression *>::iterator &arg );103 Expression *addRetParam( ApplicationExpr *appExpr, FunctionType *function, Type *retType, std::list< Expression *>::iterator &arg ); 104 104 /// Replaces all the type parameters of a generic type with their concrete equivalents under the current environment 105 105 void replaceParametersWithConcrete( ApplicationExpr *appExpr, std::list< Expression* >& params ); … … 134 134 public: 135 135 template< typename DeclClass > 136 DeclClass *handleDecl( DeclClass *decl );136 DeclClass *handleDecl( DeclClass *decl, Type *type ); 137 137 template< typename AggDecl > 138 138 AggDecl * handleAggDecl( AggDecl * aggDecl ); … … 663 663 } 664 664 665 Expression *Pass1::addRetParam( ApplicationExpr *appExpr, Type *retType, std::list< Expression *>::iterator &arg ) {665 Expression *Pass1::addRetParam( ApplicationExpr *appExpr, FunctionType *function, Type *retType, std::list< Expression *>::iterator &arg ) { 666 666 // Create temporary to hold return value of polymorphic function and produce that temporary as a result 667 667 // using a comma expression. … … 730 730 Type *concrete = replaceWithConcrete( appExpr, dynType ); 731 731 // add out-parameter for return value 732 return addRetParam( appExpr, concrete, arg );732 return addRetParam( appExpr, function, concrete, arg ); 733 733 } 734 734 … … 737 737 // if ( ! function->get_returnVals().empty() && isPolyType( function->get_returnVals().front()->get_type(), tyVars ) ) { 738 738 if ( isDynRet( function, tyVars ) ) { 739 ret = addRetParam( appExpr, function ->get_returnVals().front()->get_type(), arg );739 ret = addRetParam( appExpr, function, function->get_returnVals().front()->get_type(), arg ); 740 740 } // if 741 741 std::string mangleName = mangleAdapterName( function, tyVars ); … … 1280 1280 1281 1281 template< typename DeclClass > 1282 DeclClass * Pass2::handleDecl( DeclClass *decl ) {1282 DeclClass * Pass2::handleDecl( DeclClass *decl, Type *type ) { 1283 1283 DeclClass *ret = static_cast< DeclClass *>( Parent::mutate( decl ) ); 1284 1284 … … 1294 1294 1295 1295 DeclarationWithType * Pass2::mutate( FunctionDecl *functionDecl ) { 1296 functionDecl = safe_dynamic_cast< FunctionDecl * > ( handleDecl( functionDecl ) );1296 functionDecl = safe_dynamic_cast< FunctionDecl * > ( handleDecl( functionDecl, functionDecl->get_functionType() ) ); 1297 1297 FunctionType * ftype = functionDecl->get_functionType(); 1298 1298 if ( ! ftype->get_returnVals().empty() && functionDecl->get_statements() ) { … … 1319 1319 1320 1320 ObjectDecl * Pass2::mutate( ObjectDecl *objectDecl ) { 1321 return handleDecl( objectDecl );1321 return handleDecl( objectDecl, objectDecl->get_type() ); 1322 1322 } 1323 1323 … … 1342 1342 addToTyVarMap( typeDecl, scopeTyVars ); 1343 1343 if ( typeDecl->get_base() ) { 1344 return handleDecl( typeDecl );1344 return handleDecl( typeDecl, typeDecl->get_base() ); 1345 1345 } else { 1346 1346 return Parent::mutate( typeDecl ); … … 1349 1349 1350 1350 TypedefDecl * Pass2::mutate( TypedefDecl *typedefDecl ) { 1351 return handleDecl( typedefDecl );1351 return handleDecl( typedefDecl, typedefDecl->get_base() ); 1352 1352 } 1353 1353 -
src/InitTweak/FixGlobalInit.cc
r10e90cb r8ca3a72 125 125 126 126 // only modify global variables 127 void GlobalFixer::visit( __attribute__((unused))FunctionDecl *functionDecl ) {}128 void GlobalFixer::visit( __attribute__((unused))StructDecl *aggregateDecl ) {}129 void GlobalFixer::visit( __attribute__((unused))UnionDecl *aggregateDecl ) {}130 void GlobalFixer::visit( __attribute__((unused))EnumDecl *aggregateDecl ) {}131 void GlobalFixer::visit( __attribute__((unused))TraitDecl *aggregateDecl ) {}132 void GlobalFixer::visit( __attribute__((unused))TypeDecl *typeDecl ) {}127 void GlobalFixer::visit( FunctionDecl *functionDecl ) {} 128 void GlobalFixer::visit( StructDecl *aggregateDecl ) {} 129 void GlobalFixer::visit( UnionDecl *aggregateDecl ) {} 130 void GlobalFixer::visit( EnumDecl *aggregateDecl ) {} 131 void GlobalFixer::visit( TraitDecl *aggregateDecl ) {} 132 void GlobalFixer::visit( TypeDecl *typeDecl ) {} 133 133 134 134 } // namespace InitTweak -
src/InitTweak/FixInit.cc
r10e90cb r8ca3a72 110 110 111 111 // don't go into other functions 112 virtual void visit( __attribute__((unused))FunctionDecl *decl ) override {}112 virtual void visit( FunctionDecl *decl ) override {} 113 113 114 114 protected: -
src/InitTweak/InitTweak.cc
r10e90cb r8ca3a72 92 92 InitImpl( Initializer * init ) : init( init ) {} 93 93 94 virtual std::list< Expression * > next( __attribute((unused))std::list< Expression * > & indices ) {94 virtual std::list< Expression * > next( std::list< Expression * > & indices ) { 95 95 // this is wrong, but just a placeholder for now 96 96 // if ( ! flattened ) flatten( indices ); … … 248 248 } 249 249 250 Statement * ExprImpl::buildListInit( __attribute((unused)) UntypedExpr * dst, __attribute((unused))std::list< Expression * > & indices ) {250 Statement * ExprImpl::buildListInit( UntypedExpr * dst, std::list< Expression * > & indices ) { 251 251 return NULL; 252 252 } … … 475 475 ConstExprChecker() : isConstExpr( true ) {} 476 476 477 virtual void visit( __attribute((unused))ApplicationExpr *applicationExpr ) { isConstExpr = false; }478 virtual void visit( __attribute((unused))UntypedExpr *untypedExpr ) { isConstExpr = false; }477 virtual void visit( ApplicationExpr *applicationExpr ) { isConstExpr = false; } 478 virtual void visit( UntypedExpr *untypedExpr ) { isConstExpr = false; } 479 479 virtual void visit( NameExpr *nameExpr ) { 480 480 // xxx - temporary hack, because 0 and 1 really should be constexprs, even though they technically aren't in Cforall today … … 487 487 if ( ! dynamic_cast< NameExpr * >( arg) && ! dynamic_cast< VariableExpr * >( arg ) && ! dynamic_cast< MemberExpr * >( arg ) && ! dynamic_cast< UntypedMemberExpr * >( arg ) ) isConstExpr = false; 488 488 } 489 virtual void visit( __attribute((unused))LabelAddressExpr *labAddressExpr ) { isConstExpr = false; }490 virtual void visit( __attribute((unused))UntypedMemberExpr *memberExpr ) { isConstExpr = false; }491 virtual void visit( __attribute((unused))MemberExpr *memberExpr ) { isConstExpr = false; }492 virtual void visit( __attribute((unused))VariableExpr *variableExpr ) { isConstExpr = false; }489 virtual void visit( LabelAddressExpr *labAddressExpr ) { isConstExpr = false; } 490 virtual void visit( UntypedMemberExpr *memberExpr ) { isConstExpr = false; } 491 virtual void visit( MemberExpr *memberExpr ) { isConstExpr = false; } 492 virtual void visit( VariableExpr *variableExpr ) { isConstExpr = false; } 493 493 // these might be okay? 494 494 // virtual void visit( SizeofExpr *sizeofExpr ); … … 501 501 // virtual void visit( LogicalExpr *logicalExpr ); 502 502 // virtual void visit( ConditionalExpr *conditionalExpr ); 503 virtual void visit( __attribute((unused))TypeExpr *typeExpr ) { isConstExpr = false; }504 virtual void visit( __attribute((unused))AsmExpr *asmExpr ) { isConstExpr = false; }505 virtual void visit( __attribute((unused))UntypedValofExpr *valofExpr ) { isConstExpr = false; }506 virtual void visit( __attribute((unused))CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }507 virtual void visit( __attribute((unused))UntypedTupleExpr *tupleExpr ) { isConstExpr = false; }508 virtual void visit( __attribute((unused))TupleExpr *tupleExpr ) { isConstExpr = false; }509 virtual void visit( __attribute((unused))TupleAssignExpr *tupleExpr ) { isConstExpr = false; }503 virtual void visit( TypeExpr *typeExpr ) { isConstExpr = false; } 504 virtual void visit( AsmExpr *asmExpr ) { isConstExpr = false; } 505 virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; } 506 virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; } 507 virtual void visit( UntypedTupleExpr *tupleExpr ) { isConstExpr = false; } 508 virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; } 509 virtual void visit( TupleAssignExpr *tupleExpr ) { isConstExpr = false; } 510 510 511 511 bool isConstExpr; -
src/Parser/ParseNode.h
r10e90cb r8ca3a72 61 61 } 62 62 63 virtual void print( __attribute__((unused)) std::ostream &os, __attribute__((unused))int indent = 0 ) const {}64 virtual void printList( __attribute__((unused)) std::ostream &os, __attribute__((unused))int indent = 0 ) const {}63 virtual void print( std::ostream &os, int indent = 0 ) const {} 64 virtual void printList( std::ostream &os, int indent = 0 ) const {} 65 65 66 66 static int indent_by; … … 113 113 ExpressionNode * set_extension( bool exten ) { extension = exten; return this; } 114 114 115 virtual void print( __attribute__((unused)) std::ostream &os, __attribute__((unused))int indent = 0 ) const override {}116 void printOneLine( __attribute__((unused)) std::ostream &os, __attribute__((unused))int indent = 0 ) const {}115 virtual void print( std::ostream &os, int indent = 0 ) const override {} 116 void printOneLine( std::ostream &os, int indent = 0 ) const {} 117 117 118 118 template<typename T> … … 283 283 } 284 284 285 virtual void print( __attribute__((unused)) std::ostream &os, __attribute__((unused))int indent = 0 ) const override;286 virtual void printList( __attribute__((unused)) std::ostream &os, __attribute__((unused))int indent = 0 ) const override;285 virtual void print( std::ostream &os, int indent = 0 ) const override; 286 virtual void printList( std::ostream &os, int indent = 0 ) const override; 287 287 288 288 Declaration * build() const; … … 363 363 virtual StatementNode * append_last_case( StatementNode * ); 364 364 365 virtual void print( __attribute__((unused)) std::ostream &os, __attribute__((unused))int indent = 0 ) const override {}366 virtual void printList( __attribute__((unused)) std::ostream &os, __attribute__((unused))int indent = 0 ) const override {}365 virtual void print( std::ostream &os, int indent = 0 ) const override {} 366 virtual void printList( std::ostream &os, int indent = 0 ) const override {} 367 367 private: 368 368 std::unique_ptr<Statement> stmt; -
src/ResolvExpr/CommonType.cc
r10e90cb r8ca3a72 43 43 44 44 void getCommonWithVoidPointer( PointerType* voidPointer, PointerType* otherPointer ); 45 template< typename RefType > void handleRefType( RefType *inst, Type *other ); 45 46 46 47 Type *result; … … 125 126 } 126 127 127 void CommonType::visit( __attribute((unused)) VoidType *voidType ) {} 128 void CommonType::visit( VoidType *voidType ) { 129 } 128 130 129 131 void CommonType::visit( BasicType *basicType ) { … … 187 189 } 188 190 189 void CommonType::visit( __attribute((unused)) ArrayType *arrayType ) {} 190 void CommonType::visit( __attribute((unused)) FunctionType *functionType ) {} 191 void CommonType::visit( __attribute((unused)) StructInstType *aggregateUseType ) {} 192 void CommonType::visit( __attribute((unused)) UnionInstType *aggregateUseType ) {} 191 void CommonType::visit( ArrayType *arrayType ) { 192 } 193 194 void CommonType::visit( FunctionType *functionType ) { 195 } 196 197 template< typename RefType > void CommonType::handleRefType( RefType *inst, Type *other ) { 198 } 199 200 void CommonType::visit( StructInstType *aggregateUseType ) { 201 } 202 203 void CommonType::visit( UnionInstType *aggregateUseType ) { 204 } 193 205 194 206 void CommonType::visit( EnumInstType *enumInstType ) { … … 202 214 } 203 215 204 void CommonType::visit( __attribute((unused))TraitInstType *aggregateUseType ) {216 void CommonType::visit( TraitInstType *aggregateUseType ) { 205 217 } 206 218 … … 227 239 } 228 240 229 void CommonType::visit( __attribute((unused)) TupleType *tupleType ) {} 230 void CommonType::visit( __attribute((unused)) VarArgsType *varArgsType ) {} 241 void CommonType::visit( TupleType *tupleType ) { 242 } 243 244 void CommonType::visit( VarArgsType *varArgsType ) { 245 } 231 246 232 247 void CommonType::visit( ZeroType *zeroType ) { -
src/ResolvExpr/ConversionCost.cc
r10e90cb r8ca3a72 149 149 }; 150 150 151 void ConversionCost::visit( __attribute((unused)) VoidType *voidType) {151 void ConversionCost::visit(VoidType *voidType) { 152 152 cost = Cost::infinity; 153 153 } … … 186 186 } 187 187 188 void ConversionCost::visit(__attribute((unused)) ArrayType *arrayType) {} 189 void ConversionCost::visit(__attribute((unused)) FunctionType *functionType) {} 188 void ConversionCost::visit(ArrayType *arrayType) { 189 } 190 191 void ConversionCost::visit(FunctionType *functionType) { 192 } 190 193 191 194 void ConversionCost::visit(StructInstType *inst) { … … 205 208 } 206 209 207 void ConversionCost::visit( __attribute((unused)) EnumInstType *inst) {210 void ConversionCost::visit(EnumInstType *inst) { 208 211 static Type::Qualifiers q; 209 212 static BasicType integer( q, BasicType::SignedInt ); … … 214 217 } 215 218 216 void ConversionCost::visit( __attribute((unused))TraitInstType *inst) {219 void ConversionCost::visit(TraitInstType *inst) { 217 220 } 218 221 … … 236 239 } 237 240 238 void ConversionCost::visit( __attribute((unused))TupleType *tupleType) {241 void ConversionCost::visit(TupleType *tupleType) { 239 242 Cost c; 240 243 if ( TupleType *destAsTuple = dynamic_cast< TupleType* >( dest ) ) { … … 256 259 } 257 260 258 void ConversionCost::visit( __attribute((unused))VarArgsType *varArgsType) {261 void ConversionCost::visit(VarArgsType *varArgsType) { 259 262 if ( dynamic_cast< VarArgsType* >( dest ) ) { 260 263 cost = Cost::zero; … … 262 265 } 263 266 264 void ConversionCost::visit( __attribute((unused))ZeroType *zeroType) {267 void ConversionCost::visit(ZeroType *zeroType) { 265 268 if ( dynamic_cast< ZeroType* >( dest ) ) { 266 269 cost = Cost::zero; … … 278 281 } 279 282 280 void ConversionCost::visit( __attribute((unused))OneType *oneType) {283 void ConversionCost::visit(OneType *oneType) { 281 284 if ( dynamic_cast< OneType* >( dest ) ) { 282 285 cost = Cost::zero; -
src/ResolvExpr/PtrsAssignable.cc
r10e90cb r8ca3a72 63 63 } 64 64 65 PtrsAssignable::PtrsAssignable( Type *dest, const TypeEnvironment &env ) : dest( dest ), result( 0 ), env( env ) {} 65 PtrsAssignable::PtrsAssignable( Type *dest, const TypeEnvironment &env ) : dest( dest ), result( 0 ), env( env ) { 66 } 66 67 67 void PtrsAssignable::visit( __attribute((unused))VoidType *voidType ) {68 void PtrsAssignable::visit( VoidType *voidType ) { 68 69 if ( dynamic_cast< FunctionType* >( dest ) ) { 69 70 result = 0; … … 73 74 } 74 75 75 void PtrsAssignable::visit( __attribute__((unused)) BasicType *basicType ) {} 76 void PtrsAssignable::visit( __attribute__((unused)) PointerType *pointerType ) {} 77 void PtrsAssignable::visit( __attribute__((unused)) ArrayType *arrayType ) {} 78 void PtrsAssignable::visit( __attribute__((unused)) FunctionType *functionType ) { 76 void PtrsAssignable::visit( BasicType *basicType ) { 77 } 78 79 void PtrsAssignable::visit( PointerType *pointerType ) { 80 } 81 82 void PtrsAssignable::visit( ArrayType *arrayType ) { 83 } 84 85 void PtrsAssignable::visit( FunctionType *functionType ) { 79 86 result = -1; 80 87 } 81 88 82 void PtrsAssignable::visit( __attribute__((unused)) StructInstType *inst ) {} 83 void PtrsAssignable::visit( __attribute__((unused)) UnionInstType *inst ) {} 89 void PtrsAssignable::visit( StructInstType *inst ) { 90 // I don't think we should be doing anything here, but I'm willing to admit that I might be wrong 91 } 92 93 void PtrsAssignable::visit( UnionInstType *inst ) { 94 // I don't think we should be doing anything here, but I'm willing to admit that I might be wrong 95 } 84 96 85 97 void PtrsAssignable::visit( EnumInstType *inst ) { … … 91 103 } 92 104 93 void PtrsAssignable::visit( __attribute__((unused)) TraitInstType *inst ) {} 105 void PtrsAssignable::visit( TraitInstType *inst ) { 106 // I definitely don't think we should be doing anything here 107 } 108 94 109 void PtrsAssignable::visit( TypeInstType *inst ) { 95 110 EqvClass eqvClass; … … 101 116 } 102 117 103 void PtrsAssignable::visit( __attribute__((unused)) TupleType *tupleType ) {} 104 void PtrsAssignable::visit( __attribute__((unused)) VarArgsType *varArgsType ) {} 105 void PtrsAssignable::visit( __attribute__((unused)) ZeroType *zeroType ) {} 106 void PtrsAssignable::visit( __attribute__((unused)) OneType *oneType ) {} 118 void PtrsAssignable::visit( TupleType *tupleType ) { 119 /// // This code doesn't belong here, but it might be useful somewhere else 120 /// if ( TupleType *destAsTuple = dynamic_cast< TupleType* >( dest ) ) { 121 /// int ret = 0; 122 /// std::list< Type* >::const_iterator srcIt = tupleType->get_types().begin(); 123 /// std::list< Type* >::const_iterator destIt = destAsTuple->get_types().begin(); 124 /// while ( srcIt != tupleType->get_types().end() && destIt != destAsTuple->get_types().end() ) { 125 /// int assignResult = ptrsAssignable( *srcIt++, *destIt++ ); 126 /// if ( assignResult == 0 ) { 127 /// result = assignResult; 128 /// return; 129 /// } else if ( assignResult < 0 ) { 130 /// ret = -1; 131 /// } else if ( ret > 0 ) { 132 /// ret += assignResult; 133 /// } 134 /// } 135 /// if ( srcIt == tupleType->get_types().end() && destIt == destAsTuple->get_types().end() ) { 136 /// result = ret; 137 /// } else { 138 /// result = 0; 139 /// } 140 /// } 141 } 142 143 void PtrsAssignable::visit( VarArgsType *varArgsType ) { 144 } 145 146 void PtrsAssignable::visit( ZeroType *zeroType ) { 147 } 148 149 void PtrsAssignable::visit( OneType *oneType ) { 150 } 107 151 108 152 } // namespace ResolvExpr -
src/ResolvExpr/PtrsCastable.cc
r10e90cb r8ca3a72 92 92 } 93 93 94 void PtrsCastable::visit( __attribute__((unused))VoidType *voidType) {94 void PtrsCastable::visit(VoidType *voidType) { 95 95 result = objectCast( dest, env, indexer ); 96 96 } 97 97 98 void PtrsCastable::visit( __attribute__((unused))BasicType *basicType) {98 void PtrsCastable::visit(BasicType *basicType) { 99 99 result = objectCast( dest, env, indexer ); 100 100 } 101 101 102 void PtrsCastable::visit( __attribute__((unused))PointerType *pointerType) {102 void PtrsCastable::visit(PointerType *pointerType) { 103 103 result = objectCast( dest, env, indexer ); 104 104 } 105 105 106 void PtrsCastable::visit( __attribute__((unused))ArrayType *arrayType) {106 void PtrsCastable::visit(ArrayType *arrayType) { 107 107 result = objectCast( dest, env, indexer ); 108 108 } 109 109 110 void PtrsCastable::visit( __attribute__((unused))FunctionType *functionType) {110 void PtrsCastable::visit(FunctionType *functionType) { 111 111 // result = -1; 112 112 result = functionCast( dest, env, indexer ); 113 113 } 114 114 115 void PtrsCastable::visit( __attribute__((unused))StructInstType *inst) {115 void PtrsCastable::visit(StructInstType *inst) { 116 116 result = objectCast( dest, env, indexer ); 117 117 } 118 118 119 void PtrsCastable::visit( __attribute__((unused))UnionInstType *inst) {119 void PtrsCastable::visit(UnionInstType *inst) { 120 120 result = objectCast( dest, env, indexer ); 121 121 } 122 122 123 void PtrsCastable::visit( __attribute__((unused))EnumInstType *inst) {123 void PtrsCastable::visit(EnumInstType *inst) { 124 124 if ( dynamic_cast< EnumInstType* >( dest ) ) { 125 125 result = 1; … … 144 144 } 145 145 146 void PtrsCastable::visit( __attribute__((unused))TupleType *tupleType) {146 void PtrsCastable::visit(TupleType *tupleType) { 147 147 result = objectCast( dest, env, indexer ); 148 148 } 149 149 150 void PtrsCastable::visit( __attribute__((unused))VarArgsType *varArgsType) {150 void PtrsCastable::visit(VarArgsType *varArgsType) { 151 151 result = objectCast( dest, env, indexer ); 152 152 } 153 153 154 void PtrsCastable::visit( __attribute__((unused))ZeroType *zeroType) {154 void PtrsCastable::visit(ZeroType *zeroType) { 155 155 result = objectCast( dest, env, indexer ); 156 156 } 157 157 158 void PtrsCastable::visit( __attribute__((unused))OneType *oneType) {158 void PtrsCastable::visit(OneType *oneType) { 159 159 result = objectCast( dest, env, indexer ); 160 160 } -
src/ResolvExpr/TypeMap.h
r10e90cb r8ca3a72 110 110 } 111 111 112 virtual void visit( __attribute__((unused))VoidType *voidType ) {112 virtual void visit( VoidType *voidType ) { 113 113 findAndReplace( typeMap.voidValue ); 114 114 } … … 138 138 } 139 139 140 virtual void visit( __attribute__((unused))FunctionType *functionType ) {140 virtual void visit( FunctionType *functionType ) { 141 141 findAndReplace( typeMap.functionPointerValue ); 142 142 } -
src/ResolvExpr/typeops.h
r10e90cb r8ca3a72 132 132 } 133 133 134 template< typename Container1, typename Container2 > 135 bool typesCompatibleList( Container1 &c1, Container2 &c2, const SymTab::Indexer &indexer, const TypeEnvironment &env ) { 136 typename Container1::iterator i1 = c1.begin(); 137 typename Container2::iterator i2 = c2.begin(); 138 for ( ; i1 != c1.end() && i2 != c2.end(); ++i1, ++i2 ) { 139 if ( ! typesCompatible( *i1, *i2, indexer ) ) { 140 return false; 141 } // if 142 } 143 return ( i1 == c1.end() ) && ( i2 == c2.end() ); 144 } 145 134 146 /// creates the type represented by the list of returnVals in a FunctionType. The caller owns the return value. 135 147 Type * extractResultType( FunctionType * functionType ); -
src/SymTab/ImplementationType.cc
r10e90cb r8ca3a72 61 61 } 62 62 63 void ImplementationType::visit( __attribute__((unused)) VoidType *voidType ) {} 64 void ImplementationType::visit( __attribute__((unused)) BasicType *basicType ) {} 63 void ImplementationType::visit(VoidType *voidType) { 64 } 65 66 void ImplementationType::visit(BasicType *basicType) { 67 } 65 68 66 69 void ImplementationType::visit(PointerType *pointerType) { … … 86 89 } 87 90 88 void ImplementationType::visit( __attribute__((unused)) StructInstType * aggregateUseType ) {} 89 void ImplementationType::visit( __attribute__((unused)) UnionInstType * aggregateUseType ) {} 90 void ImplementationType::visit( __attribute__((unused)) EnumInstType * aggregateUseType ) {} 91 void ImplementationType::visit( __attribute__((unused)) TraitInstType * aggregateUseType ) {} 91 void ImplementationType::visit(StructInstType *aggregateUseType) { 92 } 93 94 void ImplementationType::visit(UnionInstType *aggregateUseType) { 95 } 96 97 void ImplementationType::visit(EnumInstType *aggregateUseType) { 98 } 99 100 void ImplementationType::visit(TraitInstType *aggregateUseType) { 101 } 92 102 93 103 void ImplementationType::visit(TypeInstType *inst) { … … 110 120 } 111 121 112 void ImplementationType::visit( __attribute__((unused)) VarArgsType *varArgsType ) {} 113 void ImplementationType::visit( __attribute__((unused)) ZeroType *zeroType ) {} 114 void ImplementationType::visit( __attribute__((unused)) OneType *oneType ) {} 122 void ImplementationType::visit(VarArgsType *varArgsType) { 123 } 124 125 void ImplementationType::visit(ZeroType *zeroType) { 126 } 127 128 void ImplementationType::visit(OneType *oneType) { 129 } 115 130 } // namespace SymTab 116 131 -
src/SynTree/Statement.cc
r10e90cb r8ca3a72 30 30 Statement::Statement( std::list<Label> _labels ) : labels( _labels ) {} 31 31 32 void Statement::print( __attribute__((unused)) std::ostream &, __attribute__((unused))int indent ) const {}32 void Statement::print( std::ostream &, int indent ) const {} 33 33 34 34 Statement::~Statement() {} … … 365 365 NullStmt::NullStmt() : CompoundStmt( std::list<Label>() ) {} 366 366 367 void NullStmt::print( std::ostream &os, __attribute__((unused))int indent ) const {367 void NullStmt::print( std::ostream &os, int indent ) const { 368 368 os << "Null Statement" << endl ; 369 369 } -
src/SynTree/Type.h
r10e90cb r8ca3a72 334 334 virtual void print( std::ostream & os, int indent = 0 ) const; 335 335 336 virtual void lookup( __attribute__((unused)) const std::string & name, __attribute__((unused))std::list< Declaration* > & foundDecls ) const {}336 virtual void lookup( const std::string & name, std::list< Declaration* > & foundDecls ) const {} 337 337 protected: 338 338 virtual std::string typeString() const = 0; -
src/SynTree/Visitor.cc
r10e90cb r8ca3a72 122 122 } 123 123 124 void Visitor::visit( __attribute__((unused))BranchStmt *branchStmt ) {124 void Visitor::visit( BranchStmt *branchStmt ) { 125 125 } 126 126 … … 143 143 } 144 144 145 void Visitor::visit( __attribute__((unused))NullStmt *nullStmt ) {145 void Visitor::visit( NullStmt *nullStmt ) { 146 146 } 147 147 … … 445 445 446 446 447 void Visitor::visit( __attribute__((unused))Subrange *subrange ) {}448 449 450 void Visitor::visit( __attribute__((unused))Constant *constant ) {}447 void Visitor::visit( Subrange *subrange ) {} 448 449 450 void Visitor::visit( Constant *constant ) {} 451 451 // Local Variables: // 452 452 // tab-width: 4 // -
src/driver/cc1.cc
r10e90cb r8ca3a72 84 84 85 85 86 void sigTermHandler( __attribute__((unused))int signal ) {86 void sigTermHandler( int signal ) { 87 87 if ( tmpfilefd != -1 ) { // RACE, file created ? 88 88 rmtmpfile(); // remove … … 469 469 470 470 471 int main( const int argc, const char * const argv[], __attribute__((unused))const char * const env[] ) {471 int main( const int argc, const char * const argv[], const char * const env[] ) { 472 472 #ifdef __DEBUG_H__ 473 473 for ( int i = 0; env[i] != NULL; i += 1 ) { -
src/driver/cfa.cc
r10e90cb r8ca3a72 271 271 args[nargs] = "-ldl"; 272 272 nargs += 1; 273 args[nargs] = "-lrt";274 nargs += 1;275 273 args[nargs] = "-Xlinker"; 276 274 nargs += 1; -
src/libcfa/Makefile.am
r10e90cb r8ca3a72 54 54 # not all platforms support concurrency, add option do disable it 55 55 if BUILD_CONCURRENCY 56 libsrc += concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/ preemption.c56 libsrc += concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/signal.c 57 57 endif 58 58 -
src/libcfa/Makefile.in
r10e90cb r8ca3a72 46 46 47 47 # not all platforms support concurrency, add option do disable it 48 @BUILD_CONCURRENCY_TRUE@am__append_4 = concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/ preemption.c48 @BUILD_CONCURRENCY_TRUE@am__append_4 = concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/signal.c 49 49 subdir = src/libcfa 50 50 DIST_COMMON = $(am__nobase_cfa_include_HEADERS_DIST) \ … … 104 104 concurrency/kernel.c concurrency/monitor.c \ 105 105 concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \ 106 concurrency/invoke.c concurrency/ preemption.c106 concurrency/invoke.c concurrency/signal.c 107 107 am__dirstamp = $(am__leading_dot)dirstamp 108 108 @BUILD_CONCURRENCY_TRUE@am__objects_1 = concurrency/libcfa_d_a-coroutine.$(OBJEXT) \ … … 122 122 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-alarm.$(OBJEXT) \ 123 123 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-invoke.$(OBJEXT) \ 124 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a- preemption.$(OBJEXT)124 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-signal.$(OBJEXT) 125 125 am__objects_4 = libcfa_d_a-libcfa-prelude.$(OBJEXT) \ 126 126 libcfa_d_a-interpose.$(OBJEXT) \ … … 138 138 concurrency/kernel.c concurrency/monitor.c \ 139 139 concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \ 140 concurrency/invoke.c concurrency/ preemption.c140 concurrency/invoke.c concurrency/signal.c 141 141 @BUILD_CONCURRENCY_TRUE@am__objects_5 = concurrency/libcfa_a-coroutine.$(OBJEXT) \ 142 142 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-thread.$(OBJEXT) \ … … 154 154 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-alarm.$(OBJEXT) \ 155 155 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-invoke.$(OBJEXT) \ 156 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a- preemption.$(OBJEXT)156 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-signal.$(OBJEXT) 157 157 am__objects_8 = libcfa_a-libcfa-prelude.$(OBJEXT) \ 158 158 libcfa_a-interpose.$(OBJEXT) \ … … 445 445 concurrency/libcfa_d_a-invoke.$(OBJEXT): concurrency/$(am__dirstamp) \ 446 446 concurrency/$(DEPDIR)/$(am__dirstamp) 447 concurrency/libcfa_d_a-preemption.$(OBJEXT): \ 448 concurrency/$(am__dirstamp) \ 447 concurrency/libcfa_d_a-signal.$(OBJEXT): concurrency/$(am__dirstamp) \ 449 448 concurrency/$(DEPDIR)/$(am__dirstamp) 450 449 libcfa-d.a: $(libcfa_d_a_OBJECTS) $(libcfa_d_a_DEPENDENCIES) $(EXTRA_libcfa_d_a_DEPENDENCIES) … … 474 473 concurrency/libcfa_a-invoke.$(OBJEXT): concurrency/$(am__dirstamp) \ 475 474 concurrency/$(DEPDIR)/$(am__dirstamp) 476 concurrency/libcfa_a-preemption.$(OBJEXT): \ 477 concurrency/$(am__dirstamp) \ 475 concurrency/libcfa_a-signal.$(OBJEXT): concurrency/$(am__dirstamp) \ 478 476 concurrency/$(DEPDIR)/$(am__dirstamp) 479 477 libcfa.a: $(libcfa_a_OBJECTS) $(libcfa_a_DEPENDENCIES) $(EXTRA_libcfa_a_DEPENDENCIES) … … 490 488 -rm -f concurrency/libcfa_a-kernel.$(OBJEXT) 491 489 -rm -f concurrency/libcfa_a-monitor.$(OBJEXT) 492 -rm -f concurrency/libcfa_a- preemption.$(OBJEXT)490 -rm -f concurrency/libcfa_a-signal.$(OBJEXT) 493 491 -rm -f concurrency/libcfa_a-thread.$(OBJEXT) 494 492 -rm -f concurrency/libcfa_d_a-alarm.$(OBJEXT) … … 497 495 -rm -f concurrency/libcfa_d_a-kernel.$(OBJEXT) 498 496 -rm -f concurrency/libcfa_d_a-monitor.$(OBJEXT) 499 -rm -f concurrency/libcfa_d_a- preemption.$(OBJEXT)497 -rm -f concurrency/libcfa_d_a-signal.$(OBJEXT) 500 498 -rm -f concurrency/libcfa_d_a-thread.$(OBJEXT) 501 499 -rm -f containers/libcfa_a-maybe.$(OBJEXT) … … 539 537 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-kernel.Po@am__quote@ 540 538 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-monitor.Po@am__quote@ 541 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a- preemption.Po@am__quote@539 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-signal.Po@am__quote@ 542 540 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-thread.Po@am__quote@ 543 541 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-alarm.Po@am__quote@ … … 546 544 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-kernel.Po@am__quote@ 547 545 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po@am__quote@ 548 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a- preemption.Po@am__quote@546 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-signal.Po@am__quote@ 549 547 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-thread.Po@am__quote@ 550 548 @AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_a-maybe.Po@am__quote@ … … 871 869 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-invoke.obj `if test -f 'concurrency/invoke.c'; then $(CYGPATH_W) 'concurrency/invoke.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/invoke.c'; fi` 872 870 873 concurrency/libcfa_d_a- preemption.o: concurrency/preemption.c874 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a- preemption.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-preemption.Tpo -c -o concurrency/libcfa_d_a-preemption.o `test -f 'concurrency/preemption.c' || echo '$(srcdir)/'`concurrency/preemption.c875 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a- preemption.Tpo concurrency/$(DEPDIR)/libcfa_d_a-preemption.Po876 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/ preemption.c' object='concurrency/libcfa_d_a-preemption.o' libtool=no @AMDEPBACKSLASH@877 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 878 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a- preemption.o `test -f 'concurrency/preemption.c' || echo '$(srcdir)/'`concurrency/preemption.c879 880 concurrency/libcfa_d_a- preemption.obj: concurrency/preemption.c881 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a- preemption.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-preemption.Tpo -c -o concurrency/libcfa_d_a-preemption.obj `if test -f 'concurrency/preemption.c'; then $(CYGPATH_W) 'concurrency/preemption.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/preemption.c'; fi`882 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a- preemption.Tpo concurrency/$(DEPDIR)/libcfa_d_a-preemption.Po883 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/ preemption.c' object='concurrency/libcfa_d_a-preemption.obj' libtool=no @AMDEPBACKSLASH@884 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 885 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a- preemption.obj `if test -f 'concurrency/preemption.c'; then $(CYGPATH_W) 'concurrency/preemption.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/preemption.c'; fi`871 concurrency/libcfa_d_a-signal.o: concurrency/signal.c 872 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-signal.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-signal.Tpo -c -o concurrency/libcfa_d_a-signal.o `test -f 'concurrency/signal.c' || echo '$(srcdir)/'`concurrency/signal.c 873 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-signal.Tpo concurrency/$(DEPDIR)/libcfa_d_a-signal.Po 874 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/signal.c' object='concurrency/libcfa_d_a-signal.o' libtool=no @AMDEPBACKSLASH@ 875 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 876 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-signal.o `test -f 'concurrency/signal.c' || echo '$(srcdir)/'`concurrency/signal.c 877 878 concurrency/libcfa_d_a-signal.obj: concurrency/signal.c 879 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-signal.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-signal.Tpo -c -o concurrency/libcfa_d_a-signal.obj `if test -f 'concurrency/signal.c'; then $(CYGPATH_W) 'concurrency/signal.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/signal.c'; fi` 880 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-signal.Tpo concurrency/$(DEPDIR)/libcfa_d_a-signal.Po 881 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/signal.c' object='concurrency/libcfa_d_a-signal.obj' libtool=no @AMDEPBACKSLASH@ 882 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 883 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-signal.obj `if test -f 'concurrency/signal.c'; then $(CYGPATH_W) 'concurrency/signal.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/signal.c'; fi` 886 884 887 885 libcfa_a-libcfa-prelude.obj: libcfa-prelude.c … … 1165 1163 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-invoke.obj `if test -f 'concurrency/invoke.c'; then $(CYGPATH_W) 'concurrency/invoke.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/invoke.c'; fi` 1166 1164 1167 concurrency/libcfa_a- preemption.o: concurrency/preemption.c1168 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a- preemption.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-preemption.Tpo -c -o concurrency/libcfa_a-preemption.o `test -f 'concurrency/preemption.c' || echo '$(srcdir)/'`concurrency/preemption.c1169 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a- preemption.Tpo concurrency/$(DEPDIR)/libcfa_a-preemption.Po1170 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/ preemption.c' object='concurrency/libcfa_a-preemption.o' libtool=no @AMDEPBACKSLASH@1171 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1172 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a- preemption.o `test -f 'concurrency/preemption.c' || echo '$(srcdir)/'`concurrency/preemption.c1173 1174 concurrency/libcfa_a- preemption.obj: concurrency/preemption.c1175 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a- preemption.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-preemption.Tpo -c -o concurrency/libcfa_a-preemption.obj `if test -f 'concurrency/preemption.c'; then $(CYGPATH_W) 'concurrency/preemption.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/preemption.c'; fi`1176 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a- preemption.Tpo concurrency/$(DEPDIR)/libcfa_a-preemption.Po1177 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/ preemption.c' object='concurrency/libcfa_a-preemption.obj' libtool=no @AMDEPBACKSLASH@1178 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1179 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a- preemption.obj `if test -f 'concurrency/preemption.c'; then $(CYGPATH_W) 'concurrency/preemption.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/preemption.c'; fi`1165 concurrency/libcfa_a-signal.o: concurrency/signal.c 1166 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-signal.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-signal.Tpo -c -o concurrency/libcfa_a-signal.o `test -f 'concurrency/signal.c' || echo '$(srcdir)/'`concurrency/signal.c 1167 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-signal.Tpo concurrency/$(DEPDIR)/libcfa_a-signal.Po 1168 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/signal.c' object='concurrency/libcfa_a-signal.o' libtool=no @AMDEPBACKSLASH@ 1169 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1170 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-signal.o `test -f 'concurrency/signal.c' || echo '$(srcdir)/'`concurrency/signal.c 1171 1172 concurrency/libcfa_a-signal.obj: concurrency/signal.c 1173 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-signal.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-signal.Tpo -c -o concurrency/libcfa_a-signal.obj `if test -f 'concurrency/signal.c'; then $(CYGPATH_W) 'concurrency/signal.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/signal.c'; fi` 1174 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-signal.Tpo concurrency/$(DEPDIR)/libcfa_a-signal.Po 1175 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/signal.c' object='concurrency/libcfa_a-signal.obj' libtool=no @AMDEPBACKSLASH@ 1176 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1177 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-signal.obj `if test -f 'concurrency/signal.c'; then $(CYGPATH_W) 'concurrency/signal.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/signal.c'; fi` 1180 1178 install-nobase_cfa_includeHEADERS: $(nobase_cfa_include_HEADERS) 1181 1179 @$(NORMAL_INSTALL) -
src/libcfa/concurrency/alarm.c
r10e90cb r8ca3a72 1 // -*- Mode: CFA -*-2 //3 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo4 //5 // The contents of this file are covered under the licence agreement in the6 // file "LICENCE" distributed with Cforall.7 //8 // alarm.c --9 //10 // Author : Thierry Delisle11 // Created On : Fri Jun 2 11:31:25 201712 // Last Modified By : Thierry Delisle13 // Last Modified On : --14 // Update Count : 015 //16 17 extern "C" {18 #include <time.h>19 #include <sys/time.h>20 }21 22 #include "alarm.h"23 #include "kernel_private.h"24 #include "preemption.h"25 26 //=============================================================================================27 // Clock logic28 //=============================================================================================29 30 __cfa_time_t __kernel_get_time() {31 timespec curr;32 clock_gettime( CLOCK_REALTIME, &curr );33 return ((__cfa_time_t)curr.tv_sec * TIMEGRAN) + curr.tv_nsec;34 }35 36 void __kernel_set_timer( __cfa_time_t alarm ) {37 itimerval val;38 val.it_value.tv_sec = alarm / TIMEGRAN; // seconds39 val.it_value.tv_usec = (alarm % TIMEGRAN) / ( TIMEGRAN / 1_000_000L ); // microseconds40 val.it_interval.tv_sec = 0;41 val.it_interval.tv_usec = 0;42 setitimer( ITIMER_REAL, &val, NULL );43 }44 45 //=============================================================================================46 // Alarm logic47 //=============================================================================================48 49 void ?{}( alarm_node_t * this, thread_desc * thrd, __cfa_time_t alarm = 0, __cfa_time_t period = 0 ) {50 this->thrd = thrd;51 this->alarm = alarm;52 this->period = period;53 this->next = 0;54 this->set = false;55 this->kernel_alarm = false;56 }57 58 void ?{}( alarm_node_t * this, processor * proc, __cfa_time_t alarm = 0, __cfa_time_t period = 0 ) {59 this->proc = proc;60 this->alarm = alarm;61 this->period = period;62 this->next = 0;63 this->set = false;64 this->kernel_alarm = true;65 }66 67 void ^?{}( alarm_node_t * this ) {68 if( this->set ) {69 unregister_self( this );70 }71 }72 73 static inline void insert_at( alarm_list_t * this, alarm_node_t * n, __alarm_it_t p ) {74 assert( !n->next );75 if( p == this->tail ) {76 this->tail = &n->next;77 }78 else {79 n->next = *p;80 }81 *p = n;82 }83 84 void insert( alarm_list_t * this, alarm_node_t * n ) {85 alarm_node_t ** it = &this->head;86 while( (*it) && (n->alarm > (*it)->alarm) ) {87 it = &(*it)->next;88 }89 90 insert_at( this, n, it );91 }92 93 alarm_node_t * pop( alarm_list_t * this ) {94 alarm_node_t * head = this->head;95 if( head ) {96 this->head = head->next;97 if( !head->next ) {98 this->tail = &this->head;99 }100 head->next = NULL;101 }102 return head;103 }104 105 static inline void remove_at( alarm_list_t * this, alarm_node_t * n, __alarm_it_t it ) {106 assert( it );107 assert( (*it)->next == n );108 109 (*it)->next = n->next;110 if( !n-> next ) {111 this->tail = it;112 }113 n->next = NULL;114 }115 116 static inline void remove( alarm_list_t * this, alarm_node_t * n ) {117 alarm_node_t ** it = &this->head;118 while( (*it) && (*it)->next != n ) {119 it = &(*it)->next;120 }121 122 if( *it ) { remove_at( this, n, it ); }123 }124 125 void register_self( alarm_node_t * this ) {126 disable_interrupts();127 assert( !systemProcessor->pending_alarm );128 lock( &systemProcessor->alarm_lock );129 {130 insert( &systemProcessor->alarms, this );131 if( systemProcessor->pending_alarm ) {132 tick_preemption();133 }134 }135 unlock( &systemProcessor->alarm_lock );136 this->set = true;137 enable_interrupts();138 }139 140 void unregister_self( alarm_node_t * this ) {141 disable_interrupts();142 lock( &systemProcessor->alarm_lock );143 remove( &systemProcessor->alarms, this );144 unlock( &systemProcessor->alarm_lock );145 disable_interrupts();146 this->set = false;147 } -
src/libcfa/concurrency/kernel
r10e90cb r8ca3a72 28 28 //----------------------------------------------------------------------------- 29 29 // Locks 30 bool try_lock( spinlock * );31 30 void lock( spinlock * ); 32 31 void unlock( spinlock * ); … … 86 85 87 86 struct FinishAction finish; 88 89 struct alarm_node_t * preemption_alarm;90 unsigned int preemption;91 92 unsigned short disable_preempt_count;93 94 bool pending_preemption;95 87 }; 96 88 … … 102 94 103 95 // Local Variables: // 104 // mode: CFA//105 // tab-width: 6//96 // mode: c // 97 // tab-width: 4 // 106 98 // End: // -
src/libcfa/concurrency/kernel.c
r10e90cb r8ca3a72 36 36 //CFA Includes 37 37 #include "libhdr.h" 38 #include "preemption.h"39 38 40 39 //Private includes … … 48 47 KERNEL_STORAGE(processorCtx_t, systemProcessorCtx); 49 48 KERNEL_STORAGE(cluster, systemCluster); 50 KERNEL_STORAGE( system_proc_t, systemProcessor);49 KERNEL_STORAGE(processor, systemProcessor); 51 50 KERNEL_STORAGE(thread_desc, mainThread); 52 51 KERNEL_STORAGE(machine_context_t, mainThread_context); 53 52 54 53 cluster * systemCluster; 55 system_proc_t* systemProcessor;54 processor * systemProcessor; 56 55 thread_desc * mainThread; 57 56 … … 119 118 // Processor coroutine 120 119 void ?{}(processorCtx_t * this, processor * proc) { 121 (&this->__cor){ "Processor"};120 (&this->__cor){}; 122 121 this->proc = proc; 123 122 proc->runner = this; … … 140 139 (&this->terminated){}; 141 140 this->is_terminated = false; 142 this->preemption_alarm = NULL;143 this->preemption = default_preemption();144 this->disable_preempt_count = 1; //Start with interrupts disabled145 this->pending_preemption = false;146 141 147 142 start( this ); … … 154 149 (&this->terminated){}; 155 150 this->is_terminated = false; 156 this->disable_preempt_count = 0;157 this->pending_preemption = false;158 151 159 152 this->runner = runner; 160 153 LIB_DEBUG_PRINT_SAFE("Kernel : constructing processor context %p\n", runner); 161 154 runner{ this }; 162 }163 164 void ?{}(system_proc_t * this, cluster * cltr, processorCtx_t * runner) {165 (&this->alarms){};166 (&this->alarm_lock){};167 this->pending_alarm = false;168 169 (&this->proc){ cltr, runner };170 155 } 171 156 … … 193 178 void main(processorCtx_t * runner) { 194 179 processor * this = runner->proc; 195 196 180 LIB_DEBUG_PRINT_SAFE("Kernel : core %p starting\n", this); 197 181 182 thread_desc * readyThread = NULL; 183 for( unsigned int spin_count = 0; ! this->is_terminated; spin_count++ ) 198 184 { 199 // Setup preemption data 200 preemption_scope scope = { this }; 201 202 LIB_DEBUG_PRINT_SAFE("Kernel : core %p started\n", this); 203 204 thread_desc * readyThread = NULL; 205 for( unsigned int spin_count = 0; ! this->is_terminated; spin_count++ ) 185 readyThread = nextThread( this->cltr ); 186 187 if(readyThread) 206 188 { 207 readyThread = nextThread( this->cltr ); 208 209 if(readyThread) 210 { 211 runThread(this, readyThread); 212 213 //Some actions need to be taken from the kernel 214 finishRunning(this); 215 216 spin_count = 0; 217 } 218 else 219 { 220 spin(this, &spin_count); 221 } 222 } 223 224 LIB_DEBUG_PRINT_SAFE("Kernel : core %p stopping\n", this); 225 } 226 189 runThread(this, readyThread); 190 191 //Some actions need to be taken from the kernel 192 finishRunning(this); 193 194 spin_count = 0; 195 } 196 else 197 { 198 spin(this, &spin_count); 199 } 200 } 201 202 LIB_DEBUG_PRINT_SAFE("Kernel : core %p unlocking thread\n", this); 227 203 signal( &this->terminated ); 228 204 LIB_DEBUG_PRINT_SAFE("Kernel : core %p terminated\n", this); … … 323 299 LIB_DEBUG_PRINT_SAFE("Kernel : Starting core %p\n", this); 324 300 301 // pthread_attr_t attributes; 302 // pthread_attr_init( &attributes ); 303 325 304 pthread_create( &this->kernel_thread, NULL, CtxInvokeProcessor, (void*)this ); 305 306 // pthread_attr_destroy( &attributes ); 326 307 327 308 LIB_DEBUG_PRINT_SAFE("Kernel : core %p started\n", this); … … 335 316 assertf( thrd->next == NULL, "Expected null got %p", thrd->next ); 336 317 337 lock( &systemProcessor-> proc.cltr->lock );338 append( &systemProcessor-> proc.cltr->ready_queue, thrd );339 unlock( &systemProcessor-> proc.cltr->lock );318 lock( &systemProcessor->cltr->lock ); 319 append( &systemProcessor->cltr->ready_queue, thrd ); 320 unlock( &systemProcessor->cltr->lock ); 340 321 } 341 322 … … 386 367 } 387 368 388 //=============================================================================================389 // Kernel Setup logic390 //=============================================================================================391 369 //----------------------------------------------------------------------------- 392 370 // Kernel boot procedures … … 401 379 mainThread{ &info }; 402 380 403 LIB_DEBUG_PRINT_SAFE("Kernel : Main thread ready\n");404 405 // Enable preemption406 kernel_start_preemption();407 408 381 // Initialize the system cluster 409 382 systemCluster = (cluster *)&systemCluster_storage; 410 383 systemCluster{}; 411 384 412 LIB_DEBUG_PRINT_SAFE("Kernel : System cluster ready\n");413 414 385 // Initialize the system processor and the system processor ctx 415 386 // (the coroutine that contains the processing control flow) 416 systemProcessor = ( system_proc_t*)&systemProcessor_storage;387 systemProcessor = (processor *)&systemProcessor_storage; 417 388 systemProcessor{ systemCluster, (processorCtx_t *)&systemProcessorCtx_storage }; 418 389 419 390 // Add the main thread to the ready queue 420 // once resume is called on systemProcessor-> runnerthe mainThread needs to be scheduled like any normal thread391 // once resume is called on systemProcessor->ctx the mainThread needs to be scheduled like any normal thread 421 392 ScheduleThread(mainThread); 422 393 423 394 //initialize the global state variables 424 this_processor = &systemProcessor->proc;395 this_processor = systemProcessor; 425 396 this_processor->current_thread = mainThread; 426 397 this_processor->current_coroutine = &mainThread->cor; … … 429 400 // context. Hence, the main thread does not begin through CtxInvokeThread, like all other threads. The trick here is that 430 401 // mainThread is on the ready queue when this call is made. 431 resume( systemProcessor->proc.runner);402 resume(systemProcessor->runner); 432 403 433 404 … … 443 414 // When its coroutine terminates, it return control to the mainThread 444 415 // which is currently here 445 systemProcessor-> proc.is_terminated = true;416 systemProcessor->is_terminated = true; 446 417 suspend(); 447 418 … … 450 421 // Destroy the system processor and its context in reverse order of construction 451 422 // These were manually constructed so we need manually destroy them 452 ^(systemProcessor-> proc.runner){};423 ^(systemProcessor->runner){}; 453 424 ^(systemProcessor){}; 454 425 … … 513 484 } 514 485 515 //=============================================================================================516 // Kernel Utilities517 //=============================================================================================518 486 //----------------------------------------------------------------------------- 519 487 // Locks … … 523 491 void ^?{}( spinlock * this ) { 524 492 525 }526 527 bool try_lock( spinlock * this ) {528 return this->lock == 0 && __sync_lock_test_and_set_4( &this->lock, 1 ) == 0;529 493 } 530 494 -
src/libcfa/concurrency/kernel_private.h
r10e90cb r8ca3a72 21 21 #include "thread" 22 22 23 #include "alarm.h"24 25 23 //----------------------------------------------------------------------------- 26 24 // Scheduler … … 37 35 //----------------------------------------------------------------------------- 38 36 // Processor 39 coroutineprocessorCtx_t {37 struct processorCtx_t { 40 38 processor * proc; 39 coroutine_desc __cor; 41 40 }; 41 42 DECL_COROUTINE(processorCtx_t); 42 43 43 44 void main(processorCtx_t *); … … 46 47 void finishRunning(processor * this); 47 48 void spin(processor * this, unsigned int * spin_count); 48 49 struct system_proc_t {50 processor proc;51 52 alarm_list_t alarms;53 spinlock alarm_lock;54 55 bool pending_alarm;56 };57 58 extern cluster * systemCluster;59 extern system_proc_t * systemProcessor;60 extern thread_local processor * this_processor;61 62 static inline void disable_interrupts() {63 __attribute__((unused)) unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, 1, __ATOMIC_SEQ_CST );64 assert( prev != (unsigned short) -1 );65 }66 67 static inline void enable_interrupts_noRF() {68 unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST );69 assert( prev != (unsigned short) 0 );70 }71 72 static inline void enable_interrupts() {73 unsigned short prev = __atomic_fetch_add_2( &this_processor->disable_preempt_count, -1, __ATOMIC_SEQ_CST );74 assert( prev != (unsigned short) 0 );75 if( prev == 1 && this_processor->pending_preemption ) {76 ScheduleInternal( this_processor->current_thread );77 this_processor->pending_preemption = false;78 }79 }80 49 81 50 //----------------------------------------------------------------------------- -
src/libcfa/concurrency/monitor
r10e90cb r8ca3a72 92 92 uintptr_t front( condition * this ); 93 93 94 struct __acceptable_t {95 void (*func)(void);96 unsigned short count;97 monitor_desc * monitors[1];98 };99 100 void __accept_internal( unsigned short count, __acceptable_t * acceptables, void (*func)(void) );101 102 94 #endif //MONITOR_H -
src/libcfa/concurrency/monitor.c
r10e90cb r8ca3a72 212 212 ScheduleInternal( locks, count, threads, thread_count ); 213 213 214 215 214 //WE WOKE UP 216 215 … … 313 312 ScheduleInternal( locks, count, &signallee, 1 ); 314 313 315 316 317 318 314 LIB_DEBUG_PRINT_SAFE( "Back from signal block\n" ); 319 315 … … 334 330 ); 335 331 return this->blocked.head->user_info; 336 }337 338 //-----------------------------------------------------------------------------339 // Internal scheduling340 void __accept_internal( unsigned short count, __acceptable_t * acceptables, void (*func)(void) ) {341 // thread_desc * this = this_thread();342 343 // unsigned short count = this->current_monitor_count;344 // unsigned int recursions[ count ]; //Save the current recursion levels to restore them later345 // spinlock * locks [ count ]; //We need to pass-in an array of locks to ScheduleInternal346 347 // lock_all( this->current_monitors, locks, count );348 349 350 351 352 353 // // // Everything is ready to go to sleep354 // // ScheduleInternal( locks, count, threads, thread_count );355 356 357 // //WE WOKE UP358 359 360 // //We are back, restore the owners and recursions361 // lock_all( locks, count );362 // restore_recursion( this->monitors, recursions, count );363 // unlock_all( locks, count );364 332 } 365 333 -
src/main.cc
r10e90cb r8ca3a72 146 146 } // sigSegvBusHandler 147 147 148 void sigAbortHandler( __attribute__((unused))int sig_num ) {148 void sigAbortHandler( int sig_num ) { 149 149 backtrace( 6 ); // skip first 6 stack frames 150 150 signal( SIGABRT, SIG_DFL); // reset default signal handler -
src/tests/test.py
r10e90cb r8ca3a72 197 197 # fetch return code and error from the diff command 198 198 retcode, error = diff(".expect/%s.txt" % test.path, ".out/%s.log" % test.name, dry_run) 199 200 else:201 with open (out_file, "r") as myfile:202 error = myfile.read()203 204 205 199 # clean the executable 206 200 sh("rm -f %s > /dev/null 2>&1" % test.name, dry_run)
Note:
See TracChangeset
for help on using the changeset viewer.