Changeset a4dd728 for src/InitTweak
- Timestamp:
- Mar 30, 2017, 8:17:30 AM (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:
- 936a287, ee68e11
- Parents:
- 93afb96
- Location:
- src/InitTweak
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/InitTweak/FixInit.cc
r93afb96 ra4dd728 738 738 stmtsToAddAfter.push_back( ifStmt ); 739 739 740 if ( ctorInit->get_dtor() ) { 740 Statement * dtor = ctorInit->get_dtor(); 741 objDecl->set_init( NULL ); 742 ctorInit->set_ctor( NULL ); 743 ctorInit->set_dtor( nullptr ); 744 if ( dtor ) { 741 745 // if the object has a non-trivial destructor, have to 742 746 // hoist it and the object into the global space and 743 747 // call the destructor function with atexit. 744 748 745 Statement * dtorStmt = ctorInit->get_dtor()->clone();749 Statement * dtorStmt = dtor->clone(); 746 750 747 751 // void __objName_dtor_atexitN(...) {...} … … 772 776 objDecl->set_mangleName( SymTab::Mangler::mangle( objDecl ) ); 773 777 774 objDecl->set_init( NULL );775 ctorInit->set_ctor( NULL );776 delete ctorInit;777 778 778 // xxx - temporary hack: need to return a declaration, but want to hoist the current object out of this scope 779 779 // create a new object which is never used 780 780 static UniqueName dummyNamer( "_dummy" ); 781 781 ObjectDecl * dummy = new ObjectDecl( dummyNamer.newName(), Type::StorageClasses( Type::Static ), LinkageSpec::Cforall, 0, new PointerType( Type::Qualifiers(), new VoidType( Type::Qualifiers() ) ), 0, std::list< Attribute * >{ new Attribute("unused") } ); 782 delete ctorInit; 782 783 return dummy; 783 784 } -
src/InitTweak/GenInit.cc
r93afb96 ra4dd728 294 294 handleDWT( objDecl ); 295 295 // hands off if @=, extern, builtin, etc. 296 // if global but initializer is not constexpr, always try to construct, since this is not legal C297 if ( ( tryConstruct( objDecl ) && isManaged( objDecl ) ) || (! inFunction && ! isConstExpr( objDecl->get_init() ) ) ) {296 // even if unmanaged, try to construct global or static if initializer is not constexpr, since this is not legal C 297 if ( tryConstruct( objDecl ) && ( isManaged( objDecl ) || ((! inFunction || objDecl->get_storageClasses().is_static ) && ! isConstExpr( objDecl->get_init() ) ) ) ) { 298 298 // constructed objects cannot be designated 299 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 @=. ", objDecl );299 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 ); 300 300 // constructed objects should not have initializers nested too deeply 301 301 if ( ! checkInitDepth( objDecl ) ) throw SemanticError( "Managed object's initializer is too deep ", objDecl );
Note: See TracChangeset
for help on using the changeset viewer.