ref: 3c23871242a42e719fb786d2cb94549d7761ca0c
parent: a4a8aee18eb929f1e24bc5fe0ee22ce7919750c8
author: Roberto E. Vargas Caballero <[email protected]>
date: Tue Aug 9 13:08:15 EDT 2016
[cc1] Add test065 This test tests really strange situations about pointers, decay, and the content operator. If you someday in your life see a code like this in production you should kill to the author.
--- /dev/null
+++ b/cc1/tests/test065.c
@@ -1,0 +1,66 @@
+/* See LICENSE file for copyright and license details. */
+
+/*
+name: TEST065
+description: Test decay mixed with * operators
+error:
+test065.c:65: error: decrement of pointer to an incomplete type
+test065.c:65: error: invalid use of undefined type
+test065.c:66: warning: 'argv' defined but not used
+output:
+G7 I F "main
+{
+A1 I "argc
+A5 P "argv
+\
+V8 I #N1
+A9 V8 "v
+A12 P "p
+A14 P "f1
+A15 P "f2
+ A9 #I0 :I
+ A12 A9 'P :P
+ A14 G7 'P :P
+ A15 G7 'P :P
+ y L18 A1 #I0 !I
+ h #I1
+L18
+ y L19 G7 #I0 pI #P0 pP cI #I0 =I
+ h #I2
+L19
+ y L20 A14 @F #I0 pI #P0 pP cI #I0 =I
+ h #I3
+L20
+ y L21 A15 @F #I0 pI #P0 pP cI #I0 =I
+ h #I4
+L21
+ y L22 A12 @I #I0 !I
+ h #I0
+L22
+*/
+
+int
+main(int argc, char *argv[])
+{
+ int v[1];
+ int (*p)[];
+ int (*f1)(int ,char *[]);
+ int (*f2)(int ,char *[]);
+
+ v[0] = 0;
+ p = &v;
+ f1 = &main;
+ f2 = main;
+ if (argc == 0)
+ return 1;
+ if ((****main)(0, 0))
+ return 2;
+ if ((****f1)(0, 0))
+ return 3;
+ if ((****f2)(0, 0))
+ return 4;
+ if (!(*p)[0])
+ return 0;
+
+ return (*++p)[0] || p[1][0];
+}