Module Name: src Committed By: rillig Date: Sun Feb 13 11:07:48 UTC 2022
Modified Files: src/tests/usr.bin/indent: lsym_lbrace.c lsym_lparen_or_lbracket.c t_errors.sh Log Message: tests/indent: demonstrate the poor handling of compound literals To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/indent/lsym_lbrace.c cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c cvs rdiff -u -r1.22 -r1.23 src/tests/usr.bin/indent/t_errors.sh 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/indent/lsym_lbrace.c diff -u src/tests/usr.bin/indent/lsym_lbrace.c:1.2 src/tests/usr.bin/indent/lsym_lbrace.c:1.3 --- src/tests/usr.bin/indent/lsym_lbrace.c:1.2 Sat Nov 20 16:54:17 2021 +++ src/tests/usr.bin/indent/lsym_lbrace.c Sun Feb 13 11:07:48 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: lsym_lbrace.c,v 1.2 2021/11/20 16:54:17 rillig Exp $ */ +/* $NetBSD: lsym_lbrace.c,v 1.3 2022/02/13 11:07:48 rillig Exp $ */ /* $FreeBSD$ */ /* @@ -9,7 +9,7 @@ * * In a function body, '{' starts a block. * - * In an expression, '(type){' starts a compound expression that is typically + * In an expression, '(type){' starts a compound literal that is typically * used in an assignment to a struct or array. * * TODO: try to split this token into lsym_lbrace_block and lsym_lbrace_init. Index: src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c diff -u src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c:1.1 src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c:1.2 --- src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c:1.1 Thu Nov 18 21:19:19 2021 +++ src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c Sun Feb 13 11:07:48 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: lsym_lparen_or_lbracket.c,v 1.1 2021/11/18 21:19:19 rillig Exp $ */ +/* $NetBSD: lsym_lparen_or_lbracket.c,v 1.2 2022/02/13 11:07:48 rillig Exp $ */ /* $FreeBSD$ */ /* @@ -26,3 +26,5 @@ #indent end #indent run-equals-input + +/* See t_errors.sh, test case 'compound_literal'. */ Index: src/tests/usr.bin/indent/t_errors.sh diff -u src/tests/usr.bin/indent/t_errors.sh:1.22 src/tests/usr.bin/indent/t_errors.sh:1.23 --- src/tests/usr.bin/indent/t_errors.sh:1.22 Thu Nov 25 21:48:23 2021 +++ src/tests/usr.bin/indent/t_errors.sh Sun Feb 13 11:07:48 2022 @@ -1,5 +1,5 @@ #! /bin/sh -# $NetBSD: t_errors.sh,v 1.22 2021/11/25 21:48:23 rillig Exp $ +# $NetBSD: t_errors.sh,v 1.23 2022/02/13 11:07:48 rillig Exp $ # # Copyright (c) 2021 The NetBSD Foundation, Inc. # All rights reserved. @@ -495,6 +495,53 @@ EOF } +atf_test_case 'compound_literal' +compound_literal_body() +{ + # Test handling of compound literals (C99 6.5.2.5), as well as casts. + + cat <<EOF > code.c +void +function(void) +{ + origin = + ((int) + ((-1)* + (struct point){0,0} + ) + ); +} +EOF + + sed '/^#/d' <<EOF > expected.out +void +function(void) +{ + origin = + ((int) + ((-1) * + (struct point){ +# FIXME: the '{' is part of the expression, not a separate block. + 0, 0 +# FIXME: the '}' is part of the expression, not a separate block. + } +# FIXME: the ')' must be aligned with the corresponding '('. + ) + ); +} +EOF + sed '/^#/d' <<EOF > expected.err +# FIXME: The parentheses _are_ balanced, the '}' does not end the block. +error: code.c:9: Unbalanced parentheses +warning: code.c:10: Extra ')' +# FIXME: There is no line 12 in the input file. +warning: code.c:12: Extra ')' +EOF + + atf_check -s 'exit:1' -o 'file:expected.out' -e 'file:expected.err' \ + "$indent" -nfc1 -ci12 code.c -st +} + atf_init_test_cases() { atf_add_test_case 'option_unknown' @@ -532,4 +579,5 @@ atf_init_test_cases() atf_add_test_case 'unbalanced_parentheses_3' atf_add_test_case 'search_stmt_comment_segv' atf_add_test_case 'search_stmt_fits_in_one_line' + atf_add_test_case 'compound_literal' }