| /* { dg-do compile } */ |
| /* { dg-options "-O -fdiagnostics-show-caret -fplugin-arg-diagnostic_plugin_test_show_locus-color" } */ |
| |
| /* This is a collection of unittests for diagnostic_show_locus; |
| see the overview in diagnostic_plugin_test_show_locus.c. |
| |
| In particular, note the discussion of why we need a very long line here: |
| 01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 |
| and that we can't use macros in this file. */ |
| |
| void test_simple (void) |
| { |
| #if 0 |
| myvar = myvar.x; /* { dg-warning "test" } */ |
| |
| /* { dg-begin-multiline-output "" } |
| myvar = [32m[Kmyvar[m[K[01;35m[K.[m[K[34m[Kx[m[K; |
| [32m[K~~~~~[m[K[01;35m[K^[m[K[34m[K~[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| void test_simple_2 (void) |
| { |
| #if 0 |
| x = first_function () + second_function (); /* { dg-warning "test" } */ |
| |
| /* { dg-begin-multiline-output "" } |
| x = [32m[Kfirst_function ()[m[K [01;35m[K+[m[K [34m[Ksecond_function ()[m[K; |
| [32m[K~~~~~~~~~~~~~~~~~[m[K [01;35m[K^[m[K [34m[K~~~~~~~~~~~~~~~~~~[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| |
| void test_multiline (void) |
| { |
| #if 0 |
| x = (first_function () |
| + second_function ()); /* { dg-warning "test" } */ |
| |
| /* { dg-begin-multiline-output "" } |
| x = ([32m[Kfirst_function ()[m[K |
| [32m[K~~~~~~~~~~~~~~~~~[m[K |
| [01;35m[K+[m[K [34m[Ksecond_function ()[m[K); |
| [01;35m[K^[m[K [34m[K~~~~~~~~~~~~~~~~~~[m[K |
| [01;35m[K|[m[K |
| [01;35m[Klabel[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| void test_many_lines (void) |
| { |
| #if 0 |
| x = (first_function_with_a_very_long_name (lorem, ipsum, dolor, sit, amet, |
| consectetur, adipiscing, elit, |
| sed, eiusmod, tempor, |
| incididunt, ut, labore, et, |
| dolore, magna, aliqua) |
| + second_function_with_a_very_long_name (lorem, ipsum, dolor, sit, /* { dg-warning "test" } */ |
| amet, consectetur, |
| adipiscing, elit, sed, |
| eiusmod, tempor, incididunt, |
| ut, labore, et, dolore, |
| magna, aliqua)); |
| |
| /* { dg-begin-multiline-output "" } |
| x = ([32m[Kfirst_function_with_a_very_long_name (lorem, ipsum, dolor, sit, amet,[m[K |
| [32m[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[m[K |
| [32m[K|[m[K |
| [32m[Klabel 1[m[K |
| [32m[K consectetur, adipiscing, elit,[m[K |
| [32m[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[m[K |
| [32m[K sed, eiusmod, tempor,[m[K |
| [32m[K~~~~~~~~~~~~~~~~~~~~~[m[K |
| [32m[K incididunt, ut, labore, et,[m[K |
| [32m[K~~~~~~~~~~~~~~~~~~~~~~~~~~~[m[K |
| [32m[K dolore, magna, aliqua)[m[K |
| [32m[K~~~~~~~~~~~~~~~~~~~~~~[m[K |
| [01;35m[K+[m[K [34m[Ksecond_function_with_a_very_long_name (lorem, ipsum, dolor, sit, |
| [01;35m[K^[m[K [34m[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[m[K |
| [01;35m[K|[m[K [34m[K|[m[K |
| [01;35m[K|[m[K [34m[Klabel 2[m[K |
| [01;35m[Klabel 0[m[K |
| [34m[K amet, consectetur,[m[K |
| [34m[K~~~~~~~~~~~~~~~~~~[m[K |
| [34m[K adipiscing, elit, sed,[m[K |
| [34m[K~~~~~~~~~~~~~~~~~~~~~~[m[K |
| [34m[K eiusmod, tempor, incididunt,[m[K |
| [34m[K~~~~~~~~~~~~~~~~~~~~~~~~~~~~[m[K |
| [34m[K ut, labore, et, dolore,[m[K |
| [34m[K~~~~~~~~~~~~~~~~~~~~~~~[m[K |
| [34m[K magna, aliqua)[m[K); |
| [34m[K~~~~~~~~~~~~~~[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| void test_richloc_from_proper_range (void) |
| { |
| #if 0 |
| float f = 98.6f; /* { dg-warning "test" } */ |
| /* { dg-begin-multiline-output "" } |
| float f = [01;35m[K98.6f[m[K; |
| [01;35m[K^~~~~[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| void test_caret_within_proper_range (void) |
| { |
| #if 0 |
| float f = foo * bar; /* { dg-warning "17: test" } */ |
| /* { dg-begin-multiline-output "" } |
| float f = [01;35m[Kfoo * bar[m[K; |
| [01;35m[K~~~~^~~~~[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| void test_very_wide_line (void) |
| { |
| #if 0 |
| float x = foo * bar; /* { dg-warning "95: test" } */ |
| /* { dg-begin-multiline-output "" } |
| 0 0 0 0 0 0 1 |
| 4 5 6 7 8 9 0 |
| 6789012345678901234567890123456789012345678901234567890123456789012345 |
| [32m[Kx[m[K = [01;35m[Kfoo * bar[m[K; |
| [32m[K~[m[K [01;35m[K~~~~^~~~~[m[K |
| [32m[K|[m[K [01;35m[K|[m[K |
| [32m[Klabel 1[m[K [01;35m[Klabel 0[m[K |
| [32m[Kbar * foo[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| void test_multiple_carets (void) |
| { |
| #if 0 |
| x = x + y /* { dg-warning "8: test" } */ |
| /* { dg-begin-multiline-output "" } |
| x = [01;35m[Kx[m[K + [32m[Ky[m[K |
| [01;35m[KA[m[K [32m[KB[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| void test_caret_on_leading_whitespace (void) |
| { |
| #if 0 |
| ASSOCIATE (y => x) |
| y = 5 /* { dg-warning "6: test" } */ |
| /* { dg-begin-multiline-output "" } |
| ASSOCIATE (y =>[32m[K [m[Kx) |
| [32m[K2[m[K |
| [01;35m[K [m[Ky = 5 |
| [01;35m[K1[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| /* Unit test for rendering of insertion fixit hints |
| (example taken from PR 62316). */ |
| |
| void test_fixit_insert (void) |
| { |
| #if 0 |
| int a[2][2] = { 0, 1 , 2, 3 }; /* { dg-warning "insertion hints" } */ |
| /* { dg-begin-multiline-output "" } |
| int a[2][2] = { [01;35m[K0, 1[m[K , 2, 3 }; |
| [01;35m[K^~~~[m[K |
| [32m[K{[m[K [32m[K}[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| /* Unit test for rendering of "remove" fixit hints. */ |
| |
| void test_fixit_remove (void) |
| { |
| #if 0 |
| int a;; /* { dg-warning "example of a removal hint" } */ |
| /* { dg-begin-multiline-output "" } |
| int a;[01;35m[K;[m[K |
| [01;35m[K^[m[K |
| [31m[K-[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| /* Unit test for rendering of "replace" fixit hints. */ |
| |
| void test_fixit_replace (void) |
| { |
| #if 0 |
| gtk_widget_showall (dlg); /* { dg-warning "example of a replacement hint" } */ |
| /* { dg-begin-multiline-output "" } |
| [01;35m[Kgtk_widget_showall[m[K (dlg); |
| [01;35m[K^~~~~~~~~~~~~~~~~~[m[K |
| [32m[Kgtk_widget_show_all[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |
| |
| /* Unit test for rendering of fix-it hints that add new lines. */ |
| |
| void test_fixit_insert_newline (void) |
| { |
| #if 0 |
| switch (op) |
| { |
| case 'a': |
| x = a; |
| case 'b': /* { dg-warning "newline insertion" } */ |
| x = b; |
| } |
| /* { dg-begin-multiline-output "" } |
| x = a; |
| +[32m[K break;[m[K |
| [01;35m[Kcase 'b'[m[K: |
| [01;35m[K^~~~~~~~[m[K |
| { dg-end-multiline-output "" } */ |
| #endif |
| } |