From: Richard Biener <rguenther@suse.de>
To: gcc-patches@gcc.gnu.org
Subject: [PATCH] New testcase
Date: Tue, 14 Mar 2023 07:29:19 +0000 (UTC) [thread overview]
Message-ID: <20230314072919.LfppNEqbd4AaYDpdLxpTSHlU9VjhyTQsW5rULLzrX3w@z> (raw)
This is a reduced testcase for an issue I ran into when trying to
improve PTA compile-time further, there wasn't any C family runfail
in the testsuite for this.
Pushed.
* g++.dg/torture/20230313.C: New testcase.
---
gcc/testsuite/g++.dg/torture/20230313.C | 109 ++++++++++++++++++++++++
1 file changed, 109 insertions(+)
create mode 100644 gcc/testsuite/g++.dg/torture/20230313.C
diff --git a/gcc/testsuite/g++.dg/torture/20230313.C b/gcc/testsuite/g++.dg/torture/20230313.C
new file mode 100644
index 00000000000..d1f348003bd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/20230313.C
@@ -0,0 +1,109 @@
+/* { dg-do run } */
+/* { dg-additional-options "-fno-exceptions -fno-rtti" } */
+
+extern "C" void free (void *);
+void fancy_abort () { __builtin_abort (); }
+struct vec_prefix
+{
+ unsigned m_alloc : 1;
+ unsigned m_using_auto_storage : 1;
+ unsigned m_num;
+};
+struct vl_ptr
+;
+struct va_heap
+{
+ typedef vl_ptr default_layout;
+};
+template<typename ,
+ typename A ,
+ typename = typename A::default_layout>
+struct vec
+;
+template<typename T, typename A>
+struct vec<T, A, int>
+{
+ T & operator[] (unsigned ix)
+ {
+ int *__trans_tmp_2;
+ !m_vecpfx.m_num ? fancy_abort (), 0 : 0;
+ __trans_tmp_2 = reinterpret_cast <T *> (this + 1);
+ return __trans_tmp_2[ix];
+ }
+ bool iterate (unsigned , T *ptr) {
+ *ptr = 0;
+ return false;
+ }
+ void embedded_init (unsigned , unsigned num, unsigned aut)
+ {
+ m_vecpfx.m_alloc =
+ m_vecpfx.m_using_auto_storage = aut;
+ m_vecpfx.m_num = num;
+ }
+ void quick_grow (unsigned len)
+ {
+ !m_vecpfx.m_alloc ? fancy_abort (), 0 : m_vecpfx.m_num = len;
+ }
+ vec_prefix m_vecpfx;
+};
+template<typename T, int N >
+struct auto_vec : vec<T, va_heap>
+{
+ auto_vec ()
+ {
+ m_auto.embedded_init (N, 0, 1);
+ long off = (char *) &m_auto - (char *) this;
+ this->m_vec = (vec<T, va_heap, int> *) ((char *) this + off);
+ }
+ ~auto_vec ()
+ {
+ this->release ();
+ }
+ vec<T, va_heap, int> m_auto;
+ char m_data;
+};
+template<typename T>
+struct vec<T, va_heap>
+{
+void
+release ()
+{
+ bool __trans_tmp_1 = m_vec ? m_vec->m_vecpfx.m_using_auto_storage : false;
+ if (__trans_tmp_1)
+ return;
+ vec<int, va_heap, int> *&v = m_vec;
+ free (m_vec);
+ v = nullptr;
+}
+T &operator[] (unsigned ix) { return (*m_vec)[ix]; }
+bool
+iterate (unsigned ix, T *ptr) {
+ m_vec->iterate (ix, ptr);
+ return false;
+}
+void
+quick_grow (unsigned len)
+{
+ m_vec->quick_grow (len);
+}
+ vec<T, va_heap, int> *m_vec;
+};
+void test_auto_alias ()
+{
+ volatile int i = 1;
+ auto_vec<int, 8> v;
+ v.quick_grow (2);
+ v[0] = 1;
+ v[1] = 2;
+ int val;
+ for (int ix = i; v.iterate (ix, &val); ix++)
+ if (val != 2)
+ __builtin_abort ();
+ if (val != 0)
+ __builtin_abort ();
+}
+int main()
+{
+ test_auto_alias ();
+ return 0;
+}
--
2.35.3
next reply other threads:[~2023-03-14 7:29 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-14 7:29 Richard Biener [this message]
[not found] <20230314072924.C1A34385840C@sourceware.org>
2023-03-20 10:15 ` Jakub Jelinek
2023-03-20 10:59 ` Richard Biener
-- strict thread matches above, loose matches on Subject: below --
2012-06-15 11:43 Richard Guenther
2009-10-20 16:00 Richard Guenther
2008-05-22 16:55 Richard Guenther
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230314072919.LfppNEqbd4AaYDpdLxpTSHlU9VjhyTQsW5rULLzrX3w@z \
--to=rguenther@suse.de \
--cc=gcc-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).