Forgot to catch Bug exception. GCell manage 5 terminals of a Net.

* Bug: In Hurricane, in HApplication, ExceptionWidget ans PyHurricane.h,
    forgot to catch the Hurricane::Bug exception which was leading to
    terminate() without explanations.
* Change: In Katabatic, In GCellTopology, now support one GCell with
    five metal1 terminal of the same net. This unlikely configuration
    did appear in the SNX for the first time...
This commit is contained in:
Jean-Paul Chaput 2016-03-17 16:54:53 +01:00
parent 13c3efdefd
commit 1ef4bc122f
21 changed files with 87 additions and 48 deletions

View File

@ -29,6 +29,8 @@ namespace CRL {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;

View File

@ -34,6 +34,8 @@ namespace CRL {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Hurricane::DataBase; using Hurricane::DataBase;

View File

@ -29,8 +29,10 @@ namespace CRL {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Hurricane::Exception;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;
using Isobar::ProxyError; using Isobar::ProxyError;
using Isobar::ConstructorError; using Isobar::ConstructorError;

View File

@ -29,6 +29,8 @@ namespace CRL {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;

View File

@ -40,6 +40,8 @@ namespace CRL {
using std::endl; using std::endl;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;

View File

@ -1,15 +1,9 @@
// -*- C++ -*- // -*- C++ -*-
// //
// This file is part of the Coriolis Software. // This file is part of the Coriolis Software.
// Copyright (c) UPMC/LIP6 2010-2010, All Rights Reserved // Copyright (c) UPMC 2010-2016, All Rights Reserved
// //
// =================================================================== // +-----------------------------------------------------------------+
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// | C O R I O L I S | // | C O R I O L I S |
// | Alliance / Hurricane Interface | // | Alliance / Hurricane Interface |
// | | // | |
@ -17,10 +11,7 @@
// | E-mail : Jean-Paul.Chaput@asim.lip6.fr | // | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
// | =============================================================== | // | =============================================================== |
// | C++ Module : "./PyCatalogState.cpp" | // | C++ Module : "./PyCatalogState.cpp" |
// | *************************************************************** | // +-----------------------------------------------------------------+
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
#include "hurricane/isobar/PyCell.h" #include "hurricane/isobar/PyCell.h"
@ -37,6 +28,8 @@ namespace CRL {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;

View File

@ -28,6 +28,8 @@ namespace CRL {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;

View File

@ -28,6 +28,8 @@ namespace CRL {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;

View File

@ -30,6 +30,8 @@ namespace CRL {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;

View File

@ -31,6 +31,8 @@ namespace CRL {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;

View File

@ -29,6 +29,8 @@ namespace CRL {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;

View File

@ -36,6 +36,8 @@ namespace CRL {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Isobar::ProxyProperty; using Isobar::ProxyProperty;

View File

@ -36,6 +36,8 @@ namespace Etesian {
using Hurricane::tab; using Hurricane::tab;
using Hurricane::trace_on; using Hurricane::trace_on;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Hurricane::ExceptionWidget; using Hurricane::ExceptionWidget;

View File

@ -19,12 +19,7 @@
// License along with Hurricane. If not, see // License along with Hurricane. If not, see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// //
// =================================================================== // +-----------------------------------------------------------------+
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// | H U R R I C A N E | // | H U R R I C A N E |
// | V L S I B a c k e n d D a t a - B a s e | // | V L S I B a c k e n d D a t a - B a s e |
// | | // | |
@ -32,14 +27,11 @@
// | E-mail : Jean-Paul.Chaput@lip6.fr | // | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== | // | =============================================================== |
// | C++ Header : "./hurricane/Bug.h" | // | C++ Header : "./hurricane/Bug.h" |
// | *************************************************************** | // +-----------------------------------------------------------------+
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
# ifndef __HURRICANE_BUG__ #ifndef HURRICANE_BUG_H
# define __HURRICANE_BUG__ #define HURRICANE_BUG_H
# include "hurricane/Exception.h" # include "hurricane/Exception.h"
@ -75,7 +67,7 @@ namespace Hurricane {
inline int Bug::getCode () const { return _code; } inline int Bug::getCode () const { return _code; }
} // End of Hurricane namespace. } // Hurricane namespace.
GETSTRING_POINTER_SUPPORT(Hurricane::Bug); GETSTRING_POINTER_SUPPORT(Hurricane::Bug);
@ -84,4 +76,4 @@ IOSTREAM_POINTER_SUPPORT(Hurricane::Bug);
IOSTREAM_VALUE_SUPPORT(Hurricane::Bug); IOSTREAM_VALUE_SUPPORT(Hurricane::Bug);
# endif // __HURRICANE_BUG__ #endif // HURRICANE_BUG_H

View File

@ -19,12 +19,7 @@
// License along with Hurricane. If not, see // License along with Hurricane. If not, see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
// //
// =================================================================== // +-----------------------------------------------------------------+
//
// $Id$
//
// x-----------------------------------------------------------------x
// | |
// | H U R R I C A N E | // | H U R R I C A N E |
// | V L S I B a c k e n d D a t a - B a s e | // | V L S I B a c k e n d D a t a - B a s e |
// | | // | |
@ -32,14 +27,11 @@
// | E-mail : Jean-Paul.Chaput@lip6.fr | // | E-mail : Jean-Paul.Chaput@lip6.fr |
// | =============================================================== | // | =============================================================== |
// | C++ Header : "./hurricane/Warning.h" | // | C++ Header : "./hurricane/Warning.h" |
// | *************************************************************** | // +-----------------------------------------------------------------+
// | U p d a t e s |
// | |
// x-----------------------------------------------------------------x
# ifndef __HURRICANE_WARNING__ # ifndef HURRICANE_WARNING_H
# define __HURRICANE_WARNING__ # define HURRICANE_WARNING_H
#include "hurricane/Exception.h" #include "hurricane/Exception.h"
@ -76,7 +68,7 @@ namespace Hurricane {
inline int Warning::getCode () const { return _code; } inline int Warning::getCode () const { return _code; }
} // End of Hurricane namespace. } // Hurricane namespace.
GETSTRING_POINTER_SUPPORT(Hurricane::Warning); GETSTRING_POINTER_SUPPORT(Hurricane::Warning);
@ -85,4 +77,4 @@ IOSTREAM_POINTER_SUPPORT(Hurricane::Warning);
IOSTREAM_VALUE_SUPPORT(Hurricane::Warning); IOSTREAM_VALUE_SUPPORT(Hurricane::Warning);
# endif // __HURRICANE_WARNING__ #endif // HURRICANE_WARNING_H

View File

@ -28,6 +28,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <map> #include <map>
#include "hurricane/Bug.h"
#include "hurricane/Error.h" #include "hurricane/Error.h"
#include "hurricane/Warning.h" #include "hurricane/Warning.h"
#include "hurricane/isobar/ProxyProperty.h" #include "hurricane/isobar/ProxyProperty.h"
@ -1408,6 +1409,16 @@ extern "C" {
PyErr_SetString ( HurricaneError, message.c_str() ); \ PyErr_SetString ( HurricaneError, message.c_str() ); \
return NULL; \ return NULL; \
} \ } \
catch ( const Bug& e ) { \
std::string message = "\n" + getString(e); \
PyErr_SetString ( HurricaneError, message.c_str() ); \
return NULL; \
} \
catch ( const Exception& e ) { \
std::string message = "\nUnknown Hurricane::Exception"; \
PyErr_SetString ( HurricaneError, message.c_str() ); \
return NULL; \
} \
catch ( const std::exception& e ) { \ catch ( const std::exception& e ) { \
std::string message = "\n" + std::string(e.what()); \ std::string message = "\n" + std::string(e.what()); \
PyErr_SetString ( HurricaneError, message.c_str() ); \ PyErr_SetString ( HurricaneError, message.c_str() ); \
@ -1416,7 +1427,7 @@ extern "C" {
catch ( ... ) { \ catch ( ... ) { \
std::string message = \ std::string message = \
"\nUnmanaged exception, neither a Hurricane::Error nor" \ "\nUnmanaged exception, neither a Hurricane::Error nor" \
"std::exception."; \ " a std::exception."; \
PyErr_SetString ( HurricaneError, message.c_str() ); \ PyErr_SetString ( HurricaneError, message.c_str() ); \
return NULL; \ return NULL; \
} \ } \

View File

@ -28,6 +28,7 @@
#include <QFrame> #include <QFrame>
#include <QFont> #include <QFont>
#include <QFontMetrics> #include <QFontMetrics>
#include "hurricane/Bug.h"
#include "hurricane/Error.h" #include "hurricane/Error.h"
#include "hurricane/Exception.h" #include "hurricane/Exception.h"
#include "hurricane/viewer/Graphics.h" #include "hurricane/viewer/Graphics.h"
@ -71,6 +72,9 @@ namespace Hurricane {
method(); method();
failure = false; failure = false;
} }
catch ( Bug& e ) {
ExceptionWidget::run( e );
}
catch ( Error& e ) { catch ( Error& e ) {
ExceptionWidget::run( e ); ExceptionWidget::run( e );
} }

View File

@ -16,6 +16,7 @@
#include <iostream> #include <iostream>
#include <iomanip> #include <iomanip>
#include "hurricane/Bug.h"
#include "hurricane/Error.h" #include "hurricane/Error.h"
#include "hurricane/viewer/Graphics.h" #include "hurricane/viewer/Graphics.h"
#include "hurricane/viewer/ExceptionWidget.h" #include "hurricane/viewer/ExceptionWidget.h"
@ -67,6 +68,9 @@ namespace Hurricane {
try { try {
return QApplication::notify( object, event ); return QApplication::notify( object, event );
} }
catch ( Bug& e ) {
ExceptionWidget::run( e );
}
catch ( Error& e ) { catch ( Error& e ) {
ExceptionWidget::run( e ); ExceptionWidget::run( e );
} }

View File

@ -658,12 +658,12 @@ namespace {
void _do_xG_xM3 (); void _do_xG_xM3 ();
private: private:
enum ConnexityBits { GlobalBSize = 3 enum ConnexityBits { GlobalBSize = 4
, Metal1BSize = 3 , Metal1BSize = 4
, Metal2BSize = 3 , Metal2BSize = 4
, Metal3BSize = 3 , Metal3BSize = 4
, PadsBSize = 3 , PadsBSize = 4
, PinsBSize = 3 , PinsBSize = 4
}; };
#define CONNEXITY_VALUE( Gs, M1s, M2s, M3s, pads, pins ) \ #define CONNEXITY_VALUE( Gs, M1s, M2s, M3s, pads, pins ) \
@ -683,6 +683,7 @@ namespace {
, Conn_1G_2M1 = CONNEXITY_VALUE( 1, 2, 0, 0, 0 , 0 ) , Conn_1G_2M1 = CONNEXITY_VALUE( 1, 2, 0, 0, 0 , 0 )
, Conn_1G_3M1 = CONNEXITY_VALUE( 1, 3, 0, 0, 0 , 0 ) , Conn_1G_3M1 = CONNEXITY_VALUE( 1, 3, 0, 0, 0 , 0 )
, Conn_1G_4M1 = CONNEXITY_VALUE( 1, 4, 0, 0, 0 , 0 ) , Conn_1G_4M1 = CONNEXITY_VALUE( 1, 4, 0, 0, 0 , 0 )
, Conn_1G_5M1 = CONNEXITY_VALUE( 1, 5, 0, 0, 0 , 0 )
, Conn_1G_1M2 = CONNEXITY_VALUE( 1, 0, 1, 0, 0 , 0 ) , Conn_1G_1M2 = CONNEXITY_VALUE( 1, 0, 1, 0, 0 , 0 )
, Conn_1G_2M2 = CONNEXITY_VALUE( 1, 0, 2, 0, 0 , 0 ) , Conn_1G_2M2 = CONNEXITY_VALUE( 1, 0, 2, 0, 0 , 0 )
, Conn_1G_3M2 = CONNEXITY_VALUE( 1, 0, 3, 0, 0 , 0 ) , Conn_1G_3M2 = CONNEXITY_VALUE( 1, 0, 3, 0, 0 , 0 )
@ -823,6 +824,16 @@ namespace {
_net = fromSegment->getNet(); _net = fromSegment->getNet();
forEach ( Hook*, hook, fromHook->getHooks() ) { forEach ( Hook*, hook, fromHook->getHooks() ) {
ltrace(99) << "Topology [" << _connexity.connexity << "] = "
<< "[" << _connexity.fields.globals
<< "+" << _connexity.fields.M1
<< "+" << _connexity.fields.M2
<< "+" << _connexity.fields.M3
<< "+" << _connexity.fields.Pin
<< "+" << _connexity.fields.Pad
<< "] " << _gcell
<< endl;
Segment* toSegment = dynamic_cast<Segment*>( hook->getComponent() ); Segment* toSegment = dynamic_cast<Segment*>( hook->getComponent() );
if (toSegment) { if (toSegment) {
@ -923,7 +934,8 @@ namespace {
case Conn_1G_1M1: _do_1G_1M1(); break; case Conn_1G_1M1: _do_1G_1M1(); break;
case Conn_1G_2M1: case Conn_1G_2M1:
case Conn_1G_3M1: case Conn_1G_3M1:
case Conn_1G_4M1: _do_1G_xM1(); break; case Conn_1G_4M1:
case Conn_1G_5M1: _do_1G_xM1(); break;
case Conn_1G_1M2: case Conn_1G_1M2:
case Conn_1G_2M2: case Conn_1G_2M2:
case Conn_1G_3M2: case Conn_1G_3M2:

View File

@ -36,6 +36,8 @@ namespace Kite {
using std::ostringstream; using std::ostringstream;
using Hurricane::tab; using Hurricane::tab;
using Hurricane::in_trace; using Hurricane::in_trace;
using Hurricane::Exception;
using Hurricane::Bug;
using Hurricane::Error; using Hurricane::Error;
using Hurricane::Warning; using Hurricane::Warning;
using Hurricane::ExceptionWidget; using Hurricane::ExceptionWidget;

View File

@ -29,6 +29,7 @@ namespace bopts = boost::program_options;
#include "hurricane/DebugSession.h" #include "hurricane/DebugSession.h"
#include "hurricane/DataBase.h" #include "hurricane/DataBase.h"
#include "hurricane/Cell.h" #include "hurricane/Cell.h"
#include "hurricane/Bug.h"
#include "hurricane/Warning.h" #include "hurricane/Warning.h"
#include "hurricane/UpdateSession.h" #include "hurricane/UpdateSession.h"
#include "hurricane/viewer/Script.h" #include "hurricane/viewer/Script.h"
@ -435,6 +436,10 @@ int main ( int argc, char *argv[] )
if ( not destroyDatabase ) exit ( 0 ); if ( not destroyDatabase ) exit ( 0 );
cmess1 << " o Full database deletion (may be buggy)." << endl; cmess1 << " o Full database deletion (may be buggy)." << endl;
} }
catch ( Bug& e ) {
cerr << e.what() << endl;
exit ( 1 );
}
catch ( Error& e ) { catch ( Error& e ) {
cerr << e.what() << endl; cerr << e.what() << endl;
cerr << "\nProgram stack:\n" << e.where() << endl; cerr << "\nProgram stack:\n" << e.where() << endl;