From patchwork Mon Sep 30 16:03:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Malcolm X-Patchwork-Id: 1991078 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=dOvbZEW0; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4XHQqz3Ffmz1xtM for ; Tue, 1 Oct 2024 02:04:31 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4A63038650D3 for ; Mon, 30 Sep 2024 16:04:29 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id EA4FC38650EE for ; Mon, 30 Sep 2024 16:03:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EA4FC38650EE Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EA4FC38650EE Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1727712225; cv=none; b=NdeUdLc0enEA6uucgwvy5z2g40F/GZc5uTs1s8Rx8LDKnNRVaQNCvTCQPYt/lGCTQMnXfzU7S9TGWFLokETH3soEGjGR1LqbtB5O6v+tN6W2JM4zoyaIZM9h9Qvi0Umktwca6FZky2LoeQiZ1VSzrIvYGibzr5wKBetw8/i/4sQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1727712225; c=relaxed/simple; bh=KBIuOELgZKyhN8TbRc9+B6bf6BmpYxLU1TOKkqIHpWU=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=OGn/woOOClri09xjKFbKWbtR89fSES3Er/LU1QBw2Y8y1s23FxnQsvKXLn6DsZzJ7cQWsiT3cAqVFA+ysJOHKzhN8URX4lJrGXTUUfzpRRZ90HeFSPOkskmF5gWC+5aFYVI7eKQX08JuLh6MBpdUDaXGWDKgQI5U8ph6LKyyUTM= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1727712218; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=iMBbrVm3L01jIGFII8vZm+60ftFt5IzK1wj7uh0bRzg=; b=dOvbZEW097MUNVKAL9O+s4OAypMM0UR2qr8/lcgUDBI1rvZxbZILwansHXSqb99g+XGb2R GgGgqA+vRj4bIipIeHmxhgg+JBP1AubdDuvqZLr59jMyiWxCAIgTWlLxYsc22Qy3m7cDyg UJ/dXnYCS5O3e9i3BJ76BmZlk61vsLQ= Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-204-SJNK7U4mNfasCsLLToE5SQ-1; Mon, 30 Sep 2024 12:03:35 -0400 X-MC-Unique: SJNK7U4mNfasCsLLToE5SQ-1 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (unknown [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id BCF811945108 for ; Mon, 30 Sep 2024 16:03:34 +0000 (UTC) Received: from t14s.localdomain.com (unknown [10.22.17.150]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 0DA821955DC7; Mon, 30 Sep 2024 16:03:33 +0000 (UTC) From: David Malcolm To: gcc-patches@gcc.gnu.org Cc: David Malcolm Subject: [pushed: r15-3978] diagnostics: return text buffer from test_show_locus [PR116613] Date: Mon, 30 Sep 2024 12:03:32 -0400 Message-ID: <20240930160332.2857241-1-dmalcolm@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SCC_10_SHORT_WORD_LINES, SCC_5_SHORT_WORD_LINES, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org As work towards supporting multiple diagnostic outputs (where each output has its own pretty_printer), avoid referencing dc.m_printer throughout the selftests of diagnostic-show-locus.cc. Instead have test_diagnostic_context::test_show_locus return the result buffer, hiding the specifics of which printer is in use in such test cases. No functional change intended. Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. Pushed to trunk as r15-3978-g9c14f9a9c19957. gcc/ChangeLog: PR other/116613 * diagnostic-show-locus.cc (selftest::test_diagnostic_show_locus_unknown_location): Move call to dc.test_show_locus into ASSERT_STREQ, and compare against its result, rather than explicitly using dc.m_printer. (selftest::test_one_liner_simple_caret): Likewise. (selftest::test_one_liner_no_column): Likewise. (selftest::test_one_liner_caret_and_range): Likewise. (selftest::test_one_liner_multiple_carets_and_ranges): Likewise. (selftest::test_one_liner_fixit_insert_before): Likewise. (selftest::test_one_liner_fixit_insert_after): Likewise. (selftest::test_one_liner_fixit_remove): Likewise. (selftest::test_one_liner_fixit_replace): Likewise. (selftest::test_one_liner_fixit_replace_non_equal_range): Likewise. (selftest::test_one_liner_fixit_replace_equal_secondary_range): Likewise. (selftest::test_one_liner_fixit_validation_adhoc_locations): Likewise. (selftest::test_one_liner_many_fixits_1): Likewise. (selftest::test_one_liner_many_fixits_2): Likewise. (selftest::test_one_liner_labels): Likewise. (selftest::test_one_liner_simple_caret_utf8): Likewise. (selftest::test_one_liner_multiple_carets_and_ranges_utf8): Likewise. (selftest::test_one_liner_fixit_insert_before_utf8): Likewise. (selftest::test_one_liner_fixit_insert_after_utf8): Likewise. (selftest::test_one_liner_fixit_remove_utf8): Likewise. (selftest::test_one_liner_fixit_replace_utf8): Likewise. (selftest::test_one_liner_fixit_replace_non_equal_range_utf8): Likewise. (selftest::test_one_liner_fixit_replace_equal_secondary_range_utf8): Likewise. (selftest::test_one_liner_fixit_validation_adhoc_locations_utf8): Likewise. (selftest::test_one_liner_many_fixits_1_utf8): Likewise. (selftest::test_one_liner_many_fixits_2_utf8): Likewise. (selftest::test_one_liner_labels_utf8): Likewise. (selftest::test_one_liner_colorized_utf8): Likewise. (selftest::test_add_location_if_nearby): Likewise. (selftest::test_diagnostic_show_locus_fixit_lines): Likewise. (selftest::test_overlapped_fixit_printing): Likewise. (selftest::test_overlapped_fixit_printing_utf8): Likewise. (selftest::test_overlapped_fixit_printing_utf8): Likewise. (selftest::test_overlapped_fixit_printing_2): Likewise. (selftest::test_fixit_insert_containing_newline): Likewise. (selftest::test_fixit_insert_containing_newline_2): Likewise. (selftest::test_fixit_replace_containing_newline): Likewise. (selftest::test_fixit_deletion_affecting_newline): Likewise. (selftest::test_tab_expansion): Likewise. (selftest::test_escaping_bytes_1): Likewise. (selftest::test_escaping_bytes_2): Likewise. (selftest::test_line_numbers_multiline_range): Likewise. * selftest-diagnostic.cc (selftest::test_diagnostic_context::test_show_locus): Return the formatted text of m_printer. * selftest-diagnostic.h (selftest::test_diagnostic_context::test_show_locus): Convert return type from void to const char *. Signed-off-by: David Malcolm --- gcc/diagnostic-show-locus.cc | 248 ++++++++++++----------------------- gcc/selftest-diagnostic.cc | 6 +- gcc/selftest-diagnostic.h | 2 +- 3 files changed, 88 insertions(+), 168 deletions(-) diff --git a/gcc/diagnostic-show-locus.cc b/gcc/diagnostic-show-locus.cc index b575dc51a78c..415de42cbc7b 100644 --- a/gcc/diagnostic-show-locus.cc +++ b/gcc/diagnostic-show-locus.cc @@ -3742,8 +3742,7 @@ test_diagnostic_show_locus_unknown_location () { test_diagnostic_context dc; rich_location richloc (line_table, UNKNOWN_LOCATION); - dc.test_show_locus (richloc); - ASSERT_STREQ ("", pp_formatted_text (dc.m_printer)); + ASSERT_STREQ ("", dc.test_show_locus (richloc)); } /* Verify that diagnostic_show_locus works sanely for various @@ -3764,10 +3763,9 @@ test_one_liner_simple_caret () test_diagnostic_context dc; location_t caret = linemap_position_for_column (line_table, 10); rich_location richloc (line_table, caret); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* No column information (column == 0). @@ -3779,9 +3777,8 @@ test_one_liner_no_column () test_diagnostic_context dc; location_t caret = linemap_position_for_column (line_table, 0); rich_location richloc (line_table, caret); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Caret and range. */ @@ -3795,10 +3792,9 @@ test_one_liner_caret_and_range () location_t finish = linemap_position_for_column (line_table, 15); location_t loc = make_location (caret, start, finish); rich_location richloc (line_table, loc); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ~~~^~~~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Multiple ranges and carets. */ @@ -3828,10 +3824,9 @@ test_one_liner_multiple_carets_and_ranges () rich_location richloc (line_table, foo); richloc.add_range (bar, SHOW_RANGE_WITH_CARET); richloc.add_range (field, SHOW_RANGE_WITH_CARET); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ~A~ ~B~ ~~C~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Insertion fix-it hint: adding an "&" to the front of "bar.field". */ @@ -3843,11 +3838,10 @@ test_one_liner_fixit_insert_before () location_t caret = linemap_position_for_column (line_table, 7); rich_location richloc (line_table, caret); richloc.add_fixit_insert_before ("&"); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^\n" " &\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Insertion fix-it hint: adding a "[0]" after "foo". */ @@ -3861,11 +3855,10 @@ test_one_liner_fixit_insert_after () location_t foo = make_location (start, start, finish); rich_location richloc (line_table, foo); richloc.add_fixit_insert_after ("[0]"); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~\n" " [0]\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Removal fix-it hint: removal of the ".field". @@ -3884,11 +3877,10 @@ test_one_liner_fixit_remove () /* Normal. */ { test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~~~~\n" " ------\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Test of adding a prefix. */ @@ -3896,11 +3888,10 @@ test_one_liner_fixit_remove () test_diagnostic_context dc; pp_prefixing_rule (dc.m_printer) = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE; pp_set_prefix (dc.m_printer, xstrdup ("TEST PREFIX:")); - dc.test_show_locus (richloc); ASSERT_STREQ ("TEST PREFIX: foo = bar.field;\n" "TEST PREFIX: ^~~~~~\n" "TEST PREFIX: ------\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Normal, with ruler. */ @@ -3908,14 +3899,13 @@ test_one_liner_fixit_remove () test_diagnostic_context dc; dc.m_source_printing.show_ruler_p = true; dc.m_source_printing.max_width = 104; - dc.test_show_locus (richloc); ASSERT_STREQ (" 0 0 0 0 0 0 0 0 0 1 \n" " 1 2 3 4 5 6 7 8 9 0 \n" " 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234\n" " foo = bar.field;\n" " ^~~~~~\n" " ------\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Test of adding a prefix, with ruler. */ @@ -3925,13 +3915,12 @@ test_one_liner_fixit_remove () dc.m_source_printing.max_width = 50; pp_prefixing_rule (dc.m_printer) = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE; pp_set_prefix (dc.m_printer, xstrdup ("TEST PREFIX:")); - dc.test_show_locus (richloc); ASSERT_STREQ ("TEST PREFIX: 1 2 3 4 5\n" "TEST PREFIX: 12345678901234567890123456789012345678901234567890\n" "TEST PREFIX: foo = bar.field;\n" "TEST PREFIX: ^~~~~~\n" "TEST PREFIX: ------\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Test of adding a prefix, with ruler and line numbers. */ @@ -3942,13 +3931,12 @@ test_one_liner_fixit_remove () dc.m_source_printing.show_line_numbers_p = true; pp_prefixing_rule (dc.m_printer) = DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE; pp_set_prefix (dc.m_printer, xstrdup ("TEST PREFIX:")); - dc.test_show_locus (richloc); ASSERT_STREQ ("TEST PREFIX: | 1 2 3 4 5\n" "TEST PREFIX: | 12345678901234567890123456789012345678901234567890\n" "TEST PREFIX: 1 | foo = bar.field;\n" "TEST PREFIX: | ^~~~~~\n" "TEST PREFIX: | ------\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -3963,11 +3951,10 @@ test_one_liner_fixit_replace () location_t field = make_location (start, start, finish); rich_location richloc (line_table, field); richloc.add_fixit_replace ("m_field"); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~~~\n" " m_field\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Replace fix-it hint: replacing "field" with "m_field", @@ -3985,14 +3972,13 @@ test_one_liner_fixit_replace_non_equal_range () range.m_start = start; range.m_finish = finish; richloc.add_fixit_replace (range, "m_field"); - dc.test_show_locus (richloc); /* The replacement range is not indicated in the annotation line, so it should be indicated via an additional underline. */ ASSERT_STREQ (" foo = bar.field;\n" " ^\n" " -----\n" " m_field\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Replace fix-it hint: replacing "field" with "m_field", @@ -4010,13 +3996,12 @@ test_one_liner_fixit_replace_equal_secondary_range () location_t field = make_location (start, start, finish); richloc.add_range (field); richloc.add_fixit_replace (field, "m_field"); - dc.test_show_locus (richloc); /* The replacement range is indicated in the annotation line, so it shouldn't be indicated via an additional underline. */ ASSERT_STREQ (" foo = bar.field;\n" " ^ ~~~~~\n" " m_field\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Verify that we can use ad-hoc locations when adding fixits to a @@ -4045,11 +4030,10 @@ test_one_liner_fixit_validation_adhoc_locations () ASSERT_EQ (1, richloc.get_num_fixit_hints ()); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~~~~~~~~ \n" " test\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Remove. */ @@ -4061,11 +4045,10 @@ test_one_liner_fixit_validation_adhoc_locations () ASSERT_EQ (1, richloc.get_num_fixit_hints ()); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~~~~~~~~ \n" " -----------------------------------------\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Replace. */ @@ -4077,11 +4060,10 @@ test_one_liner_fixit_validation_adhoc_locations () ASSERT_EQ (1, richloc.get_num_fixit_hints ()); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~~~~~~~~ \n" " test\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -4096,11 +4078,10 @@ test_one_liner_many_fixits_1 () for (int i = 0; i < 19; i++) richloc.add_fixit_insert_before ("a"); ASSERT_EQ (1, richloc.get_num_fixit_hints ()); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^\n" " aaaaaaaaaaaaaaaaaaa\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Ensure that we can add an arbitrary number of fix-it hints to a @@ -4118,11 +4099,10 @@ test_one_liner_many_fixits_2 () richloc.add_fixit_insert_before (loc, "a"); } ASSERT_EQ (19, richloc.get_num_fixit_hints ()); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^\n" " a a a a a a a a a a a a a a a a a a a\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Test of labeling the ranges within a rich_location. */ @@ -4154,22 +4134,20 @@ test_one_liner_labels () { test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~ ~~~ ~~~~~\n" " | | |\n" " 0 1 2\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Verify that we can disable label-printing. */ { test_diagnostic_context dc; dc.m_source_printing.show_labels_p = false; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~ ~~~ ~~~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -4183,14 +4161,13 @@ test_one_liner_labels () richloc.add_range (field, SHOW_RANGE_WITHOUT_CARET, &label2); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~ ~~~ ~~~~~\n" " | | |\n" " | | label 2\n" " | label 1\n" " label 0\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example of boundary conditions: label 0 and 1 have just enough clearance, @@ -4204,13 +4181,12 @@ test_one_liner_labels () richloc.add_range (field, SHOW_RANGE_WITHOUT_CARET, &label2); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~ ~~~ ~~~~~\n" " | | |\n" " | | c\n" " aaaaa bbbb\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example of out-of-order ranges (thus requiring a sort). */ @@ -4223,12 +4199,11 @@ test_one_liner_labels () richloc.add_range (foo, SHOW_RANGE_WITHOUT_CARET, &label2); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ~~~ ~~~ ^~~~~\n" " | | |\n" " 2 1 0\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Ensure we don't ICE if multiple ranges with labels are on @@ -4242,14 +4217,13 @@ test_one_liner_labels () richloc.add_range (bar, SHOW_RANGE_WITHOUT_CARET, &label2); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~\n" " |\n" " label 0\n" " label 1\n" " label 2\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example of out-of-order ranges (thus requiring a sort), where @@ -4277,7 +4251,6 @@ test_one_liner_labels () richloc.add_range (foo, SHOW_RANGE_WITHOUT_CARET, &label_2c); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ~~~ ~~~ ^~~~~\n" " | | |\n" @@ -4290,7 +4263,7 @@ test_one_liner_labels () " label 2a\n" " label 2b\n" " label 2c\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Verify that a NULL result from range_label::get_text is @@ -4300,10 +4273,9 @@ test_one_liner_labels () gcc_rich_location richloc (bar, &label, nullptr); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar.field;\n" " ^~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* TODO: example of formatted printing (needs to be in @@ -4368,14 +4340,13 @@ test_one_liner_simple_caret_utf8 () test_diagnostic_context dc; location_t caret = linemap_position_for_column (line_table, 18); rich_location richloc (line_table, caret); - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" "_field\xcf\x80" ";\n" " ^\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Caret and range. */ @@ -4388,14 +4359,13 @@ test_one_liner_caret_and_range_utf8 () location_t finish = linemap_position_for_column (line_table, 30); location_t loc = make_location (caret, start, finish); rich_location richloc (line_table, loc); - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" "_field\xcf\x80" ";\n" " ~~~~~^~~~~~~~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Multiple ranges and carets. */ @@ -4424,14 +4394,13 @@ test_one_liner_multiple_carets_and_ranges_utf8 () rich_location richloc (line_table, foo); richloc.add_range (bar, SHOW_RANGE_WITH_CARET); richloc.add_range (field, SHOW_RANGE_WITH_CARET); - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" "_field\xcf\x80" ";\n" " ~~~~A~ ~~~B~ ~~~~~C~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Insertion fix-it hint: adding an "&" to the front of "P_bar.field". */ @@ -4443,7 +4412,6 @@ test_one_liner_fixit_insert_before_utf8 () location_t caret = linemap_position_for_column (line_table, 12); rich_location richloc (line_table, caret); richloc.add_fixit_insert_before ("&"); - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4451,7 +4419,7 @@ test_one_liner_fixit_insert_before_utf8 () ";\n" " ^\n" " &\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Insertion fix-it hint: adding a "[0]" after "SS_foo". */ @@ -4465,7 +4433,6 @@ test_one_liner_fixit_insert_after_utf8 () location_t foo = make_location (start, start, finish); rich_location richloc (line_table, foo); richloc.add_fixit_insert_after ("[0]"); - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4473,7 +4440,7 @@ test_one_liner_fixit_insert_after_utf8 () ";\n" " ^~~~~~\n" " [0]\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Removal fix-it hint: removal of the ".SS_fieldP". */ @@ -4487,7 +4454,6 @@ test_one_liner_fixit_remove_utf8 () location_t dot = make_location (start, start, finish); rich_location richloc (line_table, dot); richloc.add_fixit_remove (); - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4495,7 +4461,7 @@ test_one_liner_fixit_remove_utf8 () ";\n" " ^~~~~~~~~~\n" " ----------\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Replace fix-it hint: replacing "SS_fieldP" with "m_SSfieldP". */ @@ -4509,7 +4475,6 @@ test_one_liner_fixit_replace_utf8 () location_t field = make_location (start, start, finish); rich_location richloc (line_table, field); richloc.add_fixit_replace ("m_\xf0\x9f\x98\x82_field\xcf\x80"); - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4518,7 +4483,7 @@ test_one_liner_fixit_replace_utf8 () " ^~~~~~~~~\n" " m_\xf0\x9f\x98\x82" "_field\xcf\x80\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Replace fix-it hint: replacing "SS_fieldP" with "m_SSfieldP", @@ -4536,7 +4501,6 @@ test_one_liner_fixit_replace_non_equal_range_utf8 () range.m_start = start; range.m_finish = finish; richloc.add_fixit_replace (range, "m_\xf0\x9f\x98\x82_field\xcf\x80"); - dc.test_show_locus (richloc); /* The replacement range is not indicated in the annotation line, so it should be indicated via an additional underline. */ ASSERT_STREQ (" \xf0\x9f\x98\x82" @@ -4548,7 +4512,7 @@ test_one_liner_fixit_replace_non_equal_range_utf8 () " ---------\n" " m_\xf0\x9f\x98\x82" "_field\xcf\x80\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Replace fix-it hint: replacing "SS_fieldP" with "m_SSfieldP", @@ -4566,7 +4530,6 @@ test_one_liner_fixit_replace_equal_secondary_range_utf8 () location_t field = make_location (start, start, finish); richloc.add_range (field); richloc.add_fixit_replace (field, "m_\xf0\x9f\x98\x82_field\xcf\x80"); - dc.test_show_locus (richloc); /* The replacement range is indicated in the annotation line, so it shouldn't be indicated via an additional underline. */ ASSERT_STREQ (" \xf0\x9f\x98\x82" @@ -4577,7 +4540,7 @@ test_one_liner_fixit_replace_equal_secondary_range_utf8 () " ^ ~~~~~~~~~\n" " m_\xf0\x9f\x98\x82" "_field\xcf\x80\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Verify that we can use ad-hoc locations when adding fixits to a @@ -4606,7 +4569,6 @@ test_one_liner_fixit_validation_adhoc_locations_utf8 () ASSERT_EQ (1, richloc.get_num_fixit_hints ()); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4614,7 +4576,7 @@ test_one_liner_fixit_validation_adhoc_locations_utf8 () ";\n" " ^~~~~~~~~~~~~~~~ \n" " test\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Remove. */ @@ -4626,7 +4588,6 @@ test_one_liner_fixit_validation_adhoc_locations_utf8 () ASSERT_EQ (1, richloc.get_num_fixit_hints ()); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4634,7 +4595,7 @@ test_one_liner_fixit_validation_adhoc_locations_utf8 () ";\n" " ^~~~~~~~~~~~~~~~ \n" " -------------------------------------\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Replace. */ @@ -4646,7 +4607,6 @@ test_one_liner_fixit_validation_adhoc_locations_utf8 () ASSERT_EQ (1, richloc.get_num_fixit_hints ()); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4654,7 +4614,7 @@ test_one_liner_fixit_validation_adhoc_locations_utf8 () ";\n" " ^~~~~~~~~~~~~~~~ \n" " test\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -4669,7 +4629,6 @@ test_one_liner_many_fixits_1_utf8 () for (int i = 0; i < 19; i++) richloc.add_fixit_insert_before (i & 1 ? "@" : "\xcf\x80"); ASSERT_EQ (1, richloc.get_num_fixit_hints ()); - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4678,7 +4637,7 @@ test_one_liner_many_fixits_1_utf8 () " ^\n" " \xcf\x80@\xcf\x80@\xcf\x80@\xcf\x80@\xcf\x80@" "\xcf\x80@\xcf\x80@\xcf\x80@\xcf\x80@\xcf\x80\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Ensure that we can add an arbitrary number of fix-it hints to a @@ -4700,7 +4659,6 @@ test_one_liner_many_fixits_2_utf8 () } ASSERT_EQ (nlocs, richloc.get_num_fixit_hints ()); - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4709,7 +4667,7 @@ test_one_liner_many_fixits_2_utf8 () " ^\n" " \xcf\x80 @ \xcf\x80 @ \xcf\x80 @ \xcf\x80 @ \xcf\x80 @" " \xcf\x80 @ \xcf\x80 @ \xcf\x80 @ \xcf\x80 @ \xcf\x80\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Test of labeling the ranges within a rich_location. */ @@ -4750,7 +4708,6 @@ test_one_liner_labels_utf8 () { test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4762,7 +4719,7 @@ test_one_liner_labels_utf8 () " \xf0\x9f\x98\x82\xf0\x9f\x98\x82\xcf\x80" " \xf0\x9f\x98\x82\xcf\x80\xf0\x9f\x98\x82" "\xf0\x9f\x98\x82\xcf\x80\xcf\x80\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -4777,8 +4734,6 @@ test_one_liner_labels_utf8 () richloc.add_range (field, SHOW_RANGE_WITHOUT_CARET, &label2); test_diagnostic_context dc; - dc.test_show_locus (richloc); - ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4789,7 +4744,7 @@ test_one_liner_labels_utf8 () " | | label 2\xcf\x80\n" " | label 1\xcf\x80\n" " label 0\xf0\x9f\x98\x82\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example of boundary conditions: label 0 and 1 have just enough clearance, @@ -4803,7 +4758,6 @@ test_one_liner_labels_utf8 () richloc.add_range (field, SHOW_RANGE_WITHOUT_CARET, &label2); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" \xf0\x9f\x98\x82" "_foo = \xcf\x80" "_bar.\xf0\x9f\x98\x82" @@ -4814,7 +4768,7 @@ test_one_liner_labels_utf8 () " | | c\n" " aaaaa\xf0\x9f\x98\x82\xcf\x80" " bb\xf0\x9f\x98\x82\xf0\x9f\x98\x82\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example of escaping the source lines. */ @@ -4830,19 +4784,17 @@ test_one_liner_labels_utf8 () { test_diagnostic_context dc; dc.set_escape_format (DIAGNOSTICS_ESCAPE_FORMAT_UNICODE); - dc.test_show_locus (richloc); ASSERT_STREQ (" _foo = _bar._field;\n" " ^~~~~~~~~~~~~ ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~\n" " | | |\n" " label 0\xf0\x9f\x98\x82" /* ... */ " label 1\xcf\x80" /* ...................*/ " label 2\xcf\x80\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } { test_diagnostic_context dc; dc.set_escape_format (DIAGNOSTICS_ESCAPE_FORMAT_BYTES); - dc.test_show_locus (richloc); ASSERT_STREQ (" <9f><98><82>_foo = <80>_bar.<9f><98><82>_field<80>;\n" " ^~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" @@ -4850,7 +4802,7 @@ test_one_liner_labels_utf8 () " label 0\xf0\x9f\x98\x82" /* ... */ " label 1\xcf\x80" /* ..........................*/ " label 2\xcf\x80\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } } @@ -4865,11 +4817,10 @@ test_one_liner_colorized_utf8 () diagnostic_color_init (&dc, DIAGNOSTICS_COLOR_YES); const location_t pi = linemap_position_for_column (line_table, 12); rich_location richloc (line_table, pi); - dc.test_show_locus (richloc); /* In order to avoid having the test depend on exactly how the colorization was effected, just confirm there are two pi characters in the output. */ - const char *result = pp_formatted_text (dc.m_printer); + const char *result = dc.test_show_locus (richloc); const char *null_term = result + strlen (result); const char *first_pi = strstr (result, "\xcf\x80"); ASSERT_TRUE (first_pi && first_pi <= null_term - 2); @@ -4975,10 +4926,9 @@ test_add_location_if_nearby (const line_table_case &case_) matching_open_brace_1_18); ASSERT_TRUE (added); ASSERT_EQ (2, richloc.get_num_locations ()); - dc.test_show_locus (richloc); ASSERT_STREQ (" struct same_line { double x; double y; ;\n" " ~ ^\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Test of add_location_if_nearby on a different line to the @@ -5041,11 +4991,10 @@ test_diagnostic_show_locus_fixit_lines (const line_table_case &case_) rich_location richloc (line_table, colon); richloc.add_fixit_insert_before (x, "."); richloc.add_fixit_replace (colon, "="); - dc.test_show_locus (richloc); ASSERT_STREQ (" struct point origin = {x: 0.0,\n" " ^\n" " .=\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* The multiline case. The caret for the rich_location is on line 6; @@ -5061,7 +5010,6 @@ test_diagnostic_show_locus_fixit_lines (const line_table_case &case_) rich_location richloc (line_table, colon); richloc.add_fixit_insert_before (y, "."); richloc.add_fixit_replace (colon, "="); - dc.test_show_locus (richloc); ASSERT_STREQ ("FILENAME:3:24:\n" " y\n" " .\n" @@ -5069,7 +5017,7 @@ test_diagnostic_show_locus_fixit_lines (const line_table_case &case_) " : 0.0};\n" " ^\n" " =\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* As above, but verify the behavior of multiple line spans @@ -5084,14 +5032,13 @@ test_diagnostic_show_locus_fixit_lines (const line_table_case &case_) richloc.add_fixit_replace (colon, "="); test_diagnostic_context dc; dc.m_source_printing.show_line_numbers_p = true; - dc.test_show_locus (richloc); ASSERT_STREQ (" 3 | y\n" " | .\n" "......\n" " 6 | : 0.0};\n" " | ^\n" " | =\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -5295,12 +5242,11 @@ test_overlapped_fixit_printing (const line_table_case &case_) richloc.add_fixit_replace (close_paren, "> ("); richloc.add_fixit_insert_after (")"); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo *f = (foo *)ptr->field;\n" " ^~~~~~~~~~\n" " -----------------\n" " const_cast (ptr->field)\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); /* Unit-test the line_corrections machinery. */ char_display_policy policy (make_char_policy (dc, richloc)); @@ -5365,13 +5311,12 @@ test_overlapped_fixit_printing (const line_table_case &case_) richloc.add_fixit_replace (close_paren, ") ("); richloc.add_fixit_insert_after (")"); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo *f = (foo *)ptr->field;\n" " ^~~~~~~~~~\n" " -\n" " CAST (-\n" " ) ( )\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example where none are consolidated during printing. */ @@ -5382,13 +5327,12 @@ test_overlapped_fixit_printing (const line_table_case &case_) richloc.add_fixit_replace (close_paren, ") ("); richloc.add_fixit_insert_after (")"); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo *f = (foo *)ptr->field;\n" " ^~~~~~~~~~\n" " -\n" " CST ( -\n" " ) ( )\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example of deletion fix-it hints. */ @@ -5403,12 +5347,11 @@ test_overlapped_fixit_printing (const line_table_case &case_) rather than by line_corrections. */ ASSERT_EQ (1, richloc.get_num_fixit_hints ()); - dc.test_show_locus (richloc); ASSERT_STREQ (" foo *f = (foo *)ptr->field;\n" " ^~~~~~~~~~\n" " -------\n" " (bar *)\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example of deletion fix-it hints that would overlap. */ @@ -5423,12 +5366,11 @@ test_overlapped_fixit_printing (const line_table_case &case_) ASSERT_EQ (2, richloc.get_num_fixit_hints ()); /* But the corrections are. */ - dc.test_show_locus (richloc); ASSERT_STREQ (" foo *f = (foo *)ptr->field;\n" " ^~~~~~~~~~\n" " -----------------\n" " (longer *)(foo *)\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example of insertion fix-it hints that would overlap. */ @@ -5441,12 +5383,11 @@ test_overlapped_fixit_printing (const line_table_case &case_) /* The first insertion is long enough that if printed naively, it would overlap with the second. Verify that they are printed as a single replacement. */ - dc.test_show_locus (richloc); ASSERT_STREQ (" foo *f = (foo *)ptr->field;\n" " ^~~~~~~~~~\n" " -------\n" " LONGER THAN THE CAST(foo *)TEST\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -5507,7 +5448,6 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) richloc.add_fixit_replace (close_paren, "> ("); richloc.add_fixit_insert_after (")"); - dc.test_show_locus (richloc); ASSERT_STREQ (" f\xf0\x9f\x98\x82" " *f = (f\xf0\x9f\x98\x82" " *)ptr->field\xcf\x80" @@ -5517,7 +5457,7 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) " const_cast (ptr->field\xcf\x80" ")\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); /* Unit-test the line_corrections machinery. */ char_display_policy policy (make_char_policy (dc, richloc)); @@ -5583,7 +5523,6 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) richloc.add_fixit_replace (close_paren, ") ("); richloc.add_fixit_insert_after (")"); - dc.test_show_locus (richloc); ASSERT_STREQ (" f\xf0\x9f\x98\x82" " *f = (f\xf0\x9f\x98\x82" " *)ptr->field\xcf\x80" @@ -5592,7 +5531,7 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) " -\n" " CAST (-\n" " ) ( )\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example where none are consolidated during printing. */ @@ -5603,7 +5542,6 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) richloc.add_fixit_replace (close_paren, ") ("); richloc.add_fixit_insert_after (")"); - dc.test_show_locus (richloc); ASSERT_STREQ (" f\xf0\x9f\x98\x82" " *f = (f\xf0\x9f\x98\x82" " *)ptr->field\xcf\x80" @@ -5612,7 +5550,7 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) " -\n" " CST ( -\n" " ) ( )\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example of deletion fix-it hints. */ @@ -5627,7 +5565,6 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) rather than by line_corrections. */ ASSERT_EQ (1, richloc.get_num_fixit_hints ()); - dc.test_show_locus (richloc); ASSERT_STREQ (" f\xf0\x9f\x98\x82" " *f = (f\xf0\x9f\x98\x82" " *)ptr->field\xcf\x80" @@ -5636,7 +5573,7 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) " -------\n" " (bar\xf0\x9f\x98\x82" " *)\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example of deletion fix-it hints that would overlap. */ @@ -5651,7 +5588,6 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) ASSERT_EQ (2, richloc.get_num_fixit_hints ()); /* But the corrections are. */ - dc.test_show_locus (richloc); ASSERT_STREQ (" f\xf0\x9f\x98\x82" " *f = (f\xf0\x9f\x98\x82" " *)ptr->field\xcf\x80" @@ -5661,7 +5597,7 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) " (long\xf0\x9f\x98\x82" " *)(f\xf0\x9f\x98\x82" " *)\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Example of insertion fix-it hints that would overlap. */ @@ -5675,7 +5611,6 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) /* The first insertion is long enough that if printed naively, it would overlap with the second. Verify that they are printed as a single replacement. */ - dc.test_show_locus (richloc); ASSERT_STREQ (" f\xf0\x9f\x98\x82" " *f = (f\xf0\x9f\x98\x82" " *)ptr->field\xcf\x80" @@ -5685,7 +5620,7 @@ test_overlapped_fixit_printing_utf8 (const line_table_case &case_) " L\xf0\x9f\x98\x82" "NGER THAN THE CAST(f\xf0\x9f\x98\x82" " *)TEST\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -5751,11 +5686,10 @@ test_overlapped_fixit_printing_2 (const line_table_case &case_) ASSERT_EQ (column_range (21, 21), get_printed_columns (fc, policy, hint_1)); /* Verify that they're printed correctly. */ - dc.test_show_locus (richloc); ASSERT_STREQ (" int a5[][0][0] = { 1, 2 };\n" " ^\n" " } {\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Various overlapping insertions, some occurring "out of order" @@ -5773,12 +5707,12 @@ test_overlapped_fixit_printing_2 (const line_table_case &case_) richloc.add_fixit_insert_before (col_21, "}"); richloc.add_fixit_insert_before (col_1, "{"); richloc.add_fixit_insert_before (col_25, "}"); - dc.test_show_locus (richloc); + ASSERT_STREQ (" int a5[][0][0] = { 1, 2 };\n" " ^\n" " { -----\n" " {{1}}}}, {{{2 }}\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -5816,24 +5750,22 @@ test_fixit_insert_containing_newline (const line_table_case &case_) /* Without line numbers. */ { test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" x = a;\n" "+ break;\n" " case 'b':\n" " ^~~~~~~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* With line numbers. */ { test_diagnostic_context dc; dc.m_source_printing.show_line_numbers_p = true; - dc.test_show_locus (richloc); ASSERT_STREQ (" 2 | x = a;\n" " +++ |+ break;\n" " 3 | case 'b':\n" " | ^~~~~~~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -5844,10 +5776,9 @@ test_fixit_insert_containing_newline (const line_table_case &case_) richloc.add_fixit_insert_before (case_start, "break;\n"); ASSERT_TRUE (richloc.seen_impossible_fixit_p ()); test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" case 'b':\n" " ^~~~~~~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -5892,14 +5823,13 @@ test_fixit_insert_containing_newline_2 (const line_table_case &case_) { test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ ("FILENAME:1:1:\n" "+#include \n" " test (int ch)\n" "FILENAME:3:2:\n" " putchar (ch);\n" " ^~~~~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* With line-numbering, the line spans are close enough to be @@ -5907,13 +5837,12 @@ test_fixit_insert_containing_newline_2 (const line_table_case &case_) { test_diagnostic_context dc; dc.m_source_printing.show_line_numbers_p = true; - dc.test_show_locus (richloc); ASSERT_STREQ (" +++ |+#include \n" " 1 | test (int ch)\n" " 2 | {\n" " 3 | putchar (ch);\n" " | ^~~~~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -5950,10 +5879,9 @@ test_fixit_replace_containing_newline (const line_table_case &case_) return; test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar ();\n" " ^\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Fix-it hint, attempting to delete a newline. @@ -5994,12 +5922,11 @@ test_fixit_deletion_affecting_newline (const line_table_case &case_) return; test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" foo = bar (\n" " ~^\n" " );\n" " ~ \n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } static void @@ -6039,10 +5966,9 @@ test_tab_expansion (const line_table_case &case_) rich_location richloc (line_table, linemap_position_for_column (line_table, first_non_ws_byte_col)); - dc.test_show_locus (richloc); ASSERT_STREQ (" This: ` ' is a tab.\n" " ^\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Confirm the display width was tracked correctly across the internal tab @@ -6053,10 +5979,9 @@ test_tab_expansion (const line_table_case &case_) rich_location richloc (line_table, linemap_position_for_column (line_table, right_quote_byte_col)); - dc.test_show_locus (richloc); ASSERT_STREQ (" This: ` ' is a tab.\n" " ^\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -6091,28 +6016,25 @@ test_escaping_bytes_1 (const line_table_case &case_) { test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" before \1\2\3\v\x80\xff""after\n" " ^ ~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } richloc.set_escape_on_output (true); { test_diagnostic_context dc; dc.set_escape_format (DIAGNOSTICS_ESCAPE_FORMAT_UNICODE); - dc.test_show_locus (richloc); ASSERT_STREQ (" before<80>after\n" " ^~~~~~~~ ~~~~~~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } { test_diagnostic_context dc; dc.set_escape_format (DIAGNOSTICS_ESCAPE_FORMAT_BYTES); - dc.test_show_locus (richloc); ASSERT_STREQ (" before<00><01><02><03><0b><80>after\n" " ^~~~ ~~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -6144,27 +6066,24 @@ test_escaping_bytes_2 (const line_table_case &case_) { test_diagnostic_context dc; - dc.test_show_locus (richloc); ASSERT_STREQ (" after\n" " ^\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } richloc.set_escape_on_output (true); { test_diagnostic_context dc; dc.set_escape_format (DIAGNOSTICS_ESCAPE_FORMAT_UNICODE); - dc.test_show_locus (richloc); ASSERT_STREQ (" after\n" " ^~~~~~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } { test_diagnostic_context dc; dc.set_escape_format (DIAGNOSTICS_ESCAPE_FORMAT_BYTES); - dc.test_show_locus (richloc); ASSERT_STREQ (" <00>after\n" " ^~~~\n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } } @@ -6203,14 +6122,13 @@ test_line_numbers_multiline_range () dc.m_source_printing.show_line_numbers_p = true; dc.m_source_printing.min_margin_width = 0; gcc_rich_location richloc (loc); - dc.test_show_locus (richloc); ASSERT_STREQ (" 9 | this is line 9\n" " | ~~~~~~\n" "10 | this is line 10\n" " | ~~~~~^~~~~~~~~~\n" "11 | this is line 11\n" " | ~~~~ \n", - pp_formatted_text (dc.m_printer)); + dc.test_show_locus (richloc)); } /* Run all of the selftests within this file. */ diff --git a/gcc/selftest-diagnostic.cc b/gcc/selftest-diagnostic.cc index e51210926184..4e9ee921b044 100644 --- a/gcc/selftest-diagnostic.cc +++ b/gcc/selftest-diagnostic.cc @@ -79,14 +79,16 @@ test_diagnostic_context::report (diagnostic_t kind, return result; } -/* Print RICHLOC's source and annotations to this context's m_printer. */ +/* Print RICHLOC's source and annotations to this context's m_printer. + Return the text buffer from the printer. */ -void +const char * test_diagnostic_context::test_show_locus (rich_location &richloc) { gcc_assert (m_printer); diagnostic_source_print_policy source_policy (*this); source_policy.print (*m_printer, richloc, DK_ERROR, nullptr); + return pp_formatted_text (m_printer); } } // namespace selftest diff --git a/gcc/selftest-diagnostic.h b/gcc/selftest-diagnostic.h index 008db3e1617e..b1bc662bf671 100644 --- a/gcc/selftest-diagnostic.h +++ b/gcc/selftest-diagnostic.h @@ -53,7 +53,7 @@ class test_diagnostic_context : public diagnostic_context int option, const char * fmt, ...) ATTRIBUTE_GCC_DIAG(6,7); - void test_show_locus (rich_location &richloc); + const char *test_show_locus (rich_location &richloc); }; } // namespace selftest