Remove assertion in get_info_about_necessary_edges (PR ipa/93166)
diff mbox series

Message ID BYAPR01MB486944442AE5EB0BF2E2BAB8F7330@BYAPR01MB4869.prod.exchangelabs.com
State New
Headers show
Series
  • Remove assertion in get_info_about_necessary_edges (PR ipa/93166)
Related show

Commit Message

Feng Xue OS Jan. 19, 2020, 9:38 a.m. UTC
Bootstrapped/regtested on x86_64-linux and aarch64-linux.

Feng
---
2020-01-19  Feng Xue  <fxue@os.amperecomputing.com>

        PR ipa/93166
        * ipa-cp.c (get_info_about_necessary_edges): Remove value
        check assertion.

Comments

Jan Hubicka Jan. 19, 2020, 11:54 a.m. UTC | #1
> Bootstrapped/regtested on x86_64-linux and aarch64-linux.
> 
> Feng
> ---
> 2020-01-19  Feng Xue  <fxue@os.amperecomputing.com>
> 
>         PR ipa/93166
>         * ipa-cp.c (get_info_about_necessary_edges): Remove value
>         check assertion.

OK.
Please next time write short description on the problem in email so one
does not need to look up the PR log.

Honza
Jakub Jelinek Jan. 25, 2020, 11:50 p.m. UTC | #2
On Sun, Jan 19, 2020 at 12:54:51PM +0100, Jan Hubicka wrote:
> > Bootstrapped/regtested on x86_64-linux and aarch64-linux.
> > 
> > Feng
> > ---
> > 2020-01-19  Feng Xue  <fxue@os.amperecomputing.com>
> > 
> >         PR ipa/93166
> >         * ipa-cp.c (get_info_about_necessary_edges): Remove value
> >         check assertion.
> 
> OK.
> Please next time write short description on the problem in email so one
> does not need to look up the PR log.

The test FAILs with -std=c++98 (because it really requires C++11), but more
importantly, it doesn't actually test what it is supposed to test, i.e.
doesn't FAIL before the ipa-cp.c change and succeed with it.
That is because it is a dg-do compile test, it needs to be a proper LTO test
for this.

Fixed thusly, tested on x86_64-linux and i686-linux (with Thursday snapshot
where it FAILs and current where it PASSes), committed to trunk as obvious.

2020-01-26  Jakub Jelinek  <jakub@redhat.com>

	PR ipa/93166
	* g++.dg/pr93166.C: Move to ...
	* g++.dg/pr93166_0.C: ... here.  Turn it into a proper lto test.

diff --git a/gcc/testsuite/g++.dg/pr93166.C b/gcc/testsuite/g++.dg/lto/pr93166_0.C
similarity index 95%
rename from gcc/testsuite/g++.dg/pr93166.C
rename to gcc/testsuite/g++.dg/lto/pr93166_0.C
index e9234ce7a0c..52f7ddf4016 100644
--- a/gcc/testsuite/g++.dg/pr93166.C
+++ b/gcc/testsuite/g++.dg/lto/pr93166_0.C
@@ -1,5 +1,10 @@
-// { dg-do compile }
-// { dg-options "-shared -flto -O2 -fPIC -fvisibility=hidden" }
+// PR ipa/93166
+// { dg-lto-do link }
+// { dg-lto-options { { -fPIC -O2 -flto -fvisibility=hidden } } }
+// { dg-require-effective-target shared }
+// { dg-require-effective-target fpic }
+// { dg-extra-ld-options "-shared" }
+// { dg-require-visibility "" }
 
 namespace Qt {
 enum DropAction {};


	Jakub

Patch
diff mbox series

From 02e4bea314a0ca0a8befb85c64efcfe422d35cb8 Mon Sep 17 00:00:00 2001
From: Feng Xue <fxue@os.amperecomputing.com>
Date: Sun, 19 Jan 2020 15:49:44 +0800
Subject: [PATCH] remove assert in get_info_about_necessary_edges

---
 gcc/ipa-cp.c                   |   3 -
 gcc/testsuite/g++.dg/pr93166.C | 208 +++++++++++++++++++++++++++++++++
 2 files changed, 208 insertions(+), 3 deletions(-)
 create mode 100644 gcc/testsuite/g++.dg/pr93166.C

diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index 17da1d8e8a7..e762abb896d 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -4175,9 +4175,6 @@  get_info_about_necessary_edges (ipcp_value<valtype> *val, cgraph_node *dest,
 	      hot |= cs->maybe_hot_p ();
 	      if (cs->caller != dest)
 		non_self_recursive = true;
-	      else if (src->val)
-		gcc_assert (values_equal_for_ipcp_p (src->val->value,
-						     val->value));
 	    }
 	  cs = get_next_cgraph_edge_clone (cs);
 	}
