public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-7151] testsuite: Add testcase for recently fixed PR [PR109462]
@ 2023-04-12 14:23 Jakub Jelinek
0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2023-04-12 14:23 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:14f0ea22413fe3e64306c57fbfd2ae7b5769c1a1
commit r13-7151-g14f0ea22413fe3e64306c57fbfd2ae7b5769c1a1
Author: Jakub Jelinek <jakub@redhat.com>
Date: Wed Apr 12 15:16:31 2023 +0200
testsuite: Add testcase for recently fixed PR [PR109462]
This adds a runtime testcase for just fixed PR.
2023-04-12 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/109462
* g++.dg/opt/pr109462.C: New test.
Diff:
---
gcc/testsuite/g++.dg/opt/pr109462.C | 94 +++++++++++++++++++++++++++++++++++++
1 file changed, 94 insertions(+)
diff --git a/gcc/testsuite/g++.dg/opt/pr109462.C b/gcc/testsuite/g++.dg/opt/pr109462.C
new file mode 100644
index 00000000000..07ac7c5d4fb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr109462.C
@@ -0,0 +1,94 @@
+// PR tree-optimization/109462
+// { dg-do run { target c++11 } }
+// { dg-options "-O2" }
+
+struct A {
+ A (const char *);
+ A (const char *, int);
+ bool empty ();
+ int size ();
+ bool equals (A);
+ A trim (char);
+ A trim ();
+};
+[[gnu::noipa]] A::A (const char *) {}
+[[gnu::noipa]] A::A (const char *, int) { __builtin_abort (); }
+[[gnu::noipa]] bool A::empty () { __builtin_abort (); }
+[[gnu::noipa]] int A::size () { __builtin_abort (); }
+[[gnu::noipa]] bool A::equals (A) { return true; }
+[[gnu::noipa]] A A::trim (char) { __builtin_abort (); }
+[[gnu::noipa]] A A::trim () { __builtin_abort (); }
+
+enum B { raw_identifier = 6, l_paren = 21, r_paren = 22 };
+[[gnu::noipa]] bool isAnyIdentifier (B) { return true; }
+[[gnu::noipa]] bool isStringLiteral (B) { __builtin_abort (); }
+
+struct C {
+ B c;
+ B getKind () { return c; }
+ bool is (B x) { return c == x; }
+ unsigned getLength () { __builtin_abort (); }
+ A getRawIdentifier () {
+ A x ("");
+ c == raw_identifier ? void () : __builtin_abort ();
+ return x;
+ }
+ const char *getLiteralData ();
+};
+[[gnu::noipa]] const char *C::getLiteralData () { __builtin_abort (); }
+
+struct D {
+ D ();
+ bool LexFromRawLexer (C &);
+};
+[[gnu::noipa]] D::D () {}
+[[gnu::noipa]] bool D::LexFromRawLexer (C &t) {
+ static int cnt;
+ C tok[] = { { raw_identifier }, { l_paren }, { raw_identifier }, { r_paren } };
+ t = tok[cnt++];
+ return false;
+}
+
+bool ok = false;
+[[gnu::noipa]] void reportEmptyContextError ()
+{
+ ok = true;
+}
+
+[[gnu::noipa]] void
+VisitObjCMessageExpr ()
+{
+ D TheLexer;
+ C I;
+ C Result;
+ int p_count = 0;
+ while (!TheLexer.LexFromRawLexer (I)) {
+ if (I.getKind () == l_paren)
+ ++p_count;
+ if (I.getKind () == r_paren) {
+ if (p_count == 1)
+ break;
+ --p_count;
+ }
+ Result = I;
+ }
+ if (isAnyIdentifier (Result.getKind ())) {
+ if (Result.getRawIdentifier ().equals ("nil")) {
+ reportEmptyContextError ();
+ return;
+ }
+ }
+ if (!isStringLiteral (Result.getKind ()))
+ return;
+ A Comment = A (Result.getLiteralData (), Result.getLength ()).trim ('"');
+ if ((Comment.trim ().size () == 0 && Comment.size () > 0) || Comment.empty ())
+ reportEmptyContextError ();
+}
+
+int
+main ()
+{
+ VisitObjCMessageExpr ();
+ if (!ok)
+ __builtin_abort ();
+}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-04-12 14:23 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-12 14:23 [gcc r13-7151] testsuite: Add testcase for recently fixed PR [PR109462] Jakub Jelinek
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).