error: BB 13 can not throw but has EH edges

Harald van Dijk truedfx@gentoo.org
Tue Apr 15 02:50:00 GMT 2008


Hi all,

I was trying to get a program running with GCC 4.3.0, which mostly
failed due to missing #include directives, but after a bit I ran into a
strange error, which I tried to reduce and got to the below:

struct GList {
  void *data;
  GList *next;
};
struct GtkWidget gtk_dialog_get_type();
typedef struct _GtkTreeIter GtkTreeIter;
struct GtkTreePath;
struct GtkTreeModel;
unsigned gtk_tree_model_get_type() __attribute__((__const__));
int gtk_tree_model_get_iter(GtkTreeModel *tree_model, GtkTreePath *);
GtkWidget *gtk_tree_view_new_with_model (GtkTreeModel *);
namespace std {
  namespace __gnu_cxx {
    template <typename _Tp> class new_allocator {};
  }
  template <typename _Tp> class allocator :
__gnu_cxx::new_allocator<_Tp> {
  public:
    template <typename _Tp1> struct rebind {
      typedef allocator<_Tp1> other;
    };
    ~allocator () {}
  };
  template <typename> class basic_string;
  typedef basic_string<char> string;
  template <typename _Tp> struct _List_node;
  template <typename _Tp, typename _Alloc> class _List_base {
    typedef typename _Alloc::template rebind<_List_node<_Tp> >::other
_Node_alloc_type;
    _Node_alloc_type _M_impl;
  };
  template <typename _Tp, typename _Alloc = std::allocator<_Tp> > class
list : _List_base <_Tp, _Alloc> {};
}
class DictManageDlg {
  void show_add_dict_dialog (GtkTreeIter *);
};
void DictManageDlg::show_add_dict_dialog (GtkTreeIter *)
{
  std::list<std::string> added_dictlist;
  gtk_tree_view_new_with_model((GtkTreeModel *)
gtk_tree_model_get_type());
  {
    GList *selectlist;
    if (selectlist) {
      GList *list = selectlist;
      while (list) {
        gtk_tree_model_get_iter((GtkTreeModel *)
gtk_tree_model_get_type(), (GtkTreePath *) list->data);
        list = list->next;
      }
    }
  }
}

Apologies for the relatively long testcase, but I couldn't significantly
reduce it further. When compiling this with 'gcc -c -O bug.ii', I get:

bug.ii: In member function ‘void
DictManageDlg::show_add_dict_dialog(GtkTreeIter*)’:
bug.ii:35: error: BB 13 can not throw but has EH edges
bug.ii:35: internal compiler error: verify_flow_info failed
Please submit a full bug report,

I first ran into this with Gentoo's GCC 4.3.0, but I made sure to test
without any patches, and built official GCC configured with

../gcc-4.3.0/configure --prefix=$HOME/gcc --enable-languages=c,c++ \
	--enable-checking --build=i686-pc-linux-gnu

Now, I have a few questions:

- Is this a known issue? I've searched for this error, but only got
results requiring specific compiler options that aren't necessary to get
it to fail here. I will report it as a bug if it's not known (and not
already fixed by accident).

- When I disable checking, GCC does not generate any error message. Can
I expect that the code it generates will be correct, or might it be
broken and going undetected?

- What would you recommend as a workaround (other than disabling
checking)? My first guess would be to remove __attribute__((__const__)), but
that's not an option, as it's part of gtk, and not of the program
itself. Do you have a good alternative?



More information about the Gcc-help mailing list