Module Name: src Committed By: rillig Date: Sun Jun 27 19:59:23 UTC 2021
Modified Files: src/tests/usr.bin/xlint/lint1: c11_generic_expression.c c11_generic_expression.exp Log Message: tests/lint: add test for _Generic with incompatible return types To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 \ src/tests/usr.bin/xlint/lint1/c11_generic_expression.c \ src/tests/usr.bin/xlint/lint1/c11_generic_expression.exp Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/usr.bin/xlint/lint1/c11_generic_expression.c diff -u src/tests/usr.bin/xlint/lint1/c11_generic_expression.c:1.1 src/tests/usr.bin/xlint/lint1/c11_generic_expression.c:1.2 --- src/tests/usr.bin/xlint/lint1/c11_generic_expression.c:1.1 Sun Jun 27 18:48:45 2021 +++ src/tests/usr.bin/xlint/lint1/c11_generic_expression.c Sun Jun 27 19:59:23 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: c11_generic_expression.c,v 1.1 2021/06/27 18:48:45 rillig Exp $ */ +/* $NetBSD: c11_generic_expression.c,v 1.2 2021/06/27 19:59:23 rillig Exp $ */ # 3 "c11_generic_expression.c" /* @@ -18,7 +18,7 @@ * generic-association. This is a compile-time error. */ const char * -classify_integer_without_default(double var) +classify_type_without_default(double var) { return _Generic(var, long double: "long double", @@ -33,7 +33,7 @@ classify_integer_without_default(double * In this case, the 'default' expression is selected. */ const char * -classify_integer_with_default(double var) +classify_type_with_default(double var) { return _Generic(var, long double: "long double", @@ -44,3 +44,16 @@ classify_integer_with_default(double var /* expect-8: argument 'var' unused */ /* expect-2: type mismatch (pointer to const char) and (double) *//* FIXME */ } + +/* + * The type of a _Generic expression is the one from the selected association. + */ +const char * +classify_char(char c) +{ + return _Generic(c, + char: "yes", + default: 0.0 + ); + /* expect-1: (pointer to const char) and integer (char) [183] */ +} Index: src/tests/usr.bin/xlint/lint1/c11_generic_expression.exp diff -u src/tests/usr.bin/xlint/lint1/c11_generic_expression.exp:1.1 src/tests/usr.bin/xlint/lint1/c11_generic_expression.exp:1.2 --- src/tests/usr.bin/xlint/lint1/c11_generic_expression.exp:1.1 Sun Jun 27 18:48:45 2021 +++ src/tests/usr.bin/xlint/lint1/c11_generic_expression.exp Sun Jun 27 19:59:23 2021 @@ -1,4 +1,5 @@ c11_generic_expression.c(27): error: return value type mismatch (pointer to const char) and (double) [211] -c11_generic_expression.c(21): warning: argument 'var' unused in function 'classify_integer_without_default' [231] +c11_generic_expression.c(21): warning: argument 'var' unused in function 'classify_type_without_default' [231] c11_generic_expression.c(43): error: return value type mismatch (pointer to const char) and (double) [211] -c11_generic_expression.c(36): warning: argument 'var' unused in function 'classify_integer_with_default' [231] +c11_generic_expression.c(36): warning: argument 'var' unused in function 'classify_type_with_default' [231] +c11_generic_expression.c(57): warning: illegal combination of pointer (pointer to const char) and integer (char) [183]