Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/tests/usr.bin/xlint/lint1 tests/lint: rework tests for type ...



details:   https://anonhg.NetBSD.org/src/rev/48edd7ac4536
branches:  trunk
changeset: 377226:48edd7ac4536
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sat Jul 01 20:57:37 2023 +0000

description:
tests/lint: rework tests for type names

diffstat:

 tests/usr.bin/xlint/lint1/decl_direct_abstract.c |  107 ++++++++++++----------
 1 files changed, 58 insertions(+), 49 deletions(-)

diffs (125 lines):

diff -r 770af3fc4a04 -r 48edd7ac4536 tests/usr.bin/xlint/lint1/decl_direct_abstract.c
--- a/tests/usr.bin/xlint/lint1/decl_direct_abstract.c  Sat Jul 01 15:16:46 2023 +0000
+++ b/tests/usr.bin/xlint/lint1/decl_direct_abstract.c  Sat Jul 01 20:57:37 2023 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: decl_direct_abstract.c,v 1.8 2023/03/28 14:44:34 rillig Exp $  */
+/*     $NetBSD: decl_direct_abstract.c,v 1.9 2023/07/01 20:57:37 rillig Exp $  */
 # 3 "decl_direct_abstract.c"
 
 /*
@@ -11,58 +11,67 @@
 
 /* lint1-extra-flags: -X 351 */
 
-/*
- * The following tests do not use int, to avoid confusion with the implicit
- * return type.
- */
-
-char func0001(short (*)(long));
-
-/* GCC says 'char (*)(short int (*)(long int))' */
-/* Clang says 'char (short (*)(long))' */
-/* cdecl says 'function (pointer to function (long) returning short) returning char' */
-/* expect+1: error: cannot initialize 'double' from 'pointer to function(pointer to function(long) returning short) returning char' [185] */
-double type_of_func0001 = func0001;
-
-char func0002(short *(long));
-
-/* GCC says 'char (*)(short int * (*)(long int))' */
-/* Clang says 'char (short *(*)(long))' */
-/* cdecl says 'syntax error' */
-/* FIXME: lint is wrong, it discards the 'short *' */
-/* expect+1: error: cannot initialize 'double' from 'pointer to function(long) returning char' [185] */
-double type_of_func0002 = func0002;
-
-void c99_6_7_6_example_a(int);
-void c99_6_7_6_example_b(int *);
-void c99_6_7_6_example_c(int *[3]);
-void c99_6_7_6_example_d(int (*)[3]);
-void c99_6_7_6_example_e(int (*)[*]);
-void c99_6_7_6_example_f(int *());
-void c99_6_7_6_example_g(int (*)(void));
-void c99_6_7_6_example_h(int (*const[])(unsigned int, ...));
-
 struct incompatible {
        int member;
 } x;
 
-/* expect+1: ... 'pointer to function(int) returning void' ... */
-double type_of_c99_6_7_6_example_a = c99_6_7_6_example_a;
-/* expect+1: ... 'pointer to function(pointer to int) returning void' ... */
-double type_of_c99_6_7_6_example_b = c99_6_7_6_example_b;
-/* expect+1: ... 'pointer to function(pointer to pointer to int) returning void' ... */
-double type_of_c99_6_7_6_example_c = c99_6_7_6_example_c;
-/* expect+1: ... 'pointer to function(pointer to array[3] of int) returning void' ... */
-double type_of_c99_6_7_6_example_d = c99_6_7_6_example_d;
-/* expect+1: ... 'pointer to function(pointer to array[unknown_size] of int) returning void' ... */
-double type_of_c99_6_7_6_example_e = c99_6_7_6_example_e;
-/* Wrong type before decl.c 1.256 from 2022-04-01. */
-/* expect+1: ... 'pointer to function(pointer to function() returning pointer to int) returning void' ... */
-double type_of_c99_6_7_6_example_f = c99_6_7_6_example_f;
-/* expect+1: ... 'pointer to function(pointer to function(void) returning int) returning void' ... */
-double type_of_c99_6_7_6_example_g = c99_6_7_6_example_g;
-/* expect+1: ... 'pointer to function(pointer to const pointer to function(unsigned int, ...) returning int) returning void' ... */
-double type_of_c99_6_7_6_example_h = c99_6_7_6_example_h;
+void
+c99_6_7_6_examples(void)
+{
+       /* expect+1: ... 'int' ... */
+       x = (int)x;
+       /* expect+1: ... 'pointer to int' ... */
+       x = (int *)x;
+       /* expect+1: ... 'array[3] of pointer to int' ... */
+       x = (int *[3])x;
+       /* expect+1: ... 'pointer to array[3] of int' ... */
+       x = (int (*)[3])x;
+       /* expect+1: ... 'pointer to array[unknown_size] of int' ... */
+       x = (int (*)[*])x;
+       /* expect+1: ... 'function() returning pointer to int' ... */
+       x = (int *())x;
+       /* expect+1: ... 'pointer to function(void) returning int' ... */
+       x = (int (*)(void))x;
+       /* expect+1: ... 'array[unknown_size] of const pointer to function(unsigned int, ...) returning int' ... */
+       x = (int (*const[])(unsigned int, ...))x;
+}
+
+void
+function_returning_char(void)
+{
+       // GCC adds a pointer, then says 'char (*)(short int (*)(long int))'.
+       // Clang says 'char (short (*)(long))'.
+       /* cdecl says 'function (pointer to function (long) returning short) returning char' */
+       /* FIXME: It's a function type, not only 'short'. */
+       /* expect+1: ... 'short' ... */
+       x = (char(short (*)(long)))x;
+
+       /* expect+1: warning: nested 'extern' declaration of 'f1' [352] */
+       char f1(short (*)(long));
+
+       /* expect+1: ... 'pointer to function(pointer to function(long) returning short) returning char' ... */
+       x = f1;
+}
+
+void
+function_returning_pointer(void)
+{
+       // GCC says 'error: cast specifies function type'.
+       // Clang says 'char (short *(*)(long))'.
+       /* expect+1: error: invalid cast from 'struct incompatible' to 'short' [147] */
+       x = (char(short *(long)))x;
+
+       /* expect+1: warning: nested 'extern' declaration of 'f2' [352] */
+       char f2(short *(long));
+
+       // GCC adds two pointers, saying 'char (*)(short int * (*)(long int))'.
+       // Clang says 'char (short *(*)(long))' */
+       /* cdecl says 'syntax error' */
+       /* FIXME: lint is wrong, it discards the 'short *' */
+       /* expect+1: ... 'pointer to function(long) returning char' ... */
+       x = f2;
+}
+
 
 void int_array(int[]);
 void int_array_3(int[3]);



Home | Main Index | Thread Index | Old Index