- Timestamp:
- May 3, 2018, 4:33:19 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, with_gc
- Children:
- f3152ab
- Parents:
- f465f0e (diff), c9d5c4f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- src
- Files:
-
- 2 added
- 33 edited
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/CodeGenerator.cc
rf465f0e r779a4a3 887 887 if ( asmStmt->get_instruction() ) asmStmt->get_instruction()->accept( *visitor ); 888 888 output << " )" ; 889 } 890 891 void CodeGenerator::postvisit( DirectiveStmt * dirStmt ) { 892 output << dirStmt->directive; 889 893 } 890 894 -
src/CodeGen/CodeGenerator.h
rf465f0e r779a4a3 99 99 void postvisit( ExprStmt * ); 100 100 void postvisit( AsmStmt * ); 101 void postvisit( DirectiveStmt * ); 101 102 void postvisit( AsmDecl * ); // special: statement in declaration context 102 103 void postvisit( IfStmt * ); -
src/Common/PassVisitor.h
rf465f0e r779a4a3 71 71 virtual void visit( ExprStmt * exprStmt ) override final; 72 72 virtual void visit( AsmStmt * asmStmt ) override final; 73 virtual void visit( DirectiveStmt * dirStmt ) override final; 73 74 virtual void visit( IfStmt * ifStmt ) override final; 74 75 virtual void visit( WhileStmt * whileStmt ) override final; … … 168 169 virtual Statement * mutate( ExprStmt * exprStmt ) override final; 169 170 virtual Statement * mutate( AsmStmt * asmStmt ) override final; 171 virtual Statement * mutate( DirectiveStmt * dirStmt ) override final; 170 172 virtual Statement * mutate( IfStmt * ifStmt ) override final; 171 173 virtual Statement * mutate( WhileStmt * whileStmt ) override final; -
src/Common/PassVisitor.impl.h
rf465f0e r779a4a3 777 777 778 778 //-------------------------------------------------------------------------- 779 // AsmStmt 780 template< typename pass_type > 781 void PassVisitor< pass_type >::visit( DirectiveStmt * node ) { 782 VISIT_START( node ) 783 784 VISIT_END( node ); 785 } 786 787 template< typename pass_type > 788 Statement * PassVisitor< pass_type >::mutate( DirectiveStmt * node ) { 789 MUTATE_START( node ); 790 791 MUTATE_END( Statement, node ); 792 } 793 794 //-------------------------------------------------------------------------- 779 795 // IfStmt 780 796 template< typename pass_type > -
src/Common/SemanticError.cc
rf465f0e r779a4a3 7 7 // SemanticError.cc -- 8 8 // 9 // Author : Richard C. Bilson9 // Author : Thierry Delisle 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Aug 29 18:17:35 201713 // Update Count : 312 // Last Modified On : Wed May 2 18:13:37 2018 13 // Update Count : 8 14 14 // 15 15 16 16 #include <cstdarg> 17 17 #include <cstdio> // for fileno, stderr 18 #include <cstring> 18 19 #include <unistd.h> // for isatty 19 20 #include <iostream> // for basic_ostream, operator<<, ostream 20 21 #include <list> // for list, _List_iterator 21 22 #include <string> // for string, operator<<, operator+, to_string 23 #include <vector> 22 24 23 25 #include "Common/utility.h" // for to_string, CodeLocation (ptr only) 24 26 #include "SemanticError.h" 25 27 28 //----------------------------------------------------------------------------- 29 // Severity Handling 30 std::vector<Severity> & get_severities() { 31 static std::vector<Severity> severities; 32 if(severities.empty()) { 33 severities.reserve((size_t)Warning::NUMBER_OF_WARNINGS); 34 for ( const auto w : WarningFormats ) { 35 severities.push_back( w.default_severity ); 36 } // for 37 } 38 return severities; 39 } 40 41 void SemanticWarning_SuppressAll() { 42 for( auto & s : get_severities() ) { 43 s = Severity::Suppress; 44 } 45 } 46 47 void SemanticWarning_EnableAll() { 48 for( auto & s : get_severities() ) { 49 s = Severity::Warn; 50 } 51 } 52 53 void SemanticWarning_WarningAsError() { 54 for( auto & s : get_severities() ) { 55 if(s == Severity::Warn) s = Severity::Error; 56 } 57 } 58 59 void SemanticWarning_Set(const char * const name, Severity s) { 60 size_t idx = 0; 61 for ( const auto & w : WarningFormats ) { 62 if ( std::strcmp( name, w.name ) == 0 ) { 63 get_severities()[idx] = s; 64 break; 65 } 66 idx++; 67 } 68 } 69 70 //----------------------------------------------------------------------------- 71 // Semantic Error 26 72 SemanticErrorException::SemanticErrorException( CodeLocation location, std::string error ) { 27 73 append( location, error ); … … 69 115 70 116 void SemanticWarningImpl( CodeLocation location, Warning warning, const char * const fmt, ... ) { 71 Severity severity = WarningFormats[(int)warning].severity;117 Severity severity = get_severities()[(int)warning]; 72 118 switch(severity) { 73 119 case Severity::Suppress : -
src/Common/SemanticError.h
rf465f0e r779a4a3 7 7 // SemanticError.h -- 8 8 // 9 // Author : Richard C. Bilson9 // Author : Thierry Delisle 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Apr 19 17:52:03201813 // Update Count : 1912 // Last Modified On : Wed May 2 18:13:15 2018 13 // Update Count : 29 14 14 // 15 15 … … 17 17 18 18 #include "ErrorObjects.h" 19 #include <cstring> 19 20 20 21 //----------------------------------------------------------------------------- … … 46 47 const char * const name; 47 48 const char * const message; 48 mutable Severityseverity;49 const Severity default_severity; 49 50 }; 50 51 51 constexpr constWarningData WarningFormats[] = {52 {"self-assign" , "self assignment of expression: %s", Severity::Warn},53 {"reference-conversion" , "rvalue to reference conversion of rvalue: %s", Severity::Warn},52 constexpr WarningData WarningFormats[] = { 53 {"self-assign" , "self assignment of expression: %s" , Severity::Warn}, 54 {"reference-conversion" , "rvalue to reference conversion of rvalue: %s" , Severity::Warn}, 54 55 {"qualifiers-zero_t-one_t", "questionable use of type qualifier %s with %s", Severity::Warn}, 55 56 }; … … 71 72 void SemanticWarningImpl (CodeLocation loc, Warning warn, const char * const fmt, ...) __attribute__((format(printf, 3, 4))); 72 73 74 void SemanticWarning_SuppressAll (); 75 void SemanticWarning_EnableAll (); 76 void SemanticWarning_WarningAsError(); 77 void SemanticWarning_Set (const char * const name, Severity s); 78 79 // SKULLDUGGERY: cfa.cc is built before SemanticError.cc but needs this routine. 80 static inline bool SemanticWarning_Exist(const char * const name) { 81 for ( const auto & w : WarningFormats ) { 82 if ( std::strcmp( name, w.name ) == 0 ) return true; 83 } 84 return false; 85 } 73 86 74 87 //----------------------------------------------------------------------------- -
src/Common/module.mk
rf465f0e r779a4a3 6 6 ## file "LICENCE" distributed with Cforall. 7 7 ## 8 ## module.mk -- 8 ## module.mk -- 9 9 ## 10 10 ## Author : Richard C. Bilson … … 18 18 Common/UniqueName.cc \ 19 19 Common/DebugMalloc.cc \ 20 Common/Assert.cc 20 Common/Assert.cc \ 21 Common/Heap.cc -
src/Common/utility.h
rf465f0e r779a4a3 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Apr 20 22:35:33201813 // Update Count : 3 812 // Last Modified On : Thu May 3 12:18:31 2018 13 // Update Count : 39 14 14 // 15 15 … … 441 441 442 442 template<typename T> 443 inline constexpr T ilog2(const T & t) { 444 if ( std::is_integral<T>::value ) { 443 inline 444 #if __GNUC__ > 4 445 constexpr 446 #endif 447 T ilog2(const T & t) { 448 if(std::is_integral<T>::value) { 445 449 const constexpr int r = sizeof(t) * __CHAR_BIT__ - 1; 446 if ( sizeof(T) == sizeof(unsigned int ) ) return r - __builtin_clz( t ); 447 if ( sizeof(T) == sizeof(unsigned long) ) return r - __builtin_clzl( t ); 448 if ( sizeof(T) == sizeof(unsigned long long) ) return r - __builtin_clzll( t ); 449 } // if 450 if( sizeof(T) == sizeof(unsigned int) ) return r - __builtin_clz ( t ); 451 if( sizeof(T) == sizeof(unsigned long) ) return r - __builtin_clzl ( t ); 452 if( sizeof(T) == sizeof(unsigned long long) ) return r - __builtin_clzll( t ); 453 } 454 assert(false); 450 455 return -1; 451 } // ilo ng2456 } // ilog2 452 457 453 458 -
src/Makefile.in
rf465f0e r779a4a3 164 164 Common/driver_cfa_cpp-DebugMalloc.$(OBJEXT) \ 165 165 Common/driver_cfa_cpp-Assert.$(OBJEXT) \ 166 Common/driver_cfa_cpp-Heap.$(OBJEXT) \ 166 167 ControlStruct/driver_cfa_cpp-LabelGenerator.$(OBJEXT) \ 167 168 ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT) \ … … 486 487 Concurrency/Waitfor.cc Common/SemanticError.cc \ 487 488 Common/UniqueName.cc Common/DebugMalloc.cc Common/Assert.cc \ 488 Co ntrolStruct/LabelGenerator.cc ControlStruct/LabelFixer.cc \489 ControlStruct/ MLEMutator.cc ControlStruct/Mutate.cc \490 ControlStruct/ ForExprMutator.cc \489 Common/Heap.cc ControlStruct/LabelGenerator.cc \ 490 ControlStruct/LabelFixer.cc ControlStruct/MLEMutator.cc \ 491 ControlStruct/Mutate.cc ControlStruct/ForExprMutator.cc \ 491 492 ControlStruct/ExceptTranslate.cc GenPoly/Box.cc \ 492 493 GenPoly/GenPoly.cc GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc \ … … 672 673 Common/$(DEPDIR)/$(am__dirstamp) 673 674 Common/driver_cfa_cpp-Assert.$(OBJEXT): Common/$(am__dirstamp) \ 675 Common/$(DEPDIR)/$(am__dirstamp) 676 Common/driver_cfa_cpp-Heap.$(OBJEXT): Common/$(am__dirstamp) \ 674 677 Common/$(DEPDIR)/$(am__dirstamp) 675 678 ControlStruct/$(am__dirstamp): … … 973 976 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-Assert.Po@am__quote@ 974 977 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-DebugMalloc.Po@am__quote@ 978 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-Heap.Po@am__quote@ 975 979 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-SemanticError.Po@am__quote@ 976 980 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-UniqueName.Po@am__quote@ … … 1308 1312 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Common/driver_cfa_cpp-Assert.obj `if test -f 'Common/Assert.cc'; then $(CYGPATH_W) 'Common/Assert.cc'; else $(CYGPATH_W) '$(srcdir)/Common/Assert.cc'; fi` 1309 1313 1314 Common/driver_cfa_cpp-Heap.o: Common/Heap.cc 1315 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Common/driver_cfa_cpp-Heap.o -MD -MP -MF Common/$(DEPDIR)/driver_cfa_cpp-Heap.Tpo -c -o Common/driver_cfa_cpp-Heap.o `test -f 'Common/Heap.cc' || echo '$(srcdir)/'`Common/Heap.cc 1316 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) Common/$(DEPDIR)/driver_cfa_cpp-Heap.Tpo Common/$(DEPDIR)/driver_cfa_cpp-Heap.Po 1317 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Common/Heap.cc' object='Common/driver_cfa_cpp-Heap.o' libtool=no @AMDEPBACKSLASH@ 1318 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1319 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Common/driver_cfa_cpp-Heap.o `test -f 'Common/Heap.cc' || echo '$(srcdir)/'`Common/Heap.cc 1320 1321 Common/driver_cfa_cpp-Heap.obj: Common/Heap.cc 1322 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Common/driver_cfa_cpp-Heap.obj -MD -MP -MF Common/$(DEPDIR)/driver_cfa_cpp-Heap.Tpo -c -o Common/driver_cfa_cpp-Heap.obj `if test -f 'Common/Heap.cc'; then $(CYGPATH_W) 'Common/Heap.cc'; else $(CYGPATH_W) '$(srcdir)/Common/Heap.cc'; fi` 1323 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) Common/$(DEPDIR)/driver_cfa_cpp-Heap.Tpo Common/$(DEPDIR)/driver_cfa_cpp-Heap.Po 1324 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Common/Heap.cc' object='Common/driver_cfa_cpp-Heap.obj' libtool=no @AMDEPBACKSLASH@ 1325 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1326 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Common/driver_cfa_cpp-Heap.obj `if test -f 'Common/Heap.cc'; then $(CYGPATH_W) 'Common/Heap.cc'; else $(CYGPATH_W) '$(srcdir)/Common/Heap.cc'; fi` 1327 1310 1328 ControlStruct/driver_cfa_cpp-LabelGenerator.o: ControlStruct/LabelGenerator.cc 1311 1329 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-LabelGenerator.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-LabelGenerator.Tpo -c -o ControlStruct/driver_cfa_cpp-LabelGenerator.o `test -f 'ControlStruct/LabelGenerator.cc' || echo '$(srcdir)/'`ControlStruct/LabelGenerator.cc -
src/Parser/ParseNode.h
rf465f0e r779a4a3 10 10 // Created On : Sat May 16 13:28:16 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Apr 29 14:04:05201813 // Update Count : 83 012 // Last Modified On : Mon Apr 30 09:19:17 2018 13 // Update Count : 831 14 14 // 15 15 … … 416 416 Statement * build_finally( StatementNode * stmt ); 417 417 Statement * build_compound( StatementNode * first ); 418 Statement * build_asm stmt( bool voltile, Expression * instruction, ExpressionNode * output = nullptr, ExpressionNode * input = nullptr, ExpressionNode * clobber = nullptr, LabelNode * gotolabels = nullptr );419 Statement * build_dir stmt( std::string * directive );418 Statement * build_asm( bool voltile, Expression * instruction, ExpressionNode * output = nullptr, ExpressionNode * input = nullptr, ExpressionNode * clobber = nullptr, LabelNode * gotolabels = nullptr ); 419 Statement * build_directive( std::string * directive ); 420 420 WaitForStmt * build_waitfor( ExpressionNode * target, StatementNode * stmt, ExpressionNode * when ); 421 421 WaitForStmt * build_waitfor( ExpressionNode * target, StatementNode * stmt, ExpressionNode * when, WaitForStmt * existing ); -
src/Parser/StatementNode.cc
rf465f0e r779a4a3 10 10 // Created On : Sat May 16 14:59:41 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Apr 29 14:21:45201813 // Update Count : 35 312 // Last Modified On : Mon Apr 30 09:21:16 2018 13 // Update Count : 354 14 14 // 15 15 … … 310 310 } 311 311 312 Statement * build_asm stmt( bool voltile, Expression * instruction, ExpressionNode * output, ExpressionNode * input, ExpressionNode * clobber, LabelNode * gotolabels ) {312 Statement * build_asm( bool voltile, Expression * instruction, ExpressionNode * output, ExpressionNode * input, ExpressionNode * clobber, LabelNode * gotolabels ) { 313 313 std::list< Expression * > out, in; 314 314 std::list< ConstantExpr * > clob; … … 320 320 } 321 321 322 Statement * build_dirstmt( string * directive ) { 323 cout << *directive << endl; 324 return nullptr; 322 Statement * build_directive( string * directive ) { 323 return new DirectiveStmt( *directive ); 325 324 } 326 325 -
src/Parser/lex.ll
rf465f0e r779a4a3 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : Sun Apr 29 14:10:49201813 * Update Count : 67 512 * Last Modified On : Thu May 3 13:42:40 2018 13 * Update Count : 676 14 14 */ 15 15 … … 174 174 } 175 175 176 /* ignore preprocessor-style directives (for now)*/176 /* preprocessor-style directives */ 177 177 ^{h_white}*"#"[^\n]*"\n" { RETURN_VAL( DIRECTIVE ); } 178 178 -
src/Parser/parser.yy
rf465f0e r779a4a3 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Apr 29 14:20:17201813 // Update Count : 32 0612 // Last Modified On : Thu May 3 08:20:09 2018 13 // Update Count : 3225 14 14 // 15 15 … … 877 877 | asm_statement 878 878 | DIRECTIVE 879 { $$ = new StatementNode( build_dir stmt( $1 ) ); }879 { $$ = new StatementNode( build_directive( $1 ) ); } 880 880 ; 881 881 … … 1207 1207 asm_statement: 1208 1208 ASM asm_volatile_opt '(' string_literal ')' ';' 1209 { $$ = new StatementNode( build_asm stmt( $2, $4, 0 ) ); }1209 { $$ = new StatementNode( build_asm( $2, $4, 0 ) ); } 1210 1210 | ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ')' ';' // remaining GCC 1211 { $$ = new StatementNode( build_asm stmt( $2, $4, $6 ) ); }1211 { $$ = new StatementNode( build_asm( $2, $4, $6 ) ); } 1212 1212 | ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ':' asm_operands_opt ')' ';' 1213 { $$ = new StatementNode( build_asm stmt( $2, $4, $6, $8 ) ); }1213 { $$ = new StatementNode( build_asm( $2, $4, $6, $8 ) ); } 1214 1214 | ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ':' asm_operands_opt ':' asm_clobbers_list_opt ')' ';' 1215 { $$ = new StatementNode( build_asm stmt( $2, $4, $6, $8, $10 ) ); }1215 { $$ = new StatementNode( build_asm( $2, $4, $6, $8, $10 ) ); } 1216 1216 | ASM asm_volatile_opt GOTO '(' string_literal ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';' 1217 { $$ = new StatementNode( build_asm stmt( $2, $5, 0, $8, $10, $12 ) ); }1217 { $$ = new StatementNode( build_asm( $2, $5, 0, $8, $10, $12 ) ); } 1218 1218 ; 1219 1219 … … 2405 2405 | ASM '(' string_literal ')' ';' // GCC, global assembler statement 2406 2406 { 2407 $$ = DeclarationNode::newAsmStmt( new StatementNode( build_asm stmt( false, $3, 0 ) ) );2407 $$ = DeclarationNode::newAsmStmt( new StatementNode( build_asm( false, $3, 0 ) ) ); 2408 2408 } 2409 2409 | EXTERN STRINGliteral // C++-style linkage specifier … … 2451 2451 | declaration_qualifier_list type_qualifier_list 2452 2452 { 2453 if ( $1->type->forall ) xxx = forall = true; // remember generic type 2453 // forall must be in the type_qualifier_list 2454 if ( $2->type->forall ) xxx = forall = true; // remember generic type 2454 2455 } 2455 2456 push '{' external_definition_list '}' // CFA, namespace -
src/ResolvExpr/AlternativeFinder.cc
rf465f0e r779a4a3 459 459 /// Adds type variables to the open variable set and marks their assertions 460 460 void makeUnifiableVars( Type *type, OpenVarSet &unifiableVars, AssertionSet &needAssertions ) { 461 for ( Type::ForallList::const_iterator tyvar = type-> get_forall().begin(); tyvar != type->get_forall().end(); ++tyvar ) {461 for ( Type::ForallList::const_iterator tyvar = type->forall.begin(); tyvar != type->forall.end(); ++tyvar ) { 462 462 unifiableVars[ (*tyvar)->get_name() ] = TypeDecl::Data{ *tyvar }; 463 for ( std::list< DeclarationWithType* >::iterator assert = (*tyvar)-> get_assertions().begin(); assert != (*tyvar)->get_assertions().end(); ++assert ) {463 for ( std::list< DeclarationWithType* >::iterator assert = (*tyvar)->assertions.begin(); assert != (*tyvar)->assertions.end(); ++assert ) { 464 464 needAssertions[ *assert ].isUsed = true; 465 465 } -
src/ResolvExpr/AlternativeFinder.h
rf465f0e r779a4a3 126 126 void printAlts( const AltList &list, std::ostream &os, unsigned int indentAmt = 0 ); 127 127 128 /// Adds type variables to the open variable set and marks their assertions 129 void makeUnifiableVars( Type *type, OpenVarSet &unifiableVars, AssertionSet &needAssertions ); 130 128 131 template< typename InputIterator > 129 132 void simpleCombineEnvironments( InputIterator begin, InputIterator end, TypeEnvironment &result ) { -
src/ResolvExpr/Resolver.cc
rf465f0e r779a4a3 544 544 OpenVarSet openVars; 545 545 AssertionSet resultNeed, resultHave; 546 TypeEnvironment resultEnv; 546 TypeEnvironment resultEnv( func.env ); 547 makeUnifiableVars( function, openVars, resultNeed ); 548 // add all type variables as open variables now so that those not used in the parameter 549 // list are still considered open. 550 resultEnv.add( function->forall ); 547 551 548 552 // Load type variables from arguemnts into one shared space … … 583 587 ss << "' to '"; 584 588 arg.expr->get_result()->print( ss ); 589 ss << "' with env '"; 590 resultEnv.print(ss); 585 591 ss << "'\n"; 586 592 SemanticError( function, ss.str() ); -
src/SynTree/Mutator.h
rf465f0e r779a4a3 39 39 virtual Statement * mutate( ExprStmt * exprStmt ) = 0; 40 40 virtual Statement * mutate( AsmStmt * asmStmt ) = 0; 41 virtual Statement * mutate( DirectiveStmt * dirStmt ) = 0; 41 42 virtual Statement * mutate( IfStmt * ifStmt ) = 0; 42 43 virtual Statement * mutate( WhileStmt * whileStmt ) = 0; -
src/SynTree/Statement.cc
rf465f0e r779a4a3 94 94 95 95 96 DirectiveStmt::DirectiveStmt( const std::string & directive ) : Statement(), directive( directive ) {} 97 98 void DirectiveStmt::print( std::ostream &os, Indenter ) const { 99 os << "GCC Directive:" << directive << endl; 100 } 101 102 96 103 const char *BranchStmt::brType[] = { "Goto", "Break", "Continue" }; 97 104 -
src/SynTree/Statement.h
rf465f0e r779a4a3 126 126 }; 127 127 128 class DirectiveStmt : public Statement { 129 public: 130 std::string directive; 131 132 DirectiveStmt( const std::string & ); 133 virtual ~DirectiveStmt(){} 134 135 virtual DirectiveStmt * clone() const { return new DirectiveStmt( *this ); } 136 virtual void accept( Visitor & v ) { v.visit( this ); } 137 virtual Statement * acceptMutator( Mutator & m ) { return m.mutate( this ); } 138 virtual void print( std::ostream & os, Indenter indent = {} ) const; 139 }; 140 128 141 class IfStmt : public Statement { 129 142 public: -
src/SynTree/SynTree.h
rf465f0e r779a4a3 44 44 class ExprStmt; 45 45 class AsmStmt; 46 class DirectiveStmt; 46 47 class IfStmt; 47 48 class WhileStmt; -
src/SynTree/Visitor.h
rf465f0e r779a4a3 41 41 virtual void visit( ExprStmt * exprStmt ) = 0; 42 42 virtual void visit( AsmStmt * asmStmt ) = 0; 43 virtual void visit( DirectiveStmt * directiveStmt ) = 0; 43 44 virtual void visit( IfStmt * ifStmt ) = 0; 44 45 virtual void visit( WhileStmt * whileStmt ) = 0; -
src/benchmark/bench.h
rf465f0e r779a4a3 6 6 #include <stdlib.h> 7 7 #include <unistd.h> // sysconf 8 #include <sys/times.h> // times 8 #if ! defined(__cforall) 9 9 #include <time.h> 10 #if defined(__cforall) 10 #include <sys/time.h> 11 #else 11 12 } 12 //#include <bits/cfatime.h>13 #include <time> 13 14 #endif 14 15 15 16 16 static inline unsigned long long int Time() {17 static inline unsigned long long int bench_time() { 17 18 struct timespec ts; 18 19 clock_gettime( … … 41 42 } \ 42 43 long long int StartTime, EndTime; \ 43 StartTime = Time();\44 StartTime = bench_time(); \ 44 45 statement; \ 45 EndTime = Time();\46 EndTime = bench_time(); \ 46 47 unsigned long long int output = \ 47 48 ( EndTime - StartTime ) / n; 48 49 49 __cfa_time_t default_preemption() { 50 #if defined(__cforall) 51 Duration default_preemption() { 50 52 return 0; 51 53 } 54 #endif -
src/benchmark/ctxswitch/cfa_cor.c
rf465f0e r779a4a3 1 1 #include <stdio.h> 2 #include <kernel> 2 3 #include <thread> 3 4 -
src/driver/Makefile.am
rf465f0e r779a4a3 11 11 ## Created On : Sun May 31 08:49:31 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Fri Oct 28 13:46:06 201614 ## Update Count : 1 013 ## Last Modified On : Mon Apr 30 17:44:17 2018 14 ## Update Count : 11 15 15 ############################################################################### 16 16 17 17 # applies to both programs 18 AM_CXXFLAGS = -Wall -O2 -g -std=c++14 18 AM_CXXFLAGS = -Wall -O2 -g -std=c++14 -I${abs_top_srcdir}/src 19 19 if BUILD_NO_LIB 20 20 else -
src/driver/Makefile.in
rf465f0e r779a4a3 294 294 295 295 # applies to both programs 296 AM_CXXFLAGS = -Wall -O2 -g -std=c++14 $(am__append_1) $(am__append_2)\297 $(am__append_ 3)296 AM_CXXFLAGS = -Wall -O2 -g -std=c++14 -I${abs_top_srcdir}/src \ 297 $(am__append_1) $(am__append_2) $(am__append_3) 298 298 cfa_SOURCES = cfa.cc 299 299 -
src/driver/cfa.cc
rf465f0e r779a4a3 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Feb 5 22:05:28201813 // Update Count : 16612 // Last Modified On : Wed May 2 17:57:43 2018 13 // Update Count : 224 14 14 // 15 15 … … 19 19 #include <unistd.h> // execvp 20 20 #include <string> // STL version 21 21 #include <string.h> // strcmp 22 23 #include "Common/SemanticError.h" 22 24 #include "config.h" // configure info 23 25 … … 160 162 args[nargs] = argv[i]; // pass the argument along 161 163 nargs += 1; 164 } else if ( arg == "-w" ) { 165 args[nargs] = argv[i]; // pass the argument along 166 nargs += 1; 167 args[nargs] = ( *new string( string("-D__CFA_FLAG__=") + arg ) ).c_str(); // add the argument for cfa-cpp 168 nargs += 1; 169 } else if ( prefix( arg, "-W" ) ) { // check before next tests 170 if ( arg == "-Werror" || arg == "-Wall" ) { 171 args[nargs] = argv[i]; // pass the argument along 172 nargs += 1; 173 args[nargs] = ( *new string( string("-D__CFA_FLAG__=") + arg ) ).c_str(); // add the argument for cfa-cpp 174 nargs += 1; 175 } else { 176 unsigned int adv = prefix( arg, "-Wno-" ) ? 5 : 2; 177 args[nargs] = argv[i]; // conditionally pass the argument along 178 const char * warning = argv[i] + adv; // extract warning 179 if ( SemanticWarning_Exist( warning ) ) { // replace the argument for cfa-cpp 180 args[nargs] = ( *new string( string("-D__CFA_FLAG__=") + arg ) ).c_str(); 181 } // if 182 nargs += 1; 183 } // if 162 184 } else if ( prefix( arg, "-B" ) ) { 163 185 Bprefix = arg.substr(2); // strip the -B flag … … 247 269 #if ! defined(HAVE_LIBCFA_RELEASE) 248 270 if( !debug ) { 249 cerr << "error: Option -nodebug is notavailable, libcfa was not installed." << endl;271 cerr << "error: Option -nodebug is unavailable, libcfa was not installed." << endl; 250 272 exit( EXIT_FAILURE ); 251 273 } … … 253 275 #if ! defined(HAVE_LIBCFA_DEBUG) 254 276 if( debug ) { 255 cerr << "error: Option -debug is notavailable, libcfa-d was not installed." << endl;277 cerr << "error: Option -debug is unavailable, libcfa-d was not installed." << endl; 256 278 exit( EXIT_FAILURE ); 257 279 } -
src/libcfa/concurrency/preemption.c
rf465f0e r779a4a3 404 404 } 405 405 406 //============================================================================================= 407 // Kernel Signal Debug 408 //============================================================================================= 409 410 void __cfaabi_check_preemption() { 411 bool ready = TL_GET( preemption_state ).enabled; 412 if(!ready) { abort("Preemption should be ready"); } 413 414 sigset_t oldset; 415 int ret; 416 ret = sigprocmask(0, NULL, &oldset); 417 if(ret != 0) { abort("ERROR sigprocmask returned %d", ret); } 418 419 ret = sigismember(&oldset, SIGUSR1); 420 if(ret < 0) { abort("ERROR sigismember returned %d", ret); } 421 422 if(ret == 1) { abort("ERROR SIGUSR1 is disabled"); } 423 } 424 406 425 // Local Variables: // 407 426 // mode: c // -
src/libcfa/concurrency/thread
rf465f0e r779a4a3 20 20 21 21 #include "coroutine" 22 #include "kernel" 22 23 #include "monitor" 23 24 -
src/libcfa/interpose.c
rf465f0e r779a4a3 10 10 // Created On : Wed Mar 29 16:10:31 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T hu Feb 8 16:18:09201813 // Update Count : 7512 // Last Modified On : Tue May 1 15:05:35 2018 13 // Update Count : 83 14 14 // 15 15 … … 95 95 void sigHandler_fpe ( __CFA_SIGPARMS__ ); 96 96 void sigHandler_abort( __CFA_SIGPARMS__ ); 97 void sigHandler_term ( __CFA_SIGPARMS__ ); 97 98 98 99 struct { … … 114 115 __cfaabi_sigaction( SIGFPE , sigHandler_fpe , SA_SIGINFO ); // Failure handler 115 116 __cfaabi_sigaction( SIGABRT, sigHandler_abort, SA_SIGINFO ); // Failure handler 117 __cfaabi_sigaction( SIGTERM, sigHandler_term , SA_SIGINFO ); // Failure handler 118 __cfaabi_sigaction( SIGINT , sigHandler_term , SA_SIGINFO ); // Failure handler 116 119 } 117 120 } … … 268 271 } 269 272 273 void sigHandler_term( __CFA_SIGPARMS__ ) { 274 abort( "Application stopped by %s signal.", sig == SIGINT ? "an interrupt (SIGINT)" : "a terminate (SIGTERM)" ); 275 } 276 270 277 // Local Variables: // 271 278 // mode: c // -
src/main.cc
rf465f0e r779a4a3 1 2 1 // 3 2 // Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo … … 11 10 // Created On : Fri May 15 23:12:02 2015 12 11 // Last Modified By : Peter A. Buhr 13 // Last Modified On : Tue Oct 31 12:22:40 201714 // Update Count : 4 4512 // Last Modified On : Wed May 2 14:59:02 2018 13 // Update Count : 490 15 14 // 16 15 … … 35 34 #include "CodeTools/DeclStats.h" // for printDeclStats 36 35 #include "CodeTools/TrackLoc.h" // for fillLocations 36 #include "Common/CompilerError.h" // for CompilerError 37 #include "Common/Heap.h" 37 38 #include "Common/PassVisitor.h" 38 #include "Common/CompilerError.h" // for CompilerError39 39 #include "Common/SemanticError.h" // for SemanticError 40 40 #include "Common/UnimplementedError.h" // for UnimplementedError … … 175 175 signal( SIGABRT, sigAbortHandler ); 176 176 177 // std::cout << "main" << std::endl; 178 // for ( int i = 0; i < argc; i += 1 ) { 179 // std::cout << '\t' << argv[i] << std::endl; 180 // } // for 181 177 182 parse_cmdline( argc, argv, filename ); // process command-line arguments 178 183 CodeGen::FixMain::setReplaceMain( !nomainp ); … … 354 359 OPTPRINT( "end" ) 355 360 361 356 362 if ( output != &cout ) { 357 363 delete output; … … 384 390 385 391 deleteAll( translationUnit ); 392 HeapStats::printStats(); 386 393 return 0; 387 394 } // main … … 416 423 opterr = 0; // (global) prevent getopt from printing error messages 417 424 425 bool Werror = false; 418 426 int c; 419 while ( (c = getopt_long( argc, argv, "abBcCdefgGlLmnNpqrstTv yzZD:F:", long_opts, &long_index )) != -1 ) {427 while ( (c = getopt_long( argc, argv, "abBcCdefgGlLmnNpqrstTvwW:yzZD:F:", long_opts, &long_index )) != -1 ) { 420 428 switch ( c ) { 421 429 case Ast: … … 453 461 yydebug = true; 454 462 break; 455 case 'G': 463 case 'G': // dump AST after instantiate generics 456 464 genericsp = true; 457 465 break; … … 501 509 case 'v': // dump AST after decl validation pass 502 510 validp = true; 511 break; 512 case 'w': 513 SemanticWarning_SuppressAll(); 514 break; 515 case 'W': 516 if ( strcmp( optarg, "all" ) == 0 ) { 517 SemanticWarning_EnableAll(); 518 } else if ( strcmp( optarg, "error" ) == 0 ) { 519 Werror = true; 520 } else { 521 char * warning = optarg; 522 Severity s; 523 if ( strncmp( optarg, "no-", 3 ) == 0 ) { 524 warning += 3; 525 s = Severity::Suppress; 526 } else { 527 s = Severity::Warn; 528 } // if 529 SemanticWarning_Set( warning, s ); 530 } // if 503 531 break; 504 532 case 'y': // dump AST on error … … 530 558 } // switch 531 559 } // while 560 561 if ( Werror ) { 562 SemanticWarning_WarningAsError(); 563 } // if 564 // for ( const auto w : WarningFormats ) { 565 // cout << w.name << ' ' << (int)w.severity << endl; 566 // } // for 532 567 } // parse_cmdline 533 568 -
src/tests/concurrent/examples/boundedBufferEXT.c
rf465f0e r779a4a3 8 8 // Created On : Wed Apr 18 22:52:12 2018 9 9 // Last Modified By : Peter A. Buhr 10 // Last Modified On : Fri Apr 20 22:25:14201811 // Update Count : 610 // Last Modified On : Wed May 2 16:12:58 2018 11 // Update Count : 7 12 12 // 13 13 … … 22 22 enum { BufferSize = 50 }; 23 23 24 forall( otype T ) 25 monitor Buffer {26 int front, back, count;27 T elements[BufferSize];28 }; 24 forall( otype T ) { 25 monitor Buffer { 26 int front, back, count; 27 T elements[BufferSize]; 28 }; // Buffer 29 29 30 forall( otype T ) 31 void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; } 30 void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; } 32 31 33 forall( otype T ) 34 int query( Buffer(T) & buffer ) { return buffer.count; } 32 int query( Buffer(T) & buffer ) { return buffer.count; } // read-only, no mutual exclusion 35 33 36 forall( otype T ) // forward 37 T remove( Buffer(T) & mutex buffer ); 34 T remove( Buffer(T) & mutex buffer ); // forward 38 35 39 forall( otype T ) 40 void insert( Buffer(T) & mutex buffer, T elem ) with( buffer ) { 41 if ( count == BufferSize ) waitfor( remove, buffer ); 42 elements[back] = elem; 43 back = ( back + 1 ) % BufferSize; 44 count += 1; 45 } 36 void insert( Buffer(T) & mutex buffer, T elem ) with( buffer ) { 37 if ( count == BufferSize ) waitfor( remove, buffer ); 38 elements[back] = elem; 39 back = ( back + 1 ) % BufferSize; 40 count += 1; 41 } // insert 46 42 47 forall( otype T ) 48 T remove( Buffer(T) & mutex buffer ) with( buffer ) { 49 if ( count == 0 ) waitfor( insert, buffer );50 T elem = elements[front];51 front = ( front + 1 ) % BufferSize;52 count -= 1;53 return elem;43 T remove( Buffer(T) & mutex buffer ) with( buffer ) { 44 if ( count == 0 ) waitfor( insert, buffer ); 45 T elem = elements[front]; 46 front = ( front + 1 ) % BufferSize; 47 count -= 1; 48 return elem; 49 } // remove 54 50 } 55 51 -
src/tests/concurrent/examples/boundedBufferINT.c
rf465f0e r779a4a3 8 8 // Created On : Mon Oct 30 12:45:13 2017 9 9 // Last Modified By : Peter A. Buhr 10 // Last Modified On : Fri Apr 20 22:18:18201811 // Update Count : 7810 // Last Modified On : Thu Apr 26 23:08:17 2018 11 // Update Count : 82 12 12 // 13 13 … … 22 22 enum { BufferSize = 50 }; 23 23 24 forall( otype T ) 25 monitor Buffer {26 condition full, empty;27 int front, back, count;28 T elements[BufferSize];29 }; 24 forall( otype T ) { 25 monitor Buffer { 26 condition full, empty; 27 int front, back, count; 28 T elements[BufferSize]; 29 }; // Buffer 30 30 31 forall( otype T ) 32 void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; } 31 void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; } 33 32 34 forall( otype T ) 35 int query( Buffer(T) & buffer ) { return buffer.count; } 33 int query( Buffer(T) & buffer ) { return buffer.count; } // read-only, no mutual exclusion 36 34 37 forall( otype T ) 38 void insert( Buffer(T) & mutex buffer, T elem ) with( buffer ) { 39 if ( count == BufferSize ) wait( empty ); 40 elements[back] = elem; 41 back = ( back + 1 ) % BufferSize; 42 count += 1; 43 signal( full ); 44 } 35 void insert( Buffer(T) & mutex buffer, T elem ) with( buffer ) { 36 if ( count == BufferSize ) wait( empty ); 37 elements[back] = elem; 38 back = ( back + 1 ) % BufferSize; 39 count += 1; 40 signal( full ); 41 } // insert 45 42 46 forall( otype T ) 47 T remove( Buffer(T) & mutex buffer ) with( buffer ) { 48 if ( count == 0 ) wait( full );49 T elem = elements[front];50 front = ( front + 1 ) % BufferSize;51 count -= 1;52 signal( empty );53 return elem;43 T remove( Buffer(T) & mutex buffer ) with( buffer ) { 44 if ( count == 0 ) wait( full ); 45 T elem = elements[front]; 46 front = ( front + 1 ) % BufferSize; 47 count -= 1; 48 signal( empty ); 49 return elem; 50 } // remove 54 51 } 55 52 -
src/tests/concurrent/preempt.c
rf465f0e r779a4a3 17 17 #endif 18 18 19 extern void __cfaabi_check_preemption(); 20 19 21 static volatile int counter = 0; 20 22 … … 29 31 void main(worker_t & this) { 30 32 while(counter < N) { 33 __cfaabi_check_preemption(); 31 34 if( (counter % 7) == this.value ) { 35 __cfaabi_check_preemption(); 32 36 int next = __atomic_add_fetch_4(&counter, 1, __ATOMIC_SEQ_CST); 37 __cfaabi_check_preemption(); 33 38 if( (next % 100) == 0 ) printf("%d\n", (int)next); 39 __cfaabi_check_preemption(); 34 40 } 41 __cfaabi_check_preemption(); 35 42 } 36 43 }
Note:
See TracChangeset
for help on using the changeset viewer.