]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
This commit was manufactured by cvs2svn to create branch
authorNo Author <no-author@gcc.gnu.org>
Thu, 11 Dec 2003 07:48:07 +0000 (07:48 +0000)
committerNo Author <no-author@gcc.gnu.org>
Thu, 11 Dec 2003 07:48:07 +0000 (07:48 +0000)
'gcc-3_3-branch'.

From-SVN: r74529

gcc/testsuite/g++.dg/opt/noreturn-1.C [new file with mode: 0644]
gcc/testsuite/g77.f-torture/compile/13060.f [new file with mode: 0644]
gcc/testsuite/gcc.dg/overflow-1.c [new file with mode: 0644]

diff --git a/gcc/testsuite/g++.dg/opt/noreturn-1.C b/gcc/testsuite/g++.dg/opt/noreturn-1.C
new file mode 100644 (file)
index 0000000..9b2fc0c
--- /dev/null
@@ -0,0 +1,87 @@
+// PR optimization/12965
+// Origin: <qboosh@pld-linux.org>
+// Reduced testcase: Falk Hueffner <falk@debian.org>
+
+// This ICEd on Alpha because the reload pass emitted save/restore
+// insns around a no-return call.
+
+// { dg-do compile }
+// { dg-options "-O2" }
+
+template <typename _Alloc> class allocator;
+template <class _CharT> struct char_traits;
+template <typename _CharT,
+         typename _Traits = char_traits<_CharT>,
+         typename _Alloc = allocator<_CharT> >
+class basic_string;
+typedef basic_string<char> string;
+
+static inline int __exchange_and_add(volatile int * __mem, int __val) {
+    int __result;
+    asm("" : "=&r"(__result));
+    return __result;
+}
+
+template<typename _Tp> struct allocator {
+    allocator() throw() { }
+    allocator(const allocator &) throw() {}
+};
+
+template<typename _CharT, typename _Traits, typename _Alloc>
+struct basic_string {
+    typedef _Alloc allocator_type;
+    struct _Rep {
+       int _M_references;
+       void _M_dispose(const _Alloc & __a) {
+           if (__exchange_and_add(&_M_references, -1) <= 0)
+               _M_destroy(__a);
+       } void _M_destroy(const _Alloc &) throw();
+    };
+    struct _Alloc_hider : _Alloc {
+       _CharT *_M_p;
+    };
+    mutable _Alloc_hider _M_dataplus;
+    _CharT *_M_data() const { return _M_dataplus._M_p; }
+    _Rep *_M_rep() const {
+       return &((reinterpret_cast<_Rep *>(_M_data()))[-1]);
+    }
+    basic_string();
+    basic_string(const _CharT * __s, const _Alloc & __a = _Alloc());
+    ~basic_string() {
+       _M_rep()->_M_dispose(this->get_allocator());
+    }
+    allocator_type get_allocator() const { return _M_dataplus; }
+};
+
+struct Egeneric {
+    void stack(const string & passage, const string & message = "") { }
+};
+
+struct infinint {
+    void detruit() throw(Egeneric);
+    template<class T> void infinint_from(T a) throw(Egeneric);
+    infinint(long a = 0) throw(Egeneric) {
+       try {
+           infinint_from(a);
+       } catch(Egeneric& e) {
+           e.stack("infinint::infinint", "long");
+       }
+    }
+    ~infinint() throw(Egeneric) {
+       try {
+           detruit();
+       } catch(Egeneric& e) { }
+    }
+};
+
+struct inode {
+    string x;
+    infinint a, c;
+    infinint ea_offset;
+    inode();
+};
+
+inode::inode()
+{
+    ea_offset = 0;
+}
diff --git a/gcc/testsuite/g77.f-torture/compile/13060.f b/gcc/testsuite/g77.f-torture/compile/13060.f
new file mode 100644 (file)
index 0000000..200117b
--- /dev/null
@@ -0,0 +1,13 @@
+      subroutine geo2()
+      implicit none
+
+      integer ms,n,ne(2)
+
+      ne(1) = 1
+      ne(2) = 2
+      ms = 1
+
+      call call_me(ne(1)*ne(1))
+
+      n = ne(ms)
+      end
diff --git a/gcc/testsuite/gcc.dg/overflow-1.c b/gcc/testsuite/gcc.dg/overflow-1.c
new file mode 100644 (file)
index 0000000..db51a5e
--- /dev/null
@@ -0,0 +1,25 @@
+/* PR optimization/13318 */
+/* Origin: <bremner@unb.ca> */
+/* Reduced testcase: Wolfgang Bangerth <bangerth@dealii.org> */
+
+/* Verify that the big multiplier doesn't cause an integer
+   overflow in the loop optimizer.  */
+
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+struct S {
+  int key;
+  int rnext,rprev;
+};
+void foo(struct S* H)
+{
+  int i, k;
+  for (i=0; i<2; i++){
+    struct S* cell=H+k;
+    cell->key=i*(0xffffffffUL/2);
+    cell->rnext=k+(1-i);
+    cell->rprev=k+(1-i);
+  }
+}