Changes in / [8ca3a72:10e90cb]
- Location:
- src
- Files:
-
- 3 added
- 1 deleted
- 34 edited
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/CodeGenerator.cc
r8ca3a72 r10e90cb 267 267 } 268 268 269 void CodeGenerator::visit( TraitDecl * traitDecl ) {}269 void CodeGenerator::visit( __attribute__((unused)) TraitDecl * traitDecl ) {} 270 270 271 271 void CodeGenerator::visit( TypedefDecl * typeDecl ) { … … 328 328 } 329 329 330 void CodeGenerator::visit( ConstructorInit * init ){330 void CodeGenerator::visit( __attribute__((unused)) 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( NullStmt * nullStmt ) {964 void CodeGenerator::visit( __attribute__((unused)) NullStmt * nullStmt ) { 965 965 //output << indent << CodeGenerator::printLabels( nullStmt->get_labels() ); 966 966 output << "/* null statement */ ;"; -
src/CodeTools/TrackLoc.cc
r8ca3a72 r10e90cb 85 85 } 86 86 87 void postvisit( BaseSyntaxNode * node) {87 void postvisit( __attribute__((unused)) BaseSyntaxNode * node ) { 88 88 parents.pop(); 89 89 } -
src/Common/Assert.cc
r8ca3a72 r10e90cb 21 21 extern const char * __progname; // global name of running executable (argv[0]) 22 22 23 #define CFA_ASSERT_FMT "*CFA assertion error* from program \"%s\" in \"%s\" at line %d in file \"%s\""23 #define CFA_ASSERT_FMT "*CFA assertion error* \"%s\" 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", __progname, function, line, file );27 fprintf( stderr, CFA_ASSERT_FMT ".\n", assertion, __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 ": ", __progname, function, line, file );33 fprintf( stderr, CFA_ASSERT_FMT ": ", assertion, __progname, function, line, file ); 34 34 va_list args; 35 35 va_start( args, fmt ); -
src/Common/PassVisitor.h
r8ca3a72 r10e90cb 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); } 233 234 }; 234 235 -
src/Common/PassVisitor.impl.h
r8ca3a72 r10e90cb 3 3 #define VISIT_START( node ) \ 4 4 call_previsit( node ); \ 5 6 #define VISIT_END( node ) \ 5 if( visit_children() ) { \ 6 7 #define VISIT_END( node ) \ 8 } \ 7 9 return call_postvisit( node ); \ 8 10 9 11 #define MUTATE_START( node ) \ 10 12 call_premutate( node ); \ 13 if( visit_children() ) { \ 11 14 12 15 #define MUTATE_END( type, node ) \ 16 } \ 13 17 return call_postmutate< type * >( node ); \ 14 18 -
src/Common/PassVisitor.proto.h
r8ca3a72 r10e90cb 23 23 24 24 template<typename pass_type, typename node_type> 25 static inline void previsit_impl( __attribute__((unused)) pass_type& pass, node_type * node, __attribute__((unused)) long unused ) {}25 static inline void previsit_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) 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, node_type * node, __attribute__((unused)) long unused ) {}34 static inline void postvisit_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) 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, node_type * node, __attribute__((unused)) long unused ) {}43 static inline void premutate_impl( __attribute__((unused)) pass_type& pass, __attribute__((unused)) 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
r8ca3a72 r10e90cb 65 65 FunctionDecl * forwardDeclare( StructDecl * ); 66 66 ObjectDecl * addField( StructDecl * ); 67 void addRoutines( StructDecl *,ObjectDecl *, FunctionDecl * );67 void addRoutines( 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 ) {249 if( decl->get_name() == type_name && decl->has_body() ) { 250 250 assert( !type_decl ); 251 251 type_decl = decl; … … 264 264 FunctionDecl * func = forwardDeclare( decl ); 265 265 ObjectDecl * field = addField( decl ); 266 addRoutines( decl,field, func );266 addRoutines( field, func ); 267 267 } 268 268 … … 359 359 } 360 360 361 void ConcurrentSueKeyword::addRoutines( StructDecl * decl,ObjectDecl * field, FunctionDecl * func ) {361 void ConcurrentSueKeyword::addRoutines( ObjectDecl * field, FunctionDecl * func ) { 362 362 CompoundStmt * statement = new CompoundStmt( noLabels ); 363 363 statement->push_back( -
src/GenPoly/Box.cc
r8ca3a72 r10e90cb 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, FunctionType *function,Type *retType, std::list< Expression *>::iterator &arg );103 Expression *addRetParam( ApplicationExpr *appExpr, 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 , Type *type);136 DeclClass *handleDecl( DeclClass *decl ); 137 137 template< typename AggDecl > 138 138 AggDecl * handleAggDecl( AggDecl * aggDecl ); … … 663 663 } 664 664 665 Expression *Pass1::addRetParam( ApplicationExpr *appExpr, FunctionType *function,Type *retType, std::list< Expression *>::iterator &arg ) {665 Expression *Pass1::addRetParam( ApplicationExpr *appExpr, 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, function,concrete, arg );732 return addRetParam( appExpr, 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 , function->get_returnVals().front()->get_type(), arg );739 ret = addRetParam( appExpr, 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 , Type *type) {1282 DeclClass * Pass2::handleDecl( DeclClass *decl ) { 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 , functionDecl->get_functionType()) );1296 functionDecl = safe_dynamic_cast< FunctionDecl * > ( handleDecl( functionDecl ) ); 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 , objectDecl->get_type());1321 return handleDecl( objectDecl ); 1322 1322 } 1323 1323 … … 1342 1342 addToTyVarMap( typeDecl, scopeTyVars ); 1343 1343 if ( typeDecl->get_base() ) { 1344 return handleDecl( typeDecl , typeDecl->get_base());1344 return handleDecl( typeDecl ); 1345 1345 } else { 1346 1346 return Parent::mutate( typeDecl ); … … 1349 1349 1350 1350 TypedefDecl * Pass2::mutate( TypedefDecl *typedefDecl ) { 1351 return handleDecl( typedefDecl , typedefDecl->get_base());1351 return handleDecl( typedefDecl ); 1352 1352 } 1353 1353 -
src/InitTweak/FixGlobalInit.cc
r8ca3a72 r10e90cb 125 125 126 126 // only modify global variables 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 ) {}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 ) {} 133 133 134 134 } // namespace InitTweak -
src/InitTweak/FixInit.cc
r8ca3a72 r10e90cb 110 110 111 111 // don't go into other functions 112 virtual void visit( FunctionDecl *decl ) override {}112 virtual void visit( __attribute__((unused)) FunctionDecl *decl ) override {} 113 113 114 114 protected: -
src/InitTweak/InitTweak.cc
r8ca3a72 r10e90cb 92 92 InitImpl( Initializer * init ) : init( init ) {} 93 93 94 virtual std::list< Expression * > next( std::list< Expression * > & indices ) {94 virtual std::list< Expression * > next( __attribute((unused)) 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( UntypedExpr * dst,std::list< Expression * > & indices ) {250 Statement * ExprImpl::buildListInit( __attribute((unused)) UntypedExpr * dst, __attribute((unused)) std::list< Expression * > & indices ) { 251 251 return NULL; 252 252 } … … 475 475 ConstExprChecker() : isConstExpr( true ) {} 476 476 477 virtual void visit( ApplicationExpr *applicationExpr ) { isConstExpr = false; }478 virtual void visit( UntypedExpr *untypedExpr ) { isConstExpr = false; }477 virtual void visit( __attribute((unused)) ApplicationExpr *applicationExpr ) { isConstExpr = false; } 478 virtual void visit( __attribute((unused)) 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( 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; }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; } 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( 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; }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; } 510 510 511 511 bool isConstExpr; -
src/Parser/ParseNode.h
r8ca3a72 r10e90cb 61 61 } 62 62 63 virtual void print( std::ostream &os,int indent = 0 ) const {}64 virtual void printList( std::ostream &os,int indent = 0 ) const {}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 {} 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( std::ostream &os,int indent = 0 ) const override {}116 void printOneLine( std::ostream &os,int indent = 0 ) const {}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 {} 117 117 118 118 template<typename T> … … 283 283 } 284 284 285 virtual void print( std::ostream &os,int indent = 0 ) const override;286 virtual void printList( std::ostream &os,int indent = 0 ) const override;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; 287 287 288 288 Declaration * build() const; … … 363 363 virtual StatementNode * append_last_case( StatementNode * ); 364 364 365 virtual void print( std::ostream &os,int indent = 0 ) const override {}366 virtual void printList( std::ostream &os,int indent = 0 ) const override {}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 {} 367 367 private: 368 368 std::unique_ptr<Statement> stmt; -
src/ResolvExpr/CommonType.cc
r8ca3a72 r10e90cb 43 43 44 44 void getCommonWithVoidPointer( PointerType* voidPointer, PointerType* otherPointer ); 45 template< typename RefType > void handleRefType( RefType *inst, Type *other );46 45 47 46 Type *result; … … 126 125 } 127 126 128 void CommonType::visit( VoidType *voidType ) { 129 } 127 void CommonType::visit( __attribute((unused)) VoidType *voidType ) {} 130 128 131 129 void CommonType::visit( BasicType *basicType ) { … … 189 187 } 190 188 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 } 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 ) {} 205 193 206 194 void CommonType::visit( EnumInstType *enumInstType ) { … … 214 202 } 215 203 216 void CommonType::visit( TraitInstType *aggregateUseType ) {204 void CommonType::visit( __attribute((unused)) TraitInstType *aggregateUseType ) { 217 205 } 218 206 … … 239 227 } 240 228 241 void CommonType::visit( TupleType *tupleType ) { 242 } 243 244 void CommonType::visit( VarArgsType *varArgsType ) { 245 } 229 void CommonType::visit( __attribute((unused)) TupleType *tupleType ) {} 230 void CommonType::visit( __attribute((unused)) VarArgsType *varArgsType ) {} 246 231 247 232 void CommonType::visit( ZeroType *zeroType ) { -
src/ResolvExpr/ConversionCost.cc
r8ca3a72 r10e90cb 149 149 }; 150 150 151 void ConversionCost::visit( VoidType *voidType) {151 void ConversionCost::visit( __attribute((unused)) VoidType *voidType ) { 152 152 cost = Cost::infinity; 153 153 } … … 186 186 } 187 187 188 void ConversionCost::visit(ArrayType *arrayType) { 189 } 190 191 void ConversionCost::visit(FunctionType *functionType) { 192 } 188 void ConversionCost::visit(__attribute((unused)) ArrayType *arrayType) {} 189 void ConversionCost::visit(__attribute((unused)) FunctionType *functionType) {} 193 190 194 191 void ConversionCost::visit(StructInstType *inst) { … … 208 205 } 209 206 210 void ConversionCost::visit( EnumInstType *inst) {207 void ConversionCost::visit( __attribute((unused)) EnumInstType *inst ) { 211 208 static Type::Qualifiers q; 212 209 static BasicType integer( q, BasicType::SignedInt ); … … 217 214 } 218 215 219 void ConversionCost::visit( TraitInstType *inst) {216 void ConversionCost::visit( __attribute((unused)) TraitInstType *inst) { 220 217 } 221 218 … … 239 236 } 240 237 241 void ConversionCost::visit( TupleType *tupleType) {238 void ConversionCost::visit( __attribute((unused)) TupleType *tupleType) { 242 239 Cost c; 243 240 if ( TupleType *destAsTuple = dynamic_cast< TupleType* >( dest ) ) { … … 259 256 } 260 257 261 void ConversionCost::visit( VarArgsType *varArgsType) {258 void ConversionCost::visit( __attribute((unused)) VarArgsType *varArgsType) { 262 259 if ( dynamic_cast< VarArgsType* >( dest ) ) { 263 260 cost = Cost::zero; … … 265 262 } 266 263 267 void ConversionCost::visit( ZeroType *zeroType) {264 void ConversionCost::visit( __attribute((unused)) ZeroType *zeroType) { 268 265 if ( dynamic_cast< ZeroType* >( dest ) ) { 269 266 cost = Cost::zero; … … 281 278 } 282 279 283 void ConversionCost::visit( OneType *oneType) {280 void ConversionCost::visit( __attribute((unused)) OneType *oneType) { 284 281 if ( dynamic_cast< OneType* >( dest ) ) { 285 282 cost = Cost::zero; -
src/ResolvExpr/PtrsAssignable.cc
r8ca3a72 r10e90cb 63 63 } 64 64 65 PtrsAssignable::PtrsAssignable( Type *dest, const TypeEnvironment &env ) : dest( dest ), result( 0 ), env( env ) { 66 } 65 PtrsAssignable::PtrsAssignable( Type *dest, const TypeEnvironment &env ) : dest( dest ), result( 0 ), env( env ) {} 67 66 68 void PtrsAssignable::visit( VoidType *voidType ) {67 void PtrsAssignable::visit( __attribute((unused)) VoidType *voidType ) { 69 68 if ( dynamic_cast< FunctionType* >( dest ) ) { 70 69 result = 0; … … 74 73 } 75 74 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 ) { 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 ) { 86 79 result = -1; 87 80 } 88 81 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 } 82 void PtrsAssignable::visit( __attribute__((unused)) StructInstType *inst ) {} 83 void PtrsAssignable::visit( __attribute__((unused)) UnionInstType *inst ) {} 96 84 97 85 void PtrsAssignable::visit( EnumInstType *inst ) { … … 103 91 } 104 92 105 void PtrsAssignable::visit( TraitInstType *inst ) { 106 // I definitely don't think we should be doing anything here 107 } 108 93 void PtrsAssignable::visit( __attribute__((unused)) TraitInstType *inst ) {} 109 94 void PtrsAssignable::visit( TypeInstType *inst ) { 110 95 EqvClass eqvClass; … … 116 101 } 117 102 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 } 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 ) {} 151 107 152 108 } // namespace ResolvExpr -
src/ResolvExpr/PtrsCastable.cc
r8ca3a72 r10e90cb 92 92 } 93 93 94 void PtrsCastable::visit( VoidType *voidType) {94 void PtrsCastable::visit( __attribute__((unused)) VoidType *voidType) { 95 95 result = objectCast( dest, env, indexer ); 96 96 } 97 97 98 void PtrsCastable::visit( BasicType *basicType) {98 void PtrsCastable::visit( __attribute__((unused)) BasicType *basicType) { 99 99 result = objectCast( dest, env, indexer ); 100 100 } 101 101 102 void PtrsCastable::visit( PointerType *pointerType) {102 void PtrsCastable::visit( __attribute__((unused)) PointerType *pointerType) { 103 103 result = objectCast( dest, env, indexer ); 104 104 } 105 105 106 void PtrsCastable::visit( ArrayType *arrayType) {106 void PtrsCastable::visit( __attribute__((unused)) ArrayType *arrayType) { 107 107 result = objectCast( dest, env, indexer ); 108 108 } 109 109 110 void PtrsCastable::visit( FunctionType *functionType) {110 void PtrsCastable::visit( __attribute__((unused)) FunctionType *functionType) { 111 111 // result = -1; 112 112 result = functionCast( dest, env, indexer ); 113 113 } 114 114 115 void PtrsCastable::visit( StructInstType *inst) {115 void PtrsCastable::visit( __attribute__((unused)) StructInstType *inst) { 116 116 result = objectCast( dest, env, indexer ); 117 117 } 118 118 119 void PtrsCastable::visit( UnionInstType *inst) {119 void PtrsCastable::visit( __attribute__((unused)) UnionInstType *inst) { 120 120 result = objectCast( dest, env, indexer ); 121 121 } 122 122 123 void PtrsCastable::visit( EnumInstType *inst) {123 void PtrsCastable::visit( __attribute__((unused)) EnumInstType *inst) { 124 124 if ( dynamic_cast< EnumInstType* >( dest ) ) { 125 125 result = 1; … … 144 144 } 145 145 146 void PtrsCastable::visit( TupleType *tupleType) {146 void PtrsCastable::visit( __attribute__((unused)) TupleType *tupleType) { 147 147 result = objectCast( dest, env, indexer ); 148 148 } 149 149 150 void PtrsCastable::visit( VarArgsType *varArgsType) {150 void PtrsCastable::visit( __attribute__((unused)) VarArgsType *varArgsType) { 151 151 result = objectCast( dest, env, indexer ); 152 152 } 153 153 154 void PtrsCastable::visit( ZeroType *zeroType) {154 void PtrsCastable::visit( __attribute__((unused)) ZeroType *zeroType) { 155 155 result = objectCast( dest, env, indexer ); 156 156 } 157 157 158 void PtrsCastable::visit( OneType *oneType) {158 void PtrsCastable::visit( __attribute__((unused)) OneType *oneType) { 159 159 result = objectCast( dest, env, indexer ); 160 160 } -
src/ResolvExpr/TypeMap.h
r8ca3a72 r10e90cb 110 110 } 111 111 112 virtual void visit( VoidType *voidType ) {112 virtual void visit( __attribute__((unused)) VoidType *voidType ) { 113 113 findAndReplace( typeMap.voidValue ); 114 114 } … … 138 138 } 139 139 140 virtual void visit( FunctionType *functionType ) {140 virtual void visit( __attribute__((unused)) FunctionType *functionType ) { 141 141 findAndReplace( typeMap.functionPointerValue ); 142 142 } -
src/ResolvExpr/typeops.h
r8ca3a72 r10e90cb 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 } // if142 }143 return ( i1 == c1.end() ) && ( i2 == c2.end() );144 }145 146 134 /// creates the type represented by the list of returnVals in a FunctionType. The caller owns the return value. 147 135 Type * extractResultType( FunctionType * functionType ); -
src/SymTab/ImplementationType.cc
r8ca3a72 r10e90cb 61 61 } 62 62 63 void ImplementationType::visit(VoidType *voidType) { 64 } 65 66 void ImplementationType::visit(BasicType *basicType) { 67 } 63 void ImplementationType::visit( __attribute__((unused)) VoidType *voidType ) {} 64 void ImplementationType::visit( __attribute__((unused)) BasicType *basicType ) {} 68 65 69 66 void ImplementationType::visit(PointerType *pointerType) { … … 89 86 } 90 87 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 } 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 ) {} 102 92 103 93 void ImplementationType::visit(TypeInstType *inst) { … … 120 110 } 121 111 122 void ImplementationType::visit(VarArgsType *varArgsType) { 123 } 124 125 void ImplementationType::visit(ZeroType *zeroType) { 126 } 127 128 void ImplementationType::visit(OneType *oneType) { 129 } 112 void ImplementationType::visit( __attribute__((unused)) VarArgsType *varArgsType ) {} 113 void ImplementationType::visit( __attribute__((unused)) ZeroType *zeroType ) {} 114 void ImplementationType::visit( __attribute__((unused)) OneType *oneType ) {} 130 115 } // namespace SymTab 131 116 -
src/SynTree/Statement.cc
r8ca3a72 r10e90cb 30 30 Statement::Statement( std::list<Label> _labels ) : labels( _labels ) {} 31 31 32 void Statement::print( std::ostream &,int indent ) const {}32 void Statement::print( __attribute__((unused)) std::ostream &, __attribute__((unused)) 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, int indent ) const {367 void NullStmt::print( std::ostream &os, __attribute__((unused)) int indent ) const { 368 368 os << "Null Statement" << endl ; 369 369 } -
src/SynTree/Type.h
r8ca3a72 r10e90cb 334 334 virtual void print( std::ostream & os, int indent = 0 ) const; 335 335 336 virtual void lookup( const std::string & name,std::list< Declaration* > & foundDecls ) const {}336 virtual void lookup( __attribute__((unused)) const std::string & name, __attribute__((unused)) std::list< Declaration* > & foundDecls ) const {} 337 337 protected: 338 338 virtual std::string typeString() const = 0; -
src/SynTree/Visitor.cc
r8ca3a72 r10e90cb 122 122 } 123 123 124 void Visitor::visit( BranchStmt *branchStmt ) {124 void Visitor::visit( __attribute__((unused)) BranchStmt *branchStmt ) { 125 125 } 126 126 … … 143 143 } 144 144 145 void Visitor::visit( NullStmt *nullStmt ) {145 void Visitor::visit( __attribute__((unused)) NullStmt *nullStmt ) { 146 146 } 147 147 … … 445 445 446 446 447 void Visitor::visit( Subrange *subrange ) {}448 449 450 void Visitor::visit( Constant *constant ) {}447 void Visitor::visit( __attribute__((unused)) Subrange *subrange ) {} 448 449 450 void Visitor::visit( __attribute__((unused)) Constant *constant ) {} 451 451 // Local Variables: // 452 452 // tab-width: 4 // -
src/driver/cc1.cc
r8ca3a72 r10e90cb 84 84 85 85 86 void sigTermHandler( int signal ) {86 void sigTermHandler( __attribute__((unused)) 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[], const char * const env[] ) {471 int main( const int argc, const char * const argv[], __attribute__((unused)) const char * const env[] ) { 472 472 #ifdef __DEBUG_H__ 473 473 for ( int i = 0; env[i] != NULL; i += 1 ) { -
src/driver/cfa.cc
r8ca3a72 r10e90cb 271 271 args[nargs] = "-ldl"; 272 272 nargs += 1; 273 args[nargs] = "-lrt"; 274 nargs += 1; 273 275 args[nargs] = "-Xlinker"; 274 276 nargs += 1; -
src/libcfa/Makefile.am
r8ca3a72 r10e90cb 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/ signal.c56 libsrc += concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/preemption.c 57 57 endif 58 58 -
src/libcfa/Makefile.in
r8ca3a72 r10e90cb 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/ signal.c48 @BUILD_CONCURRENCY_TRUE@am__append_4 = concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c concurrency/invoke.c concurrency/preemption.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/ signal.c106 concurrency/invoke.c concurrency/preemption.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- signal.$(OBJEXT)124 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-preemption.$(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/ signal.c140 concurrency/invoke.c concurrency/preemption.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- signal.$(OBJEXT)156 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-preemption.$(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-signal.$(OBJEXT): concurrency/$(am__dirstamp) \ 447 concurrency/libcfa_d_a-preemption.$(OBJEXT): \ 448 concurrency/$(am__dirstamp) \ 448 449 concurrency/$(DEPDIR)/$(am__dirstamp) 449 450 libcfa-d.a: $(libcfa_d_a_OBJECTS) $(libcfa_d_a_DEPENDENCIES) $(EXTRA_libcfa_d_a_DEPENDENCIES) … … 473 474 concurrency/libcfa_a-invoke.$(OBJEXT): concurrency/$(am__dirstamp) \ 474 475 concurrency/$(DEPDIR)/$(am__dirstamp) 475 concurrency/libcfa_a-signal.$(OBJEXT): concurrency/$(am__dirstamp) \ 476 concurrency/libcfa_a-preemption.$(OBJEXT): \ 477 concurrency/$(am__dirstamp) \ 476 478 concurrency/$(DEPDIR)/$(am__dirstamp) 477 479 libcfa.a: $(libcfa_a_OBJECTS) $(libcfa_a_DEPENDENCIES) $(EXTRA_libcfa_a_DEPENDENCIES) … … 488 490 -rm -f concurrency/libcfa_a-kernel.$(OBJEXT) 489 491 -rm -f concurrency/libcfa_a-monitor.$(OBJEXT) 490 -rm -f concurrency/libcfa_a- signal.$(OBJEXT)492 -rm -f concurrency/libcfa_a-preemption.$(OBJEXT) 491 493 -rm -f concurrency/libcfa_a-thread.$(OBJEXT) 492 494 -rm -f concurrency/libcfa_d_a-alarm.$(OBJEXT) … … 495 497 -rm -f concurrency/libcfa_d_a-kernel.$(OBJEXT) 496 498 -rm -f concurrency/libcfa_d_a-monitor.$(OBJEXT) 497 -rm -f concurrency/libcfa_d_a- signal.$(OBJEXT)499 -rm -f concurrency/libcfa_d_a-preemption.$(OBJEXT) 498 500 -rm -f concurrency/libcfa_d_a-thread.$(OBJEXT) 499 501 -rm -f containers/libcfa_a-maybe.$(OBJEXT) … … 537 539 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-kernel.Po@am__quote@ 538 540 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-monitor.Po@am__quote@ 539 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a- signal.Po@am__quote@541 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-preemption.Po@am__quote@ 540 542 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-thread.Po@am__quote@ 541 543 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-alarm.Po@am__quote@ … … 544 546 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-kernel.Po@am__quote@ 545 547 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po@am__quote@ 546 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a- signal.Po@am__quote@548 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-preemption.Po@am__quote@ 547 549 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-thread.Po@am__quote@ 548 550 @AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_a-maybe.Po@am__quote@ … … 869 871 @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` 870 872 871 concurrency/libcfa_d_a- signal.o: concurrency/signal.c872 @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.c873 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a- signal.Tpo concurrency/$(DEPDIR)/libcfa_d_a-signal.Po874 @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.c877 878 concurrency/libcfa_d_a- signal.obj: concurrency/signal.c879 @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.Po881 @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`873 concurrency/libcfa_d_a-preemption.o: concurrency/preemption.c 874 @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.c 875 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-preemption.Tpo concurrency/$(DEPDIR)/libcfa_d_a-preemption.Po 876 @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.c 879 880 concurrency/libcfa_d_a-preemption.obj: concurrency/preemption.c 881 @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.Po 883 @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` 884 886 885 887 libcfa_a-libcfa-prelude.obj: libcfa-prelude.c … … 1163 1165 @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` 1164 1166 1165 concurrency/libcfa_a- signal.o: concurrency/signal.c1166 @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.c1167 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a- signal.Tpo concurrency/$(DEPDIR)/libcfa_a-signal.Po1168 @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.c1171 1172 concurrency/libcfa_a- signal.obj: concurrency/signal.c1173 @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.Po1175 @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`1167 concurrency/libcfa_a-preemption.o: concurrency/preemption.c 1168 @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.c 1169 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-preemption.Tpo concurrency/$(DEPDIR)/libcfa_a-preemption.Po 1170 @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.c 1173 1174 concurrency/libcfa_a-preemption.obj: concurrency/preemption.c 1175 @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.Po 1177 @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` 1178 1180 install-nobase_cfa_includeHEADERS: $(nobase_cfa_include_HEADERS) 1179 1181 @$(NORMAL_INSTALL) -
src/libcfa/concurrency/alarm.c
r8ca3a72 r10e90cb 1 // -*- Mode: CFA -*- 2 // 3 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo 4 // 5 // The contents of this file are covered under the licence agreement in the 6 // file "LICENCE" distributed with Cforall. 7 // 8 // alarm.c -- 9 // 10 // Author : Thierry Delisle 11 // Created On : Fri Jun 2 11:31:25 2017 12 // Last Modified By : Thierry Delisle 13 // Last Modified On : -- 14 // Update Count : 0 15 // 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 logic 28 //============================================================================================= 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; // seconds 39 val.it_value.tv_usec = (alarm % TIMEGRAN) / ( TIMEGRAN / 1_000_000L ); // microseconds 40 val.it_interval.tv_sec = 0; 41 val.it_interval.tv_usec = 0; 42 setitimer( ITIMER_REAL, &val, NULL ); 43 } 44 45 //============================================================================================= 46 // Alarm logic 47 //============================================================================================= 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
r8ca3a72 r10e90cb 28 28 //----------------------------------------------------------------------------- 29 29 // Locks 30 bool try_lock( spinlock * ); 30 31 void lock( spinlock * ); 31 32 void unlock( spinlock * ); … … 85 86 86 87 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; 87 95 }; 88 96 … … 94 102 95 103 // Local Variables: // 96 // mode: c//97 // tab-width: 4//104 // mode: CFA // 105 // tab-width: 6 // 98 106 // End: // -
src/libcfa/concurrency/kernel.c
r8ca3a72 r10e90cb 36 36 //CFA Includes 37 37 #include "libhdr.h" 38 #include "preemption.h" 38 39 39 40 //Private includes … … 47 48 KERNEL_STORAGE(processorCtx_t, systemProcessorCtx); 48 49 KERNEL_STORAGE(cluster, systemCluster); 49 KERNEL_STORAGE( processor, systemProcessor);50 KERNEL_STORAGE(system_proc_t, systemProcessor); 50 51 KERNEL_STORAGE(thread_desc, mainThread); 51 52 KERNEL_STORAGE(machine_context_t, mainThread_context); 52 53 53 54 cluster * systemCluster; 54 processor* systemProcessor;55 system_proc_t * systemProcessor; 55 56 thread_desc * mainThread; 56 57 … … 118 119 // Processor coroutine 119 120 void ?{}(processorCtx_t * this, processor * proc) { 120 (&this->__cor){ };121 (&this->__cor){ "Processor" }; 121 122 this->proc = proc; 122 123 proc->runner = this; … … 139 140 (&this->terminated){}; 140 141 this->is_terminated = false; 142 this->preemption_alarm = NULL; 143 this->preemption = default_preemption(); 144 this->disable_preempt_count = 1; //Start with interrupts disabled 145 this->pending_preemption = false; 141 146 142 147 start( this ); … … 149 154 (&this->terminated){}; 150 155 this->is_terminated = false; 156 this->disable_preempt_count = 0; 157 this->pending_preemption = false; 151 158 152 159 this->runner = runner; 153 160 LIB_DEBUG_PRINT_SAFE("Kernel : constructing processor context %p\n", runner); 154 161 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 }; 155 170 } 156 171 … … 178 193 void main(processorCtx_t * runner) { 179 194 processor * this = runner->proc; 195 180 196 LIB_DEBUG_PRINT_SAFE("Kernel : core %p starting\n", this); 181 197 182 thread_desc * readyThread = NULL;183 for( unsigned int spin_count = 0; ! this->is_terminated; spin_count++ )184 198 { 185 readyThread = nextThread( this->cltr ); 186 187 if(readyThread) 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++ ) 188 206 { 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); 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 203 227 signal( &this->terminated ); 204 228 LIB_DEBUG_PRINT_SAFE("Kernel : core %p terminated\n", this); … … 299 323 LIB_DEBUG_PRINT_SAFE("Kernel : Starting core %p\n", this); 300 324 301 // pthread_attr_t attributes;302 // pthread_attr_init( &attributes );303 304 325 pthread_create( &this->kernel_thread, NULL, CtxInvokeProcessor, (void*)this ); 305 306 // pthread_attr_destroy( &attributes );307 326 308 327 LIB_DEBUG_PRINT_SAFE("Kernel : core %p started\n", this); … … 316 335 assertf( thrd->next == NULL, "Expected null got %p", thrd->next ); 317 336 318 lock( &systemProcessor-> cltr->lock );319 append( &systemProcessor-> cltr->ready_queue, thrd );320 unlock( &systemProcessor-> cltr->lock );337 lock( &systemProcessor->proc.cltr->lock ); 338 append( &systemProcessor->proc.cltr->ready_queue, thrd ); 339 unlock( &systemProcessor->proc.cltr->lock ); 321 340 } 322 341 … … 367 386 } 368 387 388 //============================================================================================= 389 // Kernel Setup logic 390 //============================================================================================= 369 391 //----------------------------------------------------------------------------- 370 392 // Kernel boot procedures … … 379 401 mainThread{ &info }; 380 402 403 LIB_DEBUG_PRINT_SAFE("Kernel : Main thread ready\n"); 404 405 // Enable preemption 406 kernel_start_preemption(); 407 381 408 // Initialize the system cluster 382 409 systemCluster = (cluster *)&systemCluster_storage; 383 410 systemCluster{}; 384 411 412 LIB_DEBUG_PRINT_SAFE("Kernel : System cluster ready\n"); 413 385 414 // Initialize the system processor and the system processor ctx 386 415 // (the coroutine that contains the processing control flow) 387 systemProcessor = ( processor*)&systemProcessor_storage;416 systemProcessor = (system_proc_t *)&systemProcessor_storage; 388 417 systemProcessor{ systemCluster, (processorCtx_t *)&systemProcessorCtx_storage }; 389 418 390 419 // Add the main thread to the ready queue 391 // once resume is called on systemProcessor-> ctxthe mainThread needs to be scheduled like any normal thread420 // once resume is called on systemProcessor->runner the mainThread needs to be scheduled like any normal thread 392 421 ScheduleThread(mainThread); 393 422 394 423 //initialize the global state variables 395 this_processor = systemProcessor;424 this_processor = &systemProcessor->proc; 396 425 this_processor->current_thread = mainThread; 397 426 this_processor->current_coroutine = &mainThread->cor; … … 400 429 // context. Hence, the main thread does not begin through CtxInvokeThread, like all other threads. The trick here is that 401 430 // mainThread is on the ready queue when this call is made. 402 resume( systemProcessor->runner);431 resume( systemProcessor->proc.runner ); 403 432 404 433 … … 414 443 // When its coroutine terminates, it return control to the mainThread 415 444 // which is currently here 416 systemProcessor-> is_terminated = true;445 systemProcessor->proc.is_terminated = true; 417 446 suspend(); 418 447 … … 421 450 // Destroy the system processor and its context in reverse order of construction 422 451 // These were manually constructed so we need manually destroy them 423 ^(systemProcessor-> runner){};452 ^(systemProcessor->proc.runner){}; 424 453 ^(systemProcessor){}; 425 454 … … 484 513 } 485 514 515 //============================================================================================= 516 // Kernel Utilities 517 //============================================================================================= 486 518 //----------------------------------------------------------------------------- 487 519 // Locks … … 491 523 void ^?{}( spinlock * this ) { 492 524 525 } 526 527 bool try_lock( spinlock * this ) { 528 return this->lock == 0 && __sync_lock_test_and_set_4( &this->lock, 1 ) == 0; 493 529 } 494 530 -
src/libcfa/concurrency/kernel_private.h
r8ca3a72 r10e90cb 21 21 #include "thread" 22 22 23 #include "alarm.h" 24 23 25 //----------------------------------------------------------------------------- 24 26 // Scheduler … … 35 37 //----------------------------------------------------------------------------- 36 38 // Processor 37 structprocessorCtx_t {39 coroutine processorCtx_t { 38 40 processor * proc; 39 coroutine_desc __cor;40 41 }; 41 42 DECL_COROUTINE(processorCtx_t);43 42 44 43 void main(processorCtx_t *); … … 47 46 void finishRunning(processor * this); 48 47 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 } 49 80 50 81 //----------------------------------------------------------------------------- -
src/libcfa/concurrency/monitor
r8ca3a72 r10e90cb 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 94 102 #endif //MONITOR_H -
src/libcfa/concurrency/monitor.c
r8ca3a72 r10e90cb 212 212 ScheduleInternal( locks, count, threads, thread_count ); 213 213 214 214 215 //WE WOKE UP 215 216 … … 312 313 ScheduleInternal( locks, count, &signallee, 1 ); 313 314 315 316 317 314 318 LIB_DEBUG_PRINT_SAFE( "Back from signal block\n" ); 315 319 … … 330 334 ); 331 335 return this->blocked.head->user_info; 336 } 337 338 //----------------------------------------------------------------------------- 339 // Internal scheduling 340 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 later 345 // spinlock * locks [ count ]; //We need to pass-in an array of locks to ScheduleInternal 346 347 // lock_all( this->current_monitors, locks, count ); 348 349 350 351 352 353 // // // Everything is ready to go to sleep 354 // // ScheduleInternal( locks, count, threads, thread_count ); 355 356 357 // //WE WOKE UP 358 359 360 // //We are back, restore the owners and recursions 361 // lock_all( locks, count ); 362 // restore_recursion( this->monitors, recursions, count ); 363 // unlock_all( locks, count ); 332 364 } 333 365 -
src/main.cc
r8ca3a72 r10e90cb 146 146 } // sigSegvBusHandler 147 147 148 void sigAbortHandler( int sig_num ) {148 void sigAbortHandler( __attribute__((unused)) 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
r8ca3a72 r10e90cb 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 199 205 # clean the executable 200 206 sh("rm -f %s > /dev/null 2>&1" % test.name, dry_run)
Note: See TracChangeset
for help on using the changeset viewer.