aboutsummaryrefslogtreecommitdiff
path: root/SingleSource/Regression/C/gcc-c-torture/execute/20050125-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'SingleSource/Regression/C/gcc-c-torture/execute/20050125-1.c')
-rw-r--r--SingleSource/Regression/C/gcc-c-torture/execute/20050125-1.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/SingleSource/Regression/C/gcc-c-torture/execute/20050125-1.c b/SingleSource/Regression/C/gcc-c-torture/execute/20050125-1.c
new file mode 100644
index 00000000..3dc15b53
--- /dev/null
+++ b/SingleSource/Regression/C/gcc-c-torture/execute/20050125-1.c
@@ -0,0 +1,35 @@
+/* Verify that the CALL sideeffect isn't optimized away. */
+/* Contributed by Greg Parker 25 Jan 2005 <gparker@apple.com> */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+struct parse {
+ char *next;
+ char *end;
+ int error;
+};
+
+int seterr(struct parse *p, int err)
+{
+ p->error = err;
+ return 0;
+}
+
+void bracket_empty(struct parse *p)
+{
+ if (((p->next < p->end) && (*p->next++) == ']') || seterr(p, 7)) { }
+}
+
+int main(int argc __attribute__((unused)), char **argv __attribute__((unused)))
+{
+ struct parse p;
+ p.next = p.end = (char *)0x12345;
+
+ p.error = 0;
+ bracket_empty(&p);
+ if (p.error != 7)
+ abort ();
+
+ return 0;
+}