--- /dev/null
+// PR rtl-optimization/100254
+// { dg-do compile }
+// { dg-options "-O2 -fno-guess-branch-probability -fipa-pta -fnon-call-exceptions -fcompare-debug" }
+// { dg-additional-options "-mtune=goldmont" { target i?86-*-* x86_64-*-* } }
+
+struct _Rb_tree_node_base {
+ typedef _Rb_tree_node_base *_Base_ptr;
+ typedef _Rb_tree_node_base *_Const_Base_ptr;
+ _Base_ptr _M_left;
+};
+template <typename _Key_compare> struct _Rb_tree_key_compare {
+ _Key_compare _M_key_compare;
+};
+struct _Rb_tree_header {
+ _Rb_tree_node_base _M_header;
+};
+struct _Rb_tree_iterator {
+ _Rb_tree_iterator(_Rb_tree_node_base::_Base_ptr);
+ friend bool operator==(_Rb_tree_iterator, _Rb_tree_iterator);
+};
+template <typename _Tp> struct _Rb_tree_const_iterator {
+ typedef _Rb_tree_const_iterator _Self;
+ _Rb_tree_const_iterator(_Rb_tree_node_base::_Const_Base_ptr) {}
+ _Tp operator*();
+ template <typename _Up>
+ friend bool operator!=(_Rb_tree_const_iterator<_Up>, _Rb_tree_const_iterator<_Up>);
+};
+template <typename _Key, typename _Val, typename _Compare> struct _Rb_tree {
+ template <typename _Key_compare>
+ struct _Rb_tree_impl : _Rb_tree_key_compare<_Key_compare>, _Rb_tree_header {};
+ _Rb_tree_impl<_Compare> _M_impl;
+ _Key _S_key();
+ typedef _Rb_tree_const_iterator<_Val> const_iterator;
+ const_iterator begin() { return _M_impl._M_header._M_left; }
+ _Rb_tree_iterator find(const _Key &);
+};
+template <typename _Key, typename _Val, typename _Compare>
+_Rb_tree_iterator _Rb_tree<_Key, _Val, _Compare>::find(const _Key &__k) {
+ _Rb_tree_iterator __j = 0;
+ return __j == 0 || _M_impl._M_key_compare(__k, _S_key()) ? 0 : __j;
+}
+template <typename _Key, typename _Compare = _Key> struct set {
+ typedef _Key key_type;
+ typedef _Rb_tree<key_type, _Key, _Compare> _Rep_type;
+ _Rep_type _M_t;
+ typedef typename _Rep_type::const_iterator iterator;
+ iterator begin() { return _M_t.begin(); }
+ iterator end();
+ void find(key_type __x) { _M_t.find(__x); }
+};
+struct WindowDesc {
+ WindowDesc(short);
+} _station_view_desc(0);
+struct Window {
+ void IsWidgetLowered();
+ virtual void OnClick(int, int, int);
+};
+int AllocateWindowDescFront_window_number;
+template <typename Wcls> void AllocateWindowDescFront(WindowDesc *desc, bool) {
+ Wcls(desc, AllocateWindowDescFront_window_number);
+}
+class CargoDataEntry;
+struct CargoSorter {
+ bool operator()(const CargoDataEntry *, const CargoDataEntry *) const;
+};
+struct CargoDataEntry {
+ ~CargoDataEntry();
+ char Retrieve_cargo;
+ void Retrieve() {
+ CargoDataEntry t(Retrieve_cargo);
+ children->find(&t);
+ }
+ CargoDataEntry(char);
+ set<CargoDataEntry *, CargoSorter> *children;
+};
+CargoDataEntry::CargoDataEntry(char) : children() {}
+CargoDataEntry::~CargoDataEntry() {
+ if (children)
+ for (set<CargoDataEntry *>::iterator i = children->begin();
+ i != children->end();)
+ delete *i;
+}
+bool CargoSorter::operator()(const CargoDataEntry *,
+ const CargoDataEntry *) const { return false; }
+struct StationViewWindow : Window {
+ StationViewWindow(WindowDesc *, int);
+ CargoDataEntry HandleCargoWaitingClick_filter;
+ void OnClick(int, int widget, int) {
+ switch (widget) {
+ case 0:
+ HandleCargoWaitingClick_filter.Retrieve();
+ HandleCargoWaitingClick_filter.Retrieve();
+ case 1:
+ IsWidgetLowered();
+ }
+ }
+};
+void ShowStationViewWindow_station() {
+ AllocateWindowDescFront<StationViewWindow>(&_station_view_desc,
+ ShowStationViewWindow_station);
+}