Module Name: src Committed By: rillig Date: Fri Jun 9 11:22:31 UTC 2023
Modified Files: src/tests/usr.bin/indent: fmt_expr.c t_errors.sh src/usr.bin/indent: indent.c Log Message: indent: support C99 compound literals To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/indent/fmt_expr.c cvs rdiff -u -r1.33 -r1.34 src/tests/usr.bin/indent/t_errors.sh cvs rdiff -u -r1.345 -r1.346 src/usr.bin/indent/indent.c 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/fmt_expr.c diff -u src/tests/usr.bin/indent/fmt_expr.c:1.5 src/tests/usr.bin/indent/fmt_expr.c:1.6 --- src/tests/usr.bin/indent/fmt_expr.c:1.5 Fri Jun 9 09:45:55 2023 +++ src/tests/usr.bin/indent/fmt_expr.c Fri Jun 9 11:22:31 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: fmt_expr.c,v 1.5 2023/06/09 09:45:55 rillig Exp $ */ +/* $NetBSD: fmt_expr.c,v 1.6 2023/06/09 11:22:31 rillig Exp $ */ /* * Tests for all kinds of expressions that are not directly related to unary @@ -9,24 +9,24 @@ * lsym_unary_op.c */ -/* See lsym_offsetof.c. */ //indent input -void t(void) { - int n = malloc(offsetof(struct s, f) + 1); -} -//indent end - -//indent run -void -t(void) { - int n = malloc(offsetof(struct s, f) + 1); -} -//indent end + // See lsym_offsetof.c. + malloc(offsetof(struct s, f) + 1); + // C99 compound literals use initializer braces. + println((const char[3]){'-', c, '\0'}); + x = ((struct point){0, 0}).x; + + // XXX: GCC statement expressions are not supported yet. + int var = + ( + { + 1 + } + ) + ; -//indent input -{ for (ln = gnodes->first; ln != NULL; ln = ln->next) // $ FIXME: No space after the cast. *(GNode **) Vector_Push(&vec) = ln->datum; Index: src/tests/usr.bin/indent/t_errors.sh diff -u src/tests/usr.bin/indent/t_errors.sh:1.33 src/tests/usr.bin/indent/t_errors.sh:1.34 --- src/tests/usr.bin/indent/t_errors.sh:1.33 Mon Jun 5 08:22:00 2023 +++ src/tests/usr.bin/indent/t_errors.sh Fri Jun 9 11:22:31 2023 @@ -1,5 +1,5 @@ #! /bin/sh -# $NetBSD: t_errors.sh,v 1.33 2023/06/05 08:22:00 rillig Exp $ +# $NetBSD: t_errors.sh,v 1.34 2023/06/09 11:22:31 rillig Exp $ # # Copyright (c) 2021 The NetBSD Foundation, Inc. # All rights reserved. @@ -396,8 +396,8 @@ preprocessing_unrecognized_body() "$indent" code.c } -atf_test_case 'unbalanced_parentheses_1' -unbalanced_parentheses_1_body() +atf_test_case 'unbalanced_parentheses' +unbalanced_parentheses_body() { cat <<-\EOF > code.c int var = @@ -415,30 +415,8 @@ unbalanced_parentheses_1_body() "$indent" code.c } -atf_test_case 'unbalanced_parentheses_2' -unbalanced_parentheses_2_body() -{ - # '({...})' is the GCC extension "Statement expression". - cat <<-\EOF > code.c - int var = - ( - { - 1 - } - ) - ; - EOF - cat <<-\EOF > stderr.exp - error: code.c:3: Unbalanced parentheses - warning: code.c:6: Extra ')' - EOF - - atf_check -s 'exit:1' -e 'file:stderr.exp' \ - "$indent" code.c -} - -atf_test_case 'unbalanced_parentheses_3' -unbalanced_parentheses_3_body() +atf_test_case 'gcc_statement_expression' +gcc_statement_expression_body() { # '({...})' is the GCC extension "Statement expression". cat <<-\EOF > code.c @@ -508,48 +486,6 @@ 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){0, 0} -# 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:7: Unbalanced parentheses -warning: code.c:8: Extra ')' -warning: code.c:9: 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' @@ -584,10 +520,8 @@ atf_init_test_cases() atf_add_test_case 'unexpected_closing_brace_decl' atf_add_test_case 'preprocessing_overflow' atf_add_test_case 'preprocessing_unrecognized' - atf_add_test_case 'unbalanced_parentheses_1' - atf_add_test_case 'unbalanced_parentheses_2' - atf_add_test_case 'unbalanced_parentheses_3' + atf_add_test_case 'unbalanced_parentheses' + atf_add_test_case 'gcc_statement_expression' atf_add_test_case 'crash_comment_after_controlling_expression' atf_add_test_case 'comment_fits_in_one_line' - atf_add_test_case 'compound_literal' } Index: src/usr.bin/indent/indent.c diff -u src/usr.bin/indent/indent.c:1.345 src/usr.bin/indent/indent.c:1.346 --- src/usr.bin/indent/indent.c:1.345 Fri Jun 9 10:24:55 2023 +++ src/usr.bin/indent/indent.c Fri Jun 9 11:22:31 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: indent.c,v 1.345 2023/06/09 10:24:55 rillig Exp $ */ +/* $NetBSD: indent.c,v 1.346 2023/06/09 11:22:31 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -38,7 +38,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: indent.c,v 1.345 2023/06/09 10:24:55 rillig Exp $"); +__RCSID("$NetBSD: indent.c,v 1.346 2023/06/09 11:22:31 rillig Exp $"); #include <sys/param.h> #include <err.h> @@ -698,7 +698,7 @@ process_lbrace(void) } } - if (ps.nparen > 0) { + if (ps.nparen > 0 && ps.block_init_level == 0) { diag(1, "Unbalanced parentheses"); ps.nparen = 0; if (ps.spaced_expr_psym != psym_0) { @@ -739,7 +739,7 @@ process_lbrace(void) static void process_rbrace(void) { - if (ps.nparen > 0) { /* check for unclosed if, for, else. */ + if (ps.nparen > 0 && ps.block_init_level == 0) { diag(1, "Unbalanced parentheses"); ps.nparen = 0; ps.spaced_expr_psym = psym_0;