diff --git a/gcc/testsuite/g++.dg/pr93166.C b/gcc/testsuite/g++.dg/pr93166.C
new file mode 100644
index 00000000000..e9234ce7a0c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr93166.C
@@ -0,0 +1,208 @@ 
+// { dg-do compile }
+// { dg-options "-shared -flto -O2 -fPIC -fvisibility=hidden" }
+
+namespace Qt {
+enum DropAction {};
+}
+class QObject;
+struct QMetaObject {
+  static void activate(const QMetaObject *, void *);
+  enum Call {};
+  struct {
+    const QMetaObject *superdata;
+    int *stringdata;
+    unsigned *data;
+    typedef void (*StaticMetacallFunction)(QObject *, Call, int, void **);
+    StaticMetacallFunction static_metacallrelatedMetaObjectsextradata;
+  } d;
+};
+class QString;
+struct QListData {
+  struct Data;
+  Data *d;
+};
+template <typename> class QList {
+  union {
+    QListData p;
+    QListData::Data *d;
+  };
+
+public:
+  ~QList();
+};
+class QStringList : QList<QString> {};
+template <typename> struct QScopedPointerDeleter;
+class QObjectData;
+template <typename, typename = QScopedPointerDeleter<QObjectData>>
+class QScopedPointer {
+public:
+  ~QScopedPointer();
+  QObjectData *d;
+};
+
+template <typename> struct FunctionPointer;
+template <class Obj, typename Ret, typename... Args>
+struct FunctionPointer<Ret (Obj::*)(Args...)> {
+  typedef Obj Object;
+};
+
+class QObject {
+public:
+  virtual ~QObject();
+  virtual void disconnectNotify();
+  template <typename Func1, typename Func2>
+  void connect(typename FunctionPointer<Func1>::Object *, Func1,
+               typename FunctionPointer<Func2>::Object *, Func2);
+  QScopedPointer<QObjectData> d_ptr;
+};
+class QPaintDevicePrivate;
+class QPaintDevice {
+public:
+  virtual ~QPaintDevice();
+  unsigned short painters;
+  QPaintDevicePrivate *reserved;
+};
+class QWidgetData;
+class QWidget : public QObject, QPaintDevice {
+  QWidgetData *data;
+};
+class QFrame : public QWidget {};
+class QMenu;
+class QMimeData;
+class QAbstractScrollArea : public QFrame {};
+class QAbstractItemView : public QAbstractScrollArea {};
+class QTreeView : public QAbstractItemView {};
+class QTreeWidgetItem;
+class QTreeWidget : public QTreeView {};
+class QSignalMapper;
+class KActionCollection;
+class MenuFile;
+class MenuFolderInfo;
+class MenuEntryInfo;
+class MenuSeparatorInfo;
+class TreeView : QTreeWidget {
+public:
+  static const QMetaObject d;
+  static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **);
+  void disableAction();
+  bool dropMimeData(QTreeWidgetItem *, int, const QMimeData *, Qt::DropAction);
+  KActionCollection *m_ac;
+  QMenu *m_popupMenu;
+  int m_clipboard;
+  MenuFolderInfo *m_clipboardFolderInfo;
+  MenuEntryInfo *m_clipboardEntryInfo;
+  bool m_showHidden;
+  MenuFile *m_menuFile;
+  MenuFolderInfo *m_rootFolder;
+  MenuSeparatorInfo *m_separator;
+  QStringList m_newMenuIds;
+  QStringList m_newDirectoryList;
+  bool m_layoutDirty;
+  bool m_detailedMenuEntries;
+  bool m_detailedEntriesNamesFirst;
+  QStringList m_dropMimeTypes;
+  QSignalMapper *m_sortSignalMapper;
+};
+struct {
+  int data[];
+} b;
+unsigned c[]{};
+void TreeView::qt_static_metacall(QObject *p1, QMetaObject::Call, int,
+                                  void **p4) {
+  static_cast<TreeView *>(p1)->dropMimeData(
+      0, 0, 0, *reinterpret_cast<Qt::DropAction *>(p4));
+}
+const QMetaObject TreeView::d{&d, b.data, c, qt_static_metacall};
+void TreeView::disableAction() { QMetaObject::activate(&d, nullptr); }
+template <typename> struct QScopedPointerDeleter;
+class KXMLGUIClientPrivate;
+class KXMLGUIClient {
+public:
+  virtual void m_fn2();
+  KXMLGUIClient();
+  virtual ~KXMLGUIClient();
+  KXMLGUIClientPrivate *const d;
+};
+class KXMLGUIBuilderPrivate;
+class KXMLGUIBuilder {
+public:
+  virtual ~KXMLGUIBuilder();
+  virtual QStringList customTags();
+  KXMLGUIBuilderPrivate *const d;
+};
+
+class QMainWindow : public QWidget {};
+class KMainWindowPrivate;
+class KMainWindow : public QMainWindow {
+  KMainWindowPrivate *const k_ptr;
+};
+class KXmlGuiWindow : public KMainWindow,
+                      KXMLGUIBuilder,
+                      virtual KXMLGUIClient {
+public:
+  KXmlGuiWindow();
+};
+class QSplitter;
+class QAction;
+class BasicTab;
+class TreeView;
+class KTreeWidgetSearchLine;
+class KMenuEdit : public KXmlGuiWindow {
+public:
+  KMenuEdit();
+  TreeView *m_tree;
+  BasicTab *m_basicTab;
+  QSplitter *m_splitter;
+  KTreeWidgetSearchLine *m_searchLine;
+  QAction *m_actionDelete;
+  bool m_showHidden;
+};
+int __attribute__((visibility("default"))) fn1() { new KMenuEdit; return 0; }
+template <class> struct QTypedArrayData;
+class QString {
+public:
+  ~QString();
+  QTypedArrayData<unsigned short> *d;
+};
+class MenuEntryInfo;
+class MenuInfo {
+public:
+  virtual ~MenuInfo();
+};
+class MenuFolderInfo : MenuInfo {
+public:
+  void updateFullId(const QString &);
+  QString id;
+  QString fullId;
+  QString caption;
+  QString genericname;
+  QString comment;
+  QString directoryFile;
+  QString icon;
+  QList<MenuFolderInfo *> subFolders;
+  QList<MenuEntryInfo *> entries;
+  QList<MenuInfo *> initialLayout;
+  bool dirty;
+  bool hidden;
+};
+void MenuFolderInfo::updateFullId(const QString &) {
+  for (MenuFolderInfo *a = 0;;)
+    a->updateFullId(fullId);
+}
+
+MenuFolderInfo *a1, *b1;
+bool TreeView::dropMimeData(QTreeWidgetItem *, int, const QMimeData *,
+                            Qt::DropAction) {
+  b1->updateFullId(a1->fullId);
+  return true;
+}
+
+class BasicTab {
+public:
+  void slotDisableAction();
+};
+
+KMenuEdit::KMenuEdit() {
+  connect(m_tree, &TreeView::disableAction, m_basicTab,
+          &BasicTab::slotDisableAction);
+}
-- 
2.17.1