Changeset 359f29f
- Timestamp:
- Feb 15, 2018, 4:00:44 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, resolv-new, with_gc
- Children:
- 0b0f1dd, 24c3b67
- Parents:
- 271326e (diff), 75e3cb2 (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:
-
- 33 edited
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/FixMain.cc
r271326e r359f29f 39 39 { 40 40 if(main_signature) { 41 throw SemanticError( "Multiple definition of main routine\n", functionDecl);41 throw SemanticError(functionDecl, "Multiple definition of main routine\n"); 42 42 } 43 43 main_signature.reset( functionDecl->clone() ); -
src/CodeGen/FixNames.cc
r271326e r359f29f 118 118 int nargs = functionDecl->get_functionType()->get_parameters().size(); 119 119 if( !(nargs == 0 || nargs == 2 || nargs == 3) ) { 120 throw SemanticError( "Main expected to have 0, 2 or 3 arguments\n", functionDecl);120 throw SemanticError(functionDecl, "Main expected to have 0, 2 or 3 arguments\n"); 121 121 } 122 122 functionDecl->get_statements()->get_kids().push_back( new ReturnStmt( new ConstantExpr( Constant::from_int( 0 ) ) ) ); -
src/Common/PassVisitor.impl.h
r271326e r359f29f 77 77 maybeAccept_impl( *i, visitor ); 78 78 } catch( SemanticError &e ) { 79 e.set_location( (*i)->location );80 79 errors.append( e ); 81 80 } … … 104 103 maybeMutate_impl( *i, mutator ); 105 104 } catch( SemanticError &e ) { 106 e.set_location( (*i)->location );107 105 errors.append( e ); 108 106 } … … 134 132 } 135 133 } catch( SemanticError &e ) { 136 e.set_location( (*i)->location );137 134 errors.append( e ); 138 135 } … … 163 160 } // if 164 161 } catch( SemanticError &e ) { 165 e.set_location( (*i)->location );166 162 errors.append( e ); 167 163 } // try … … 200 196 201 197 } catch ( SemanticError &e ) { 202 e.set_location( (*i)->location );203 198 errors.append( e ); 204 199 } -
src/Common/SemanticError.cc
r271326e r359f29f 23 23 #include "SemanticError.h" 24 24 25 SemanticError::SemanticError() { 26 } 27 28 SemanticError::SemanticError( std::string error ) { 29 append( error ); 25 SemanticError::SemanticError( CodeLocation location, std::string error ) { 26 append( location, error ); 30 27 } 31 28 … … 34 31 } 35 32 36 void SemanticError::append( const std::string & msg ) {37 errors.emplace_back( error_str() +msg );33 void SemanticError::append( CodeLocation location, const std::string & msg ) { 34 errors.emplace_back( location, msg ); 38 35 } 39 36 … … 42 39 } 43 40 44 void SemanticError::print( std::ostream &os) {41 void SemanticError::print() { 45 42 using std::to_string; 46 43 for( auto err : errors ) { 47 os << err.location<< err.description << std::endl;44 std::cerr << bold() << err.location << error_str() << reset_font() << err.description << std::endl; 48 45 } 49 46 } 50 47 51 void SemanticError::set_location( const CodeLocation& location) {52 errors.begin()->maybeSet( location );48 SemanticWarning::SemanticWarning( CodeLocation location, std::string msg ) { 49 std::cerr << bold() << location << warning_str() << reset_font() << msg << std::endl; 53 50 } 54 51 -
src/Common/SemanticError.h
r271326e r359f29f 24 24 #include "CodeLocation.h" // for CodeLocation, toString 25 25 26 //----------------------------------------------------------------------------- 27 // Errors 26 28 struct error { 29 CodeLocation location; 27 30 std::string description; 28 CodeLocation location;29 31 30 32 error() = default; 31 error( const std::string & str ) : description( str ) {} 32 33 void maybeSet( const CodeLocation & location ) { 34 if( this->location.isUnset() ) { 35 this->location = location; 36 } 37 } 33 error( CodeLocation loc, const std::string & str ) : location( loc ), description( str ) {} 38 34 }; 39 35 40 36 class SemanticError : public std::exception { 41 37 public: 42 SemanticError(); 43 SemanticError( std::string error ); 44 template< typename T > SemanticError( const std::string & error, const T * obj ); 38 SemanticError() = default; 39 SemanticError( CodeLocation location, std::string error ); 45 40 ~SemanticError() throw() {} 41 42 // constructs an exception using the given message and the printed representation of the obj (T must have a print method) 43 template< typename T > SemanticError(const T * obj, const std::string & error); 44 template< typename T > SemanticError( CodeLocation location, const T * obj, const std::string & error); 46 45 47 46 static inline const std::string & error_str() { … … 51 50 52 51 void append( SemanticError & other ); 53 void append( const std::string & );52 void append( CodeLocation location, const std::string & ); 54 53 bool isEmpty() const; 55 void print( std::ostream & os ); 56 57 void set_location( const CodeLocation & location ); 58 // constructs an exception using the given message and the printed representation of the obj (T must have a print 59 // method) 54 void print(); 60 55 private: 61 56 std::list< error > errors; … … 63 58 64 59 template< typename T > 65 SemanticError::SemanticError( const std::string & error, const T * obj ) { 66 append( toString( error, obj ) ); 60 SemanticError::SemanticError( const T * obj, const std::string & error ) 61 : SemanticError( obj->location, toString( error, obj ) ) 62 {} 63 64 template< typename T > 65 SemanticError::SemanticError( CodeLocation location, const T * obj, const std::string & error ) 66 : SemanticError( location, toString( error, obj ) ) 67 {} 68 69 //----------------------------------------------------------------------------- 70 // Warnings 71 class SemanticWarning { 72 public: 73 SemanticWarning( CodeLocation location, std::string error ); 74 ~SemanticWarning() throw() {} 75 76 // constructs an exception using the given message and the printed representation of the obj (T must have a print method) 77 template< typename T > SemanticWarning(const T * obj, const std::string & error); 78 template< typename T > SemanticWarning( CodeLocation location, const T * obj, const std::string & error); 79 80 static inline const std::string & warning_str() { 81 static std::string str = isatty( STDERR_FILENO ) ? "\e[95mwarning:\e[39m " : "warning: "; 82 return str; 83 } 84 85 private: 86 }; 87 88 template< typename T > 89 SemanticWarning::SemanticWarning( const T * obj, const std::string & error ) 90 : SemanticWarning( obj->location, toString( error, obj ) ) 91 {} 92 93 template< typename T > 94 SemanticWarning::SemanticWarning( CodeLocation location, const T * obj, const std::string & error ) 95 : SemanticWarning( location, toString( error, obj ) ) 96 {} 97 98 //----------------------------------------------------------------------------- 99 // Helpers 100 static inline const std::string & bold_ttycode() { 101 static std::string str = isatty( STDERR_FILENO ) ? "\e[1m" : ""; 102 return str; 103 } 104 105 static inline const std::string & reset_font_ttycode() { 106 static std::string str = isatty( STDERR_FILENO ) ? "\e[0m" : ""; 107 return str; 108 } 109 110 static inline std::string make_bold( const std::string & str ) { 111 return bold_ttycode() + str + reset_font_ttycode(); 112 } 113 114 struct bold {}; 115 static inline std::ostream & operator<<(std::ostream & os, bold) { 116 os << bold_ttycode(); 117 return os; 118 } 119 120 struct reset_font {}; 121 static inline std::ostream & operator<<(std::ostream & os, reset_font) { 122 os << reset_font_ttycode(); 123 return os; 67 124 } 68 125 -
src/Concurrency/Keywords.cc
r271326e r359f29f 276 276 handle( decl ); 277 277 } 278 279 278 } 280 279 … … 282 281 if( ! decl->body ) return; 283 282 284 if( !type_decl ) throw SemanticError( context_error, decl);283 if( !type_decl ) throw SemanticError( decl, context_error ); 285 284 286 285 FunctionDecl * func = forwardDeclare( decl ); … … 419 418 if( mutexArgs.empty() ) return; 420 419 421 if( CodeGen::isConstructor(decl->name) ) throw SemanticError( "constructors cannot have mutex parameters", decl);420 if( CodeGen::isConstructor(decl->name) ) throw SemanticError( decl, "constructors cannot have mutex parameters" ); 422 421 423 422 bool isDtor = CodeGen::isDestructor( decl->name ); 424 423 425 if( isDtor && mutexArgs.size() != 1 ) throw SemanticError( "destructors can only have 1 mutex argument", decl);424 if( isDtor && mutexArgs.size() != 1 ) throw SemanticError( decl, "destructors can only have 1 mutex argument" ); 426 425 427 426 for(auto arg : mutexArgs) { … … 432 431 if( ! body ) return; 433 432 434 if( !monitor_decl ) throw SemanticError( "mutex keyword requires monitors to be in scope, add #include <monitor>", decl);435 if( !guard_decl ) throw SemanticError( "mutex keyword requires monitors to be in scope, add #include <monitor>", decl);436 if( !dtor_guard_decl ) throw SemanticError( "mutex keyword requires monitors to be in scope, add #include <monitor>", decl);433 if( !monitor_decl ) throw SemanticError( decl, "mutex keyword requires monitors to be in scope, add #include <monitor>" ); 434 if( !guard_decl ) throw SemanticError( decl, "mutex keyword requires monitors to be in scope, add #include <monitor>" ); 435 if( !dtor_guard_decl ) throw SemanticError( decl, "mutex keyword requires monitors to be in scope, add #include <monitor>" ); 437 436 438 437 if( isDtor ) { … … 480 479 //Makes sure it's not a copy 481 480 ReferenceType* rty = dynamic_cast< ReferenceType * >( ty ); 482 if( ! rty ) throw SemanticError( "Mutex argument must be of reference type ", arg);481 if( ! rty ) throw SemanticError( arg, "Mutex argument must be of reference type " ); 483 482 484 483 //Make sure the we are pointing directly to a type 485 484 Type* base = rty->get_base(); 486 if( dynamic_cast< ReferenceType * >( base ) ) throw SemanticError( "Mutex argument have exactly one level of indirection ", arg);487 if( dynamic_cast< PointerType * >( base ) ) throw SemanticError( "Mutex argument have exactly one level of indirection ", arg);485 if( dynamic_cast< ReferenceType * >( base ) ) throw SemanticError( arg, "Mutex argument have exactly one level of indirection " ); 486 if( dynamic_cast< PointerType * >( base ) ) throw SemanticError( arg, "Mutex argument have exactly one level of indirection " ); 488 487 489 488 //Make sure that typed isn't mutex 490 if( base->get_mutex() ) throw SemanticError( "mutex keyword may only appear once per argument ", arg);489 if( base->get_mutex() ) throw SemanticError( arg, "mutex keyword may only appear once per argument " ); 491 490 } 492 491 … … 626 625 if( type && type->get_baseStruct()->is_thread() ) { 627 626 if( !thread_decl || !thread_ctor_seen ) { 628 throw SemanticError( "thread keyword requires threads to be in scope, add #include <thread>");627 throw SemanticError( type->get_baseStruct()->location, "thread keyword requires threads to be in scope, add #include <thread>"); 629 628 } 630 629 -
src/Concurrency/Waitfor.cc
r271326e r359f29f 249 249 250 250 Statement * GenerateWaitForPass::postmutate( WaitForStmt * waitfor ) { 251 if( !decl_monitor || !decl_acceptable || !decl_mask ) throw SemanticError( "waitfor keyword requires monitors to be in scope, add #include <monitor>", waitfor ); 251 if( !decl_monitor || !decl_acceptable || !decl_mask ) 252 throw SemanticError( waitfor, "waitfor keyword requires monitors to be in scope, add #include <monitor>" ); 252 253 253 254 CompoundStmt * stmt = new CompoundStmt(); -
src/ControlStruct/ExceptTranslate.cc
r271326e r359f29f 572 572 // Pass. 573 573 } else if ( CatchStmt::Terminate == catchStmt->get_kind() ) { 574 throw SemanticError( "catch must have exception type");574 throw SemanticError(catchStmt->location, "catch must have exception type"); 575 575 } else { 576 throw SemanticError( "catchResume must have exception type");576 throw SemanticError(catchStmt->location, "catchResume must have exception type"); 577 577 } 578 578 -
src/ControlStruct/LabelFixer.cc
r271326e r359f29f 92 92 } else if ( labelTable[ l ]->defined() ) { 93 93 // defined twice, error 94 throw SemanticError( "Duplicate definition of label: " + l.get_name() );94 throw SemanticError( l.get_statement()->location, "Duplicate definition of label: " + l.get_name() ); 95 95 } else { 96 96 // used previously, but undefined until now -> link with this entry … … 121 121 for ( std::map< Label, Entry * >::iterator i = labelTable.begin(); i != labelTable.end(); ++i ) { 122 122 if ( ! i->second->defined() ) { 123 throw SemanticError( "Use of undefined label: " + i->first.get_name() );123 throw SemanticError( i->first.get_statement()->location, "Use of undefined label: " + i->first.get_name() ); 124 124 } 125 125 (*ret)[ i->first ] = i->second->get_definition(); -
src/ControlStruct/MLEMutator.cc
r271326e r359f29f 115 115 } else { 116 116 // break target is outmost control structure 117 if ( enclosingControlStructures.empty() ) throw SemanticError( "'break' outside a loop, switch, or labelled block" );117 if ( enclosingControlStructures.empty() ) throw SemanticError( branchStmt->location, "'break' outside a loop, switch, or labelled block" ); 118 118 targetEntry = enclosingControlStructures.rbegin(); 119 119 } // if … … 124 124 // ensure that selected target is valid 125 125 if ( targetEntry == enclosingControlStructures.rend() || (isContinue && ! isLoop( targetEntry->get_controlStructure() ) ) ) { 126 throw SemanticError( toString( (isContinue ? "'continue'" : "'break'"), " target must be an enclosing ", (isContinue ? "loop: " : "control structure: "), originalTarget ) );126 throw SemanticError( branchStmt->location, toString( (isContinue ? "'continue'" : "'break'"), " target must be an enclosing ", (isContinue ? "loop: " : "control structure: "), originalTarget ) ); 127 127 } // if 128 128 break; -
src/GenPoly/Box.cc
r271326e r359f29f 229 229 } // if 230 230 } catch( SemanticError &e ) { 231 e.set_location( (*i)->location );232 231 errors.append( e ); 233 232 } // try … … 576 575 } 577 576 } else { 578 throw SemanticError( "Cannot pass non-struct type for generic struct: ", argBaseType);577 throw SemanticError( argBaseType, "Cannot pass non-struct type for generic struct: " ); 579 578 } 580 579 } … … 598 597 } else { 599 598 // xxx - should this be an assertion? 600 throw SemanticError( toString( *env, "\nunbound type variable: ", tyParm->first, " in application " ), appExpr);599 throw SemanticError( appExpr, toString( *env, "\nunbound type variable: ", tyParm->first, " in application " ) ); 601 600 } // if 602 601 } // if -
src/InitTweak/FixInit.cc
r271326e r359f29f 282 282 translationUnit.splice( i, fixer.pass.staticDtorDecls ); 283 283 } catch( SemanticError &e ) { 284 e.set_location( (*i)->location );285 284 errors.append( e ); 286 285 } // try … … 895 894 ) 896 895 if ( ! diff.empty() ) { 897 throw SemanticError( st d::string("jump to label '") + stmt->get_target().get_name() + "' crosses initialization of " + (*diff.begin())->get_name() + " ", stmt);896 throw SemanticError( stmt, std::string("jump to label '") + stmt->get_target().get_name() + "' crosses initialization of " + (*diff.begin())->get_name() + " " ); 898 897 } // if 899 898 // S_G-S_L results in set of objects that must be destructed … … 1111 1110 template< typename Visitor, typename... Params > 1112 1111 void error( Visitor & v, CodeLocation loc, const Params &... params ) { 1113 SemanticError err( toString( params... ) ); 1114 err.set_location( loc ); 1112 SemanticError err( loc, toString( params... ) ); 1115 1113 v.errors.append( err ); 1116 1114 } -
src/InitTweak/GenInit.cc
r271326e r359f29f 317 317 if ( tryConstruct( objDecl ) && ( managedTypes.isManaged( objDecl ) || ((! inFunction || objDecl->get_storageClasses().is_static ) && ! isConstExpr( objDecl->get_init() ) ) ) ) { 318 318 // constructed objects cannot be designated 319 if ( isDesignated( objDecl->get_init() ) ) throw SemanticError( "Cannot include designations in the initializer for a managed Object. If this is really what you want, then initialize with @=.\n", objDecl);319 if ( isDesignated( objDecl->get_init() ) ) throw SemanticError( objDecl, "Cannot include designations in the initializer for a managed Object. If this is really what you want, then initialize with @=.\n" ); 320 320 // constructed objects should not have initializers nested too deeply 321 if ( ! checkInitDepth( objDecl ) ) throw SemanticError( "Managed object's initializer is too deep ", objDecl);321 if ( ! checkInitDepth( objDecl ) ) throw SemanticError( objDecl, "Managed object's initializer is too deep " ); 322 322 323 323 objDecl->set_init( genCtorInit( objDecl ) ); -
src/InitTweak/InitTweak.cc
r271326e r359f29f 225 225 // xxx - this shouldn't be an error, but need a way to 226 226 // terminate without creating output, so should catch this error 227 throw SemanticError( "unbalanced list initializers" );227 throw SemanticError( init->location, "unbalanced list initializers" ); 228 228 } 229 229 -
src/Parser/DeclarationNode.cc
r271326e r359f29f 581 581 dst->basictype = src->basictype; 582 582 } else if ( src->basictype != DeclarationNode::NoBasicType ) 583 throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::basicTypeNames[ src->basictype ] + " in type: ", src);583 throw SemanticError( yylloc, src, string( "conflicting type specifier " ) + DeclarationNode::basicTypeNames[ src->basictype ] + " in type: " ); 584 584 585 585 if ( dst->complextype == DeclarationNode::NoComplexType ) { 586 586 dst->complextype = src->complextype; 587 587 } else if ( src->complextype != DeclarationNode::NoComplexType ) 588 throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::complexTypeNames[ src->complextype ] + " in type: ", src);588 throw SemanticError( yylloc, src, string( "conflicting type specifier " ) + DeclarationNode::complexTypeNames[ src->complextype ] + " in type: " ); 589 589 590 590 if ( dst->signedness == DeclarationNode::NoSignedness ) { 591 591 dst->signedness = src->signedness; 592 592 } else if ( src->signedness != DeclarationNode::NoSignedness ) 593 throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::signednessNames[ src->signedness ] + " in type: ", src);593 throw SemanticError( yylloc, src, string( "conflicting type specifier " ) + DeclarationNode::signednessNames[ src->signedness ] + " in type: " ); 594 594 595 595 if ( dst->length == DeclarationNode::NoLength ) { … … 598 598 dst->length = DeclarationNode::LongLong; 599 599 } else if ( src->length != DeclarationNode::NoLength ) 600 throw SemanticError( string( "conflicting type specifier " ) + DeclarationNode::lengthNames[ src->length ] + " in type: ", src);600 throw SemanticError( yylloc, src, string( "conflicting type specifier " ) + DeclarationNode::lengthNames[ src->length ] + " in type: " ); 601 601 } // if 602 602 break; … … 966 966 } // if 967 967 } catch( SemanticError &e ) { 968 e.set_location( cur->location );969 968 errors.append( e ); 970 969 } // try … … 1001 1000 } // if 1002 1001 } catch( SemanticError &e ) { 1003 e.set_location( cur->location );1004 1002 errors.append( e ); 1005 1003 } // try … … 1020 1018 * out++ = cur->buildType(); 1021 1019 } catch( SemanticError &e ) { 1022 e.set_location( cur->location );1023 1020 errors.append( e ); 1024 1021 } // try … … 1032 1029 1033 1030 Declaration * DeclarationNode::build() const { 1034 if ( ! error.empty() ) throw SemanticError( error + " in declaration of ", this);1031 if ( ! error.empty() ) throw SemanticError( this, error + " in declaration of " ); 1035 1032 1036 1033 if ( asmStmt ) { … … 1055 1052 // inline _Noreturn int i; // disallowed 1056 1053 if ( type->kind != TypeData::Function && funcSpecs.any() ) { 1057 throw SemanticError( "invalid function specifier for ", this);1054 throw SemanticError( this, "invalid function specifier for " ); 1058 1055 } // if 1059 1056 return buildDecl( type, name ? *name : string( "" ), storageClasses, maybeBuild< Expression >( bitfieldWidth ), funcSpecs, linkage, asmName, maybeBuild< Initializer >(initializer), attributes )->set_extension( extension ); … … 1065 1062 // inlne _Noreturn enum E { ... }; // disallowed 1066 1063 if ( funcSpecs.any() ) { 1067 throw SemanticError( "invalid function specifier for ", this);1064 throw SemanticError( this, "invalid function specifier for " ); 1068 1065 } // if 1069 1066 assertf( name, "ObjectDecl must a have name\n" ); -
src/Parser/ExpressionNode.cc
r271326e r359f29f 356 356 357 357 Expression * build_field_name_FLOATING_FRACTIONconstant( const string & str ) { 358 if ( str.find_first_not_of( "0123456789", 1 ) != string::npos ) throw SemanticError( "invalid tuple index " + str );358 if ( str.find_first_not_of( "0123456789", 1 ) != string::npos ) throw SemanticError( yylloc, "invalid tuple index " + str ); 359 359 Expression * ret = build_constantInteger( *new string( str.substr(1) ) ); 360 360 delete &str; … … 363 363 364 364 Expression * build_field_name_FLOATING_DECIMALconstant( const string & str ) { 365 if ( str[str.size()-1] != '.' ) throw SemanticError( "invalid tuple index " + str );365 if ( str[str.size()-1] != '.' ) throw SemanticError( yylloc, "invalid tuple index " + str ); 366 366 Expression * ret = build_constantInteger( *new string( str.substr( 0, str.size()-1 ) ) ); 367 367 delete &str; -
src/Parser/LinkageSpec.cc
r271326e r359f29f 24 24 namespace LinkageSpec { 25 25 26 Spec linkageCheck( const string * spec ) {26 Spec linkageCheck( CodeLocation location, const string * spec ) { 27 27 assert( spec ); 28 28 unique_ptr<const string> guard( spec ); // allocated by lexer … … 34 34 return BuiltinC; 35 35 } else { 36 throw SemanticError( "Invalid linkage specifier " + *spec );36 throw SemanticError( location, "Invalid linkage specifier " + *spec ); 37 37 } // if 38 38 } 39 39 40 Spec linkageUpdate( Spec old_spec, const string * cmd ) {40 Spec linkageUpdate( CodeLocation location, Spec old_spec, const string * cmd ) { 41 41 assert( cmd ); 42 42 unique_ptr<const string> guard( cmd ); // allocated by lexer … … 48 48 return old_spec; 49 49 } else { 50 throw SemanticError( "Invalid linkage specifier " + *cmd );50 throw SemanticError( location, "Invalid linkage specifier " + *cmd ); 51 51 } // if 52 52 } -
src/Parser/LinkageSpec.h
r271326e r359f29f 17 17 18 18 #include <string> 19 20 #include "Common/CodeLocation.h" 19 21 20 22 namespace LinkageSpec { … … 45 47 46 48 47 Spec linkageCheck( const std::string * );49 Spec linkageCheck( CodeLocation location, const std::string * ); 48 50 // Returns the Spec with the given name (limited to C, Cforall & BuiltinC) 49 Spec linkageUpdate( Spec old_spec, const std::string * cmd );51 Spec linkageUpdate( CodeLocation location, Spec old_spec, const std::string * cmd ); 50 52 /* If cmd = "C" returns a Spec that is old_spec with is_mangled = false 51 53 * If cmd = "Cforall" returns old_spec Spec with is_mangled = true -
src/Parser/ParseNode.h
r271326e r359f29f 434 434 } // if 435 435 } catch( SemanticError &e ) { 436 e.set_location( cur->location );437 436 errors.append( e ); 438 437 } // try -
src/Parser/TypeData.cc
r271326e r359f29f 521 521 522 522 static string genTSError( string msg, DeclarationNode::BasicType basictype ) { 523 throw SemanticError( string( "invalid type specifier \"" ) + msg + "\" for type \"" + DeclarationNode::basicTypeNames[basictype] + "\"." );523 throw SemanticError( yylloc, string( "invalid type specifier \"" ) + msg + "\" for type \"" + DeclarationNode::basicTypeNames[basictype] + "\"." ); 524 524 } // genTSError 525 525 … … 923 923 // type set => parameter name already transformed by a declaration names so there is a duplicate 924 924 // declaration name attempting a second transformation 925 if ( param->type ) throw SemanticError( string( "duplicate declaration name " ) + *param->name );925 if ( param->type ) throw SemanticError( param->location, string( "duplicate declaration name " ) + *param->name ); 926 926 // declaration type reset => declaration already transformed by a parameter name so there is a duplicate 927 927 // parameter name attempting a second transformation 928 if ( ! decl->type ) throw SemanticError( string( "duplicate parameter name " ) + *param->name );928 if ( ! decl->type ) throw SemanticError( param->location, string( "duplicate parameter name " ) + *param->name ); 929 929 param->type = decl->type; // set copy declaration type to parameter type 930 930 decl->type = nullptr; // reset declaration type … … 933 933 } // for 934 934 // declaration type still set => type not moved to a matching parameter so there is a missing parameter name 935 if ( decl->type ) throw SemanticError( string( "missing name in parameter list " ) + *decl->name );935 if ( decl->type ) throw SemanticError( decl->location, string( "missing name in parameter list " ) + *decl->name ); 936 936 } // for 937 937 -
src/Parser/parser.yy
r271326e r359f29f 482 482 { $$ = new ExpressionNode( new StmtExpr( dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >($2) ) ) ); } 483 483 | type_name '.' no_attr_identifier // CFA, nested type 484 { throw SemanticError( "Qualified names are currently unimplemented."); $$ = nullptr; } // FIX ME484 { throw SemanticError(yylloc, "Qualified names are currently unimplemented."); $$ = nullptr; } // FIX ME 485 485 | type_name '.' '[' push field_list pop ']' // CFA, nested type / tuple field selector 486 { throw SemanticError( "Qualified names are currently unimplemented."); $$ = nullptr; } // FIX ME486 { throw SemanticError(yylloc, "Qualified names are currently unimplemented."); $$ = nullptr; } // FIX ME 487 487 ; 488 488 … … 1072 1072 mutex_statement: 1073 1073 MUTEX '(' argument_expression_list ')' statement 1074 { throw SemanticError( "Mutex statement is currently unimplemented."); $$ = nullptr; } // FIX ME1074 { throw SemanticError(yylloc, "Mutex statement is currently unimplemented."); $$ = nullptr; } // FIX ME 1075 1075 ; 1076 1076 … … 1293 1293 static_assert: 1294 1294 STATICASSERT '(' constant_expression ',' string_literal ')' ';' // C11 1295 { throw SemanticError( "Static assert is currently unimplemented."); $$ = nullptr; } // FIX ME1295 { throw SemanticError(yylloc, "Static assert is currently unimplemented."); $$ = nullptr; } // FIX ME 1296 1296 1297 1297 // C declaration syntax is notoriously confusing and error prone. Cforall provides its own type, variable and function … … 2381 2381 { 2382 2382 linkageStack.push( linkage ); // handle nested extern "C"/"Cforall" 2383 linkage = LinkageSpec::linkageUpdate( linkage, $2 );2383 linkage = LinkageSpec::linkageUpdate( yylloc, linkage, $2 ); 2384 2384 } 2385 2385 '{' external_definition_list_opt '}' -
src/ResolvExpr/AlternativeFinder.cc
r271326e r359f29f 252 252 std::cerr << "No reasonable alternatives for expression " << expr << std::endl; 253 253 ) 254 throw SemanticError( "No reasonable alternatives for expression ", expr);254 throw SemanticError( expr, "No reasonable alternatives for expression " ); 255 255 } 256 256 if ( prune ) { … … 270 270 stream << "Alternatives are:\n"; 271 271 printAlts( winners, stream, 1 ); 272 throw SemanticError( stream.str() );272 throw SemanticError( expr->location, stream.str() ); 273 273 } 274 274 alternatives = move(pruned); … … 507 507 return; 508 508 } else if ( level >= recursionLimit ) { 509 throw SemanticError( "Too many recursive assertions" );509 throw SemanticError( newAlt.expr->location, "Too many recursive assertions" ); 510 510 } else { 511 511 AssertionSet newerNeed; … … 1421 1421 findMinCost( finder.alternatives.begin(), finder.alternatives.end(), back_inserter( winners ) ); 1422 1422 if ( winners.size() != 1 ) { 1423 throw SemanticError( "Ambiguous expression in sizeof operand: ", sizeofExpr->get_expr());1423 throw SemanticError( sizeofExpr->get_expr(), "Ambiguous expression in sizeof operand: " ); 1424 1424 } // if 1425 1425 // return the lowest cost alternative for the argument … … 1442 1442 findMinCost( finder.alternatives.begin(), finder.alternatives.end(), back_inserter( winners ) ); 1443 1443 if ( winners.size() != 1 ) { 1444 throw SemanticError( "Ambiguous expression in alignof operand: ", alignofExpr->get_expr());1444 throw SemanticError( alignofExpr->get_expr(), "Ambiguous expression in alignof operand: " ); 1445 1445 } // if 1446 1446 // return the lowest cost alternative for the argument -
src/ResolvExpr/CurrentObject.cc
r271326e r359f29f 141 141 base = at->get_base(); 142 142 memberIter = createMemberIterator( base ); 143 if ( at->isVarLen ) throw SemanticError( "VLA initialization does not support @=", at);143 if ( at->isVarLen ) throw SemanticError( at, "VLA initialization does not support @=" ); 144 144 setSize( at->get_dimension() ); 145 145 } … … 156 156 PRINT( std::cerr << "array type with size: " << size << std::endl; ) 157 157 } catch ( SemanticError & ) { 158 throw SemanticError( "Constant expression of non-integral type in array dimension: ", expr);158 throw SemanticError( expr, "Constant expression of non-integral type in array dimension: " ); 159 159 } 160 160 } else if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( expr ) ) { … … 179 179 index = constExpr->intValue(); 180 180 } catch( SemanticError & ) { 181 throw SemanticError( "Constant expression of non-integral type in array designator: ", expr);181 throw SemanticError( expr, "Constant expression of non-integral type in array designator: " ); 182 182 } 183 183 } else if ( CastExpr * castExpr = dynamic_cast< CastExpr * >( expr ) ) { … … 532 532 } // for 533 533 if ( desigAlts.size() > 1 ) { 534 throw SemanticError( toString("Too many alternatives (", desigAlts.size(), ") for designation: "), designation);534 throw SemanticError( designation, toString("Too many alternatives (", desigAlts.size(), ") for designation: ") ); 535 535 } else if ( desigAlts.size() == 0 ) { 536 throw SemanticError( "No reasonable alternatives for designation: ", designation);536 throw SemanticError( designation, "No reasonable alternatives for designation: " ); 537 537 } 538 538 DesignatorChain & d = desigAlts.back(); -
src/ResolvExpr/Resolver.cc
r271326e r359f29f 188 188 findMinCost( candidates.begin(), candidates.end(), back_inserter( winners ) ); 189 189 if ( winners.size() == 0 ) { 190 throw SemanticError( "No reasonable alternatives for " + kindStr + " expression: ", untyped);190 throw SemanticError( untyped, "No reasonable alternatives for " + kindStr + " expression: " ); 191 191 } else if ( winners.size() != 1 ) { 192 192 std::ostringstream stream; … … 195 195 stream << "Alternatives are:\n"; 196 196 printAlts( winners, stream, 1 ); 197 throw SemanticError( stream.str() );197 throw SemanticError( untyped->location, stream.str() ); 198 198 } 199 199 … … 429 429 ss << strict_dynamic_cast<NameExpr*>( clause.target.function )->name; 430 430 ss << "' in call to waitfor"; 431 throw SemanticError( s s.str() );431 throw SemanticError( stmt->location, ss.str() ); 432 432 } 433 433 … … 451 451 PointerType * pointer = dynamic_cast< PointerType* >( func.expr->get_result()->stripReferences() ); 452 452 if( !pointer ) { 453 throw SemanticError( "candidate not viable: not a pointer type\n", func.expr->get_result());453 throw SemanticError( func.expr->get_result(), "candidate not viable: not a pointer type\n" ); 454 454 } 455 455 456 456 FunctionType * function = dynamic_cast< FunctionType* >( pointer->get_base() ); 457 457 if( !function ) { 458 throw SemanticError( "candidate not viable: not a function type\n", pointer->get_base());458 throw SemanticError( pointer->get_base(), "candidate not viable: not a function type\n" ); 459 459 } 460 460 … … 465 465 466 466 if( !advance_to_mutex( param, param_end ) ) { 467 throw SemanticError( "candidate function not viable: no mutex parameters\n", function);467 throw SemanticError(function, "candidate function not viable: no mutex parameters\n"); 468 468 } 469 469 } … … 504 504 // We ran out of parameters but still have arguments 505 505 // this function doesn't match 506 throw SemanticError( "candidate function not viable: too many mutex arguments\n", function);506 throw SemanticError( function, "candidate function not viable: too many mutex arguments\n" ); 507 507 } 508 508 … … 516 516 (*param)->get_type()->print( ss ); 517 517 ss << "'\n"; 518 throw SemanticError( ss.str(), function);518 throw SemanticError( function, ss.str() ); 519 519 } 520 520 … … 528 528 // We ran out of arguments but still have parameters left 529 529 // this function doesn't match 530 throw SemanticError( "candidate function not viable: too few mutex arguments\n", function);530 throw SemanticError( function, "candidate function not viable: too few mutex arguments\n" ); 531 531 } 532 532 … … 555 555 556 556 // Make sure we got the right number of arguments 557 if( func_candidates.empty() ) { SemanticError top( "No alternatives for function in call to waitfor" ); top.append( errors ); throw top; }558 if( args_candidates.empty() ) { SemanticError top( "No alternatives for arguments in call to waitfor" ); top.append( errors ); throw top; }559 if( func_candidates.size() > 1 ) { SemanticError top( "Ambiguous function in call to waitfor" ); top.append( errors ); throw top; }560 if( args_candidates.size() > 1 ) { SemanticError top( "Ambiguous arguments in call to waitfor" ); top.append( errors ); throw top; }557 if( func_candidates.empty() ) { SemanticError top( stmt->location, "No alternatives for function in call to waitfor" ); top.append( errors ); throw top; } 558 if( args_candidates.empty() ) { SemanticError top( stmt->location, "No alternatives for arguments in call to waitfor" ); top.append( errors ); throw top; } 559 if( func_candidates.size() > 1 ) { SemanticError top( stmt->location, "Ambiguous function in call to waitfor" ); top.append( errors ); throw top; } 560 if( args_candidates.size() > 1 ) { SemanticError top( stmt->location, "Ambiguous arguments in call to waitfor" ); top.append( errors ); throw top; } 561 561 562 562 -
src/SymTab/Indexer.cc
r271326e r359f29f 388 388 if ( newentry && oldentry ) { 389 389 if ( newentry->get_statements() && oldentry->get_statements() ) { 390 throw SemanticError( "duplicate function definition for ", added);390 throw SemanticError( added, "duplicate function definition for " ); 391 391 } // if 392 392 } else { … … 398 398 ObjectDecl *oldobj = dynamic_cast< ObjectDecl* >( existing ); 399 399 if ( ! newobj->get_storageClasses().is_extern && ! oldobj->get_storageClasses().is_extern ) { 400 throw SemanticError( "duplicate object definition for ", added);400 throw SemanticError( added, "duplicate object definition for " ); 401 401 } // if 402 402 } // if 403 403 } else { 404 throw SemanticError( "duplicate definition for ", added);404 throw SemanticError( added, "duplicate definition for " ); 405 405 } // if 406 406 … … 431 431 // isomorphic to C type-compatibility, which it may not be. 432 432 if ( hasIncompatibleCDecl( name, mangleName, scope ) ) { 433 throw SemanticError( "conflicting overload of C function ", decl);433 throw SemanticError( decl, "conflicting overload of C function " ); 434 434 } 435 435 } else { 436 436 // Check that a Cforall declaration doesn't overload any C declaration 437 437 if ( hasCompatibleCDecl( name, mangleName, scope ) ) { 438 throw SemanticError( "Cforall declaration hides C function ", decl);438 throw SemanticError( decl, "Cforall declaration hides C function " ); 439 439 } 440 440 } … … 455 455 return true; 456 456 } else { 457 throw SemanticError( "redeclaration of ", added);457 throw SemanticError( added, "redeclaration of " ); 458 458 } 459 459 } … … 482 482 return false; 483 483 } else if ( ! added->get_members().empty() ) { 484 throw SemanticError( "redeclaration of ", added);484 throw SemanticError( added, "redeclaration of " ); 485 485 } // if 486 486 return true; -
src/SymTab/Validate.cc
r271326e r359f29f 366 366 dwts.erase( j ); 367 367 if ( i != end ) { 368 throw SemanticError( "invalid type void in function type ", func);368 throw SemanticError( func, "invalid type void in function type " ); 369 369 } // if 370 370 } else { … … 374 374 *i = (*i)->acceptMutator( fixer ); 375 375 if ( fixer.pass.isVoid ) { 376 throw SemanticError( "invalid type void in function type ", func);376 throw SemanticError( func, "invalid type void in function type " ); 377 377 } // if 378 378 } // for … … 411 411 for ( Expression * param : inst->parameters ) { 412 412 if ( ! dynamic_cast< TypeExpr * >( param ) ) { 413 throw SemanticError( "Expression parameters for generic types are currently unsupported: ", inst);413 throw SemanticError( inst, "Expression parameters for generic types are currently unsupported: " ); 414 414 } 415 415 } … … 511 511 TraitDecl *traitDecl = local_indexer->lookupTrait( traitInst->name ); 512 512 if ( ! traitDecl ) { 513 throw SemanticError( "use of undeclared trait " + traitInst->name );513 throw SemanticError( traitInst->location, "use of undeclared trait " + traitInst->name ); 514 514 } // if 515 515 if ( traitDecl->get_parameters().size() != traitInst->get_parameters().size() ) { 516 throw SemanticError( "incorrect number of trait parameters: ", traitInst);516 throw SemanticError( traitInst, "incorrect number of trait parameters: " ); 517 517 } // if 518 518 traitInst->baseTrait = traitDecl; … … 522 522 TypeExpr * expr = dynamic_cast< TypeExpr * >( std::get<1>(p) ); 523 523 if ( ! expr ) { 524 throw SemanticError( "Expression parameters for trait instances are currently unsupported: ", std::get<1>(p));524 throw SemanticError( std::get<1>(p), "Expression parameters for trait instances are currently unsupported: " ); 525 525 } 526 526 if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( expr->get_type() ) ) { … … 629 629 assertion = assertion->acceptMutator( fixer ); 630 630 if ( fixer.pass.isVoid ) { 631 throw SemanticError( "invalid type void in assertion of function ", node);631 throw SemanticError( node, "invalid type void in assertion of function " ); 632 632 } // if 633 633 } // for … … 673 673 // were cast to void. 674 674 if ( ! returnStmt->get_expr() && returnVals.size() != 0 ) { 675 throw SemanticError( "Non-void function returns no values: " , returnStmt);675 throw SemanticError( returnStmt, "Non-void function returns no values: " ); 676 676 } 677 677 } … … 714 714 ReferenceToType *rtt = dynamic_cast<ReferenceToType*>(ret); 715 715 if ( ! rtt ) { 716 throw SemanticError( "Cannot apply type parameters to base type of " + typeInst->name);716 throw SemanticError( typeInst->location, "Cannot apply type parameters to base type of " + typeInst->name ); 717 717 } 718 718 rtt->get_parameters().clear(); … … 752 752 Type * t2 = typedefNames[ tyDecl->get_name() ].first->get_base(); 753 753 if ( ! ResolvExpr::typesCompatible( t1, t2, Indexer() ) ) { 754 throw SemanticError( "Cannot redefine typedef: " + tyDecl->name );754 throw SemanticError( tyDecl->location, "Cannot redefine typedef: " + tyDecl->name ); 755 755 } 756 756 // Cannot redefine VLA typedefs. Note: this is slightly incorrect, because our notion of VLAs … … 759 759 // to fix this corner case likely outweighs the utility of allowing it. 760 760 if ( isVariableLength( t1 ) || isVariableLength( t2 ) ) { 761 throw SemanticError( "Cannot redefine typedef: " + tyDecl->name );761 throw SemanticError( tyDecl->location, "Cannot redefine typedef: " + tyDecl->name ); 762 762 } 763 763 } else { … … 908 908 if ( CodeGen::isCtorDtorAssign( funcDecl->get_name() ) ) { // TODO: also check /=, etc. 909 909 if ( params.size() == 0 ) { 910 throw SemanticError( "Constructors, destructors, and assignment functions require at least one parameter ", funcDecl);910 throw SemanticError( funcDecl, "Constructors, destructors, and assignment functions require at least one parameter " ); 911 911 } 912 912 ReferenceType * refType = dynamic_cast< ReferenceType * >( params.front()->get_type() ); 913 913 if ( ! refType ) { 914 throw SemanticError( "First parameter of a constructor, destructor, or assignment function must be a reference ", funcDecl);914 throw SemanticError( funcDecl, "First parameter of a constructor, destructor, or assignment function must be a reference " ); 915 915 } 916 916 if ( CodeGen::isCtorDtor( funcDecl->get_name() ) && returnVals.size() != 0 ) { 917 throw SemanticError( "Constructors and destructors cannot have explicit return values ", funcDecl);917 throw SemanticError( funcDecl, "Constructors and destructors cannot have explicit return values " ); 918 918 } 919 919 } … … 950 950 951 951 sub.apply( inst ); 952 if ( args.size() < params->size() ) throw SemanticError( "Too few type arguments in generic type ", inst);953 if ( args.size() > params->size() ) throw SemanticError( "Too many type arguments in generic type ", inst);952 if ( args.size() < params->size() ) throw SemanticError( inst, "Too few type arguments in generic type " ); 953 if ( args.size() > params->size() ) throw SemanticError( inst, "Too many type arguments in generic type " ); 954 954 } 955 955 } -
src/SynTree/Expression.cc
r271326e r359f29f 93 93 return 0; 94 94 } 95 throw SemanticError( "Constant expression of non-integral type ", this);95 throw SemanticError( this, "Constant expression of non-integral type " ); 96 96 } 97 97 -
src/SynTree/Mutator.h
r271326e r359f29f 148 148 } // if 149 149 } catch( SemanticError &e ) { 150 e.set_location( (*i)->location );151 150 errors.append( e ); 152 151 } // try -
src/SynTree/Statement.cc
r271326e r359f29f 100 100 //actually this is a syntactic error signaled by the parser 101 101 if ( type == BranchStmt::Goto && target.empty() ) { 102 throw SemanticError( "goto without target");102 throw SemanticError( target.get_statement()->location, "goto without target"); 103 103 } 104 104 } … … 107 107 Statement(), computedTarget( computedTarget ), type( type ) { 108 108 if ( type != BranchStmt::Goto || computedTarget == nullptr ) { 109 throw SemanticError( "Computed target not valid in branch statement");109 throw SemanticError( computedTarget->location, "Computed target not valid in branch statement"); 110 110 } 111 111 } … … 203 203 CaseStmt::CaseStmt( Expression *condition, const std::list<Statement *> &statements, bool deflt ) throw ( SemanticError ) : 204 204 Statement(), condition( condition ), stmts( statements ), _isDefault( deflt ) { 205 if ( isDefault() && condition != 0 ) throw SemanticError( "default case with condition: ", condition);205 if ( isDefault() && condition != 0 ) throw SemanticError( condition, "default case with condition: " ); 206 206 } 207 207 -
src/SynTree/TypeSubstitution.h
r271326e r359f29f 98 98 } // if 99 99 } else { 100 throw SemanticError( toString( "Attempt to provide non-type parameter: ", toString( *actualIt ).c_str(), " for type parameter " ), formal);100 throw SemanticError( formal, toString( "Attempt to provide non-type parameter: ", toString( *actualIt ).c_str(), " for type parameter " ) ); 101 101 } // if 102 102 } else { -
src/SynTree/Visitor.h
r271326e r359f29f 142 142 } 143 143 } catch( SemanticError &e ) { 144 e.set_location( (*i)->location );145 144 errors.append( e ); 146 145 } -
src/main.cc
r271326e r359f29f 361 361 cerr << endl << "---End of AST, begin error message:---\n" << endl; 362 362 } // if 363 e.print( cerr);363 e.print(); 364 364 if ( output != &cout ) { 365 365 delete output; -
src/tests/.expect/alloc.txt
r271326e r359f29f 2 2 CFA malloc 0xdeadbeef 3 3 CFA alloc 0xdeadbeef 4 CFA alloc, fill 010101014 CFA alloc, fill ffffffff 5 5 6 6 C array calloc, fill 0 … … 10 10 CFA array alloc, no fill 11 11 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 12 CFA array alloc, fill 0x 113 0x 1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x101010112 CFA array alloc, fill 0xffffffff 13 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 14 14 15 15 C realloc … … 25 25 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 0xdeadbeef 26 26 CFA resize array alloc, fill 27 0x 1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x101010127 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 28 28 CFA resize array alloc, fill 29 0x 1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x101010129 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 30 30 CFA resize array alloc, fill 31 0x 1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x1010101 0x101010131 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 0xffffffff 32 32 33 33 C memalign 42 42.5 … … 37 37 CFA aligned_alloc 42 42.5 38 38 CFA align_alloc 42 42.5 39 CFA align_alloc fill 0x 1010101 0x1.1010101010101p-100739 CFA align_alloc fill 0xffffffff -nan 40 40 41 41 CFA array align_alloc 42 42 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 43 43 CFA array align_alloc, fill 44 0x 1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007,44 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 45 45 46 CFA memset 0x 1010101 0x1.1010101010101p-100747 CFA memcpy 0x 1010101 0x1.1010101010101p-100746 CFA memset 0xffffffff -nan 47 CFA memcpy 0xffffffff -nan 48 48 49 49 CFA array memset 50 0x 1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007,50 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 51 51 CFA memcpy 52 0x 1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007, 0x1010101 0x1.1010101010101p-1007,52 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 53 53 54 54 CFA new initialize
Note: See TracChangeset
for help on using the changeset viewer.