Changes in / [70b4aeb9:bbfe226]
- Files:
-
- 4 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/mutex_stmt.hfa
r70b4aeb9 rbbfe226 38 38 } 39 39 40 struct scoped_lock { 41 L * internal_lock; 42 }; 43 44 static inline void ?{}( scoped_lock(L) & this, L & internal_lock ) { 45 this.internal_lock = &internal_lock; 46 lock(internal_lock); 47 } 48 49 static inline void ^?{}( scoped_lock(L) & this ) with(this) { 50 unlock(*internal_lock); 51 } 52 40 53 static inline L * __get_ptr( L & this ) { 41 54 return &this; -
src/AST/Copy.hpp
r70b4aeb9 rbbfe226 10 10 // Created On : Wed Jul 10 16:13:00 2019 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Nov 11 9:22:00 202113 // Update Count : 212 // Last Modified On : Wed Dec 15 11:07:00 2021 13 // Update Count : 3 14 14 // 15 15 … … 52 52 Node * deepCopy<Node>( const Node * localRoot ); 53 53 54 template<typename node_t, enum Node::ref_type ref_t> 55 node_t * shallowCopy( const ptr_base<node_t, ref_t> & localRoot ) { 56 return shallowCopy( localRoot.get() ); 57 } 58 59 template<typename node_t, enum Node::ref_type ref_t> 60 node_t * deepCopy( const ptr_base<node_t, ref_t> & localRoot ) { 61 return deepCopy( localRoot.get() ); 62 } 63 54 64 } 55 65 -
src/AST/Node.hpp
r70b4aeb9 rbbfe226 188 188 } 189 189 190 ptr_base & operator=( const node_t * node ) { 191 assign( node ); 192 return *this; 193 } 194 190 195 template<typename o_node_t> 191 196 ptr_base & operator=( const o_node_t * node ) { -
src/ControlStruct/module.mk
r70b4aeb9 rbbfe226 22 22 ControlStruct/ForExprMutator.cc \ 23 23 ControlStruct/ForExprMutator.h \ 24 ControlStruct/HoistControlDecls.cpp \ 25 ControlStruct/HoistControlDecls.hpp \ 24 26 ControlStruct/LabelFixer.cc \ 25 27 ControlStruct/LabelFixer.h \ -
src/SymTab/Validate.cc
r70b4aeb9 rbbfe226 453 453 } 454 454 455 void decayForallPointers( std::list< Declaration * > & translationUnit ) { 456 PassVisitor<ForallPointerDecay_old> fpd; 457 acceptAll( translationUnit, fpd ); 458 } 459 455 460 void validate( std::list< Declaration * > &translationUnit, __attribute__((unused)) bool doDebug ) { 456 461 validate_A( translationUnit ); … … 470 475 type->accept( fpd ); 471 476 } 472 473 477 474 478 void HoistTypeDecls::handleType( Type * type ) { -
src/SymTab/Validate.h
r70b4aeb9 rbbfe226 42 42 void validate_E( std::list< Declaration * > &translationUnit ); 43 43 void validate_F( std::list< Declaration * > &translationUnit ); 44 void decayForallPointers( std::list< Declaration * > & translationUnit ); 44 45 45 46 const ast::Type * validateType( -
src/Validate/module.mk
r70b4aeb9 rbbfe226 16 16 17 17 SRC_VALIDATE = \ 18 Validate/Autogen.cpp \ 19 Validate/Autogen.hpp \ 18 20 Validate/CompoundLiteral.cpp \ 19 21 Validate/CompoundLiteral.hpp \ -
src/main.cc
r70b4aeb9 rbbfe226 10 10 // Created On : Fri May 15 23:12:02 2015 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Tue Nov 30 10:25:00 202113 // Update Count : 6 5912 // Last Modified On : Wed Jan 26 14:09:00 2022 13 // Update Count : 670 14 14 // 15 15 … … 55 55 #include "ControlStruct/ExceptTranslate.h" // for translateEHM 56 56 #include "ControlStruct/FixLabels.hpp" // for fixLabels 57 #include "ControlStruct/HoistControlDecls.hpp" // hoistControlDecls 57 58 #include "ControlStruct/Mutate.h" // for mutate 58 59 #include "GenPoly/Box.h" // for box … … 73 74 #include "SynTree/Visitor.h" // for acceptAll 74 75 #include "Tuples/Tuples.h" // for expandMemberTuples, expan... 76 #include "Validate/Autogen.hpp" // for autogenerateRoutines 75 77 #include "Validate/FindSpecialDecls.h" // for findGlobalDecls 76 78 #include "Validate/CompoundLiteral.hpp" // for handleCompoundLiterals … … 78 80 #include "Validate/LabelAddressFixer.hpp" // for fixLabelAddresses 79 81 #include "Virtual/ExpandCasts.h" // for expandCasts 80 81 82 82 83 static void NewPass( const char * const name ) { … … 326 327 PASS( "Validate-B", SymTab::validate_B( translationUnit ) ); 327 328 PASS( "Validate-C", SymTab::validate_C( translationUnit ) ); 328 PASS( "Validate-D", SymTab::validate_D( translationUnit ) );329 329 330 330 CodeTools::fillLocations( translationUnit ); 331 331 332 332 if( useNewAST ) { 333 PASS( "Apply Concurrent Keywords", Concurrency::applyKeywords( translationUnit ) ); 334 PASS( "Forall Pointer Decay", SymTab::decayForallPointers( translationUnit ) ); 335 CodeTools::fillLocations( translationUnit ); 336 333 337 if (Stats::Counters::enabled) { 334 338 ast::pass_visitor_stats.avg = Stats::Counters::build<Stats::Counters::AverageCounter<double>>("Average Depth - New"); … … 338 342 339 343 forceFillCodeLocations( transUnit ); 344 345 // Must happen before autogen routines are added. 346 PASS( "Hoist Control Declarations", ControlStruct::hoistControlDecls( transUnit ) ); 347 348 // Must be after enum and pointer decay. 349 // Must be before compound literals. 350 PASS( "Generate Autogen Routines", Validate::autogenerateRoutines( transUnit ) ); 340 351 341 352 PASS( "Implement Mutex", Concurrency::implementMutex( transUnit ) ); … … 406 417 translationUnit = convert( move( transUnit ) ); 407 418 } else { 419 PASS( "Validate-D", SymTab::validate_D( translationUnit ) ); 408 420 PASS( "Validate-E", SymTab::validate_E( translationUnit ) ); 409 421 PASS( "Validate-F", SymTab::validate_F( translationUnit ) ); -
tests/concurrent/mutexstmt/.expect/locks.txt
r70b4aeb9 rbbfe226 3 3 Start Test: multi lock deadlock/mutual exclusion 4 4 End Test: multi lock deadlock/mutual exclusion 5 Start Test: single scoped lock mutual exclusion 6 End Test: single scoped lock mutual exclusion 7 Start Test: multi scoped lock deadlock/mutual exclusion 8 End Test: multi scoped lock deadlock/mutual exclusion -
tests/concurrent/mutexstmt/locks.cfa
r70b4aeb9 rbbfe226 59 59 } 60 60 61 thread T_Mutex_Scoped {}; 61 62 63 void main( T_Mutex_Scoped & this ) { 64 for (unsigned int i = 0; i < num_times; i++) { 65 { 66 scoped_lock(single_acquisition_lock) s{m1}; 67 count++; 68 } 69 { 70 scoped_lock(single_acquisition_lock) s{m1}; 71 assert(!insideFlag); 72 insideFlag = true; 73 assert(insideFlag); 74 insideFlag = false; 75 } 76 } 77 } 78 79 thread T_Multi_Scoped {}; 80 81 void main( T_Multi_Scoped & this ) { 82 for (unsigned int i = 0; i < num_times; i++) { 83 { 84 scoped_lock(single_acquisition_lock) s{m1}; 85 assert(!insideFlag); 86 insideFlag = true; 87 assert(insideFlag); 88 insideFlag = false; 89 } 90 { 91 scoped_lock(single_acquisition_lock) s1{m1}; 92 scoped_lock(single_acquisition_lock) s2{m2}; 93 scoped_lock(single_acquisition_lock) s3{m3}; 94 scoped_lock(single_acquisition_lock) s4{m4}; 95 scoped_lock(single_acquisition_lock) s5{m5}; 96 assert(!insideFlag); 97 insideFlag = true; 98 assert(insideFlag); 99 insideFlag = false; 100 } 101 { 102 scoped_lock(single_acquisition_lock) s1{m1}; 103 scoped_lock(single_acquisition_lock) s3{m3}; 104 assert(!insideFlag); 105 insideFlag = true; 106 assert(insideFlag); 107 insideFlag = false; 108 } 109 { 110 scoped_lock(single_acquisition_lock) s1{m1}; 111 scoped_lock(single_acquisition_lock) s2{m2}; 112 scoped_lock(single_acquisition_lock) s4{m4}; 113 assert(!insideFlag); 114 insideFlag = true; 115 assert(insideFlag); 116 insideFlag = false; 117 } 118 { 119 scoped_lock(single_acquisition_lock) s1{m1}; 120 scoped_lock(single_acquisition_lock) s3{m3}; 121 scoped_lock(single_acquisition_lock) s4{m4}; 122 scoped_lock(single_acquisition_lock) s5{m5}; 123 assert(!insideFlag); 124 insideFlag = true; 125 assert(insideFlag); 126 insideFlag = false; 127 } 128 } 129 } 130 131 int num_tasks = 10; 62 132 int main() { 63 133 processor p[10]; … … 67 137 T_Mutex t[10]; 68 138 } 139 assert(count == num_tasks * num_times); 69 140 printf("End Test: single lock mutual exclusion\n"); 70 141 printf("Start Test: multi lock deadlock/mutual exclusion\n"); … … 73 144 } 74 145 printf("End Test: multi lock deadlock/mutual exclusion\n"); 146 147 count = 0; 148 printf("Start Test: single scoped lock mutual exclusion\n"); 149 { 150 T_Mutex_Scoped t[10]; 151 } 152 assert(count == num_tasks * num_times); 153 printf("End Test: single scoped lock mutual exclusion\n"); 154 printf("Start Test: multi scoped lock deadlock/mutual exclusion\n"); 155 { 156 T_Multi_Scoped t[10]; 157 } 158 printf("End Test: multi scoped lock deadlock/mutual exclusion\n"); 75 159 }
Note: See TracChangeset
for help on using the changeset viewer.