[Rust,front-end,v2,03/37] gccrs: Add Debug info testsuite

Message ID 20220824115956.737931-4-philip.herron@embecosm.com
State New
Headers
Series [Rust,front-end,v2,01/37] Use DW_ATE_UTF for the Rust 'char' type |

Commit Message

herron.philip@googlemail.com Aug. 24, 2022, 11:59 a.m. UTC
  From: Philip Herron <philip.herron@embecosm.com>

This testsuite is specifically about testcases which scan the asm debug
info for results.

Co-authored-by: Tom Tromey <tom@tromey.com>
---
 gcc/testsuite/rust/debug/chartype.rs          | 10 ++++++
 .../rust/debug/custom_link_section.rs         | 13 ++++++++
 gcc/testsuite/rust/debug/debug.exp            | 33 +++++++++++++++++++
 gcc/testsuite/rust/debug/i8u8.rs              | 12 +++++++
 gcc/testsuite/rust/debug/lang.rs              |  6 ++++
 gcc/testsuite/rust/debug/no_mangle.rs         | 17 ++++++++++
 gcc/testsuite/rust/debug/oldlang.rs           |  6 ++++
 gcc/testsuite/rust/debug/tuple.rs             |  8 +++++
 gcc/testsuite/rust/debug/win64-abi.rs         | 11 +++++++
 9 files changed, 116 insertions(+)
 create mode 100644 gcc/testsuite/rust/debug/chartype.rs
 create mode 100644 gcc/testsuite/rust/debug/custom_link_section.rs
 create mode 100644 gcc/testsuite/rust/debug/debug.exp
 create mode 100644 gcc/testsuite/rust/debug/i8u8.rs
 create mode 100644 gcc/testsuite/rust/debug/lang.rs
 create mode 100644 gcc/testsuite/rust/debug/no_mangle.rs
 create mode 100644 gcc/testsuite/rust/debug/oldlang.rs
 create mode 100644 gcc/testsuite/rust/debug/tuple.rs
 create mode 100644 gcc/testsuite/rust/debug/win64-abi.rs
  

Patch

diff --git a/gcc/testsuite/rust/debug/chartype.rs b/gcc/testsuite/rust/debug/chartype.rs
new file mode 100644
index 00000000000..69e7ab0b17f
--- /dev/null
+++ b/gcc/testsuite/rust/debug/chartype.rs
@@ -0,0 +1,10 @@ 
+// 'char' should use DW_ATE_UTF
+fn main () {
+    let c = 'x';
+// { dg-do compile }
+// Use -w to avoid warnings about the unused variables
+// DW_ATE_UTF entered in DWARF 4.
+// { dg-options "-w -gdwarf-4 -dA" }
+// DW_ATE_UTF = 0x10
+// { dg-final { scan-assembler "0x10\[ \t]\[^\n\r]* DW_AT_encoding" } } */
+}
diff --git a/gcc/testsuite/rust/debug/custom_link_section.rs b/gcc/testsuite/rust/debug/custom_link_section.rs
new file mode 100644
index 00000000000..142f3513136
--- /dev/null
+++ b/gcc/testsuite/rust/debug/custom_link_section.rs
@@ -0,0 +1,13 @@ 
+#[link_section = ".universe"]
+fn not_in_text() -> i32 {
+    42
+}
+
+fn main() -> i32 {
+// { dg-do compile }
+// { dg-options "-gdwarf-5 -dA -w" }
+    not_in_text();
+// { dg-final { scan-assembler ".universe" } } */
+
+    0
+}
diff --git a/gcc/testsuite/rust/debug/debug.exp b/gcc/testsuite/rust/debug/debug.exp
new file mode 100644
index 00000000000..c71b5930d90
--- /dev/null
+++ b/gcc/testsuite/rust/debug/debug.exp
@@ -0,0 +1,33 @@ 
+# Copyright (C) 2021-2022 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# Debugging tests.
+
+# Load support procs.
+load_lib rust-dg.exp
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+set saved-dg-do-what-default ${dg-do-what-default}
+
+set dg-do-what-default "compile"
+dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.rs]] "" ""
+set dg-do-what-default ${saved-dg-do-what-default}
+
+# All done.
+dg-finish
diff --git a/gcc/testsuite/rust/debug/i8u8.rs b/gcc/testsuite/rust/debug/i8u8.rs
new file mode 100644
index 00000000000..1cd21a4a8ff
--- /dev/null
+++ b/gcc/testsuite/rust/debug/i8u8.rs
@@ -0,0 +1,12 @@ 
+// i8 and u8 types should not have the DWARF 'char' encoding.
+fn main () {
+    let x : i8 = 5;
+    let y : u8 = 7;
+// { dg-do compile }
+// Use -w to avoid warnings about the unused variables
+// { dg-options "-w -g -dA" }
+// DW_ATE_signed_char = 6
+// { dg-final { scan-assembler-not "0x6\[ \t]\[^\n\r]* DW_AT_encoding" } } */
+// DW_ATE_unsigned_char = 8
+// { dg-final { scan-assembler-not "0x8\[ \t]\[^\n\r]* DW_AT_encoding" } } */
+}
diff --git a/gcc/testsuite/rust/debug/lang.rs b/gcc/testsuite/rust/debug/lang.rs
new file mode 100644
index 00000000000..12e0b587a02
--- /dev/null
+++ b/gcc/testsuite/rust/debug/lang.rs
@@ -0,0 +1,6 @@ 
+fn main () {
+// { dg-do compile }
+// { dg-options "-gdwarf-5 -dA" }
+// DW_LANG_Rust is 0x1c
+// { dg-final { scan-assembler "0x1c\[ \t]\[^\n\r]* DW_AT_language" } } */
+}
diff --git a/gcc/testsuite/rust/debug/no_mangle.rs b/gcc/testsuite/rust/debug/no_mangle.rs
new file mode 100644
index 00000000000..0cef40482f4
--- /dev/null
+++ b/gcc/testsuite/rust/debug/no_mangle.rs
@@ -0,0 +1,17 @@ 
+#[no_mangle]
+fn do_not_mangle() -> i32 {
+    0 
+}
+
+fn please_mangle() {}
+
+fn main() {
+// { dg-do compile }
+// { dg-options "-gdwarf-5 -dA" }
+    let _ = do_not_mangle();
+    please_mangle();
+// look for unmangled function name:
+// { dg-final { scan-assembler "do_not_mangle:" } } */
+// look for legacy mangled function name:
+// { dg-final { scan-assembler "13please_mangle" } } */
+}
diff --git a/gcc/testsuite/rust/debug/oldlang.rs b/gcc/testsuite/rust/debug/oldlang.rs
new file mode 100644
index 00000000000..ddacf0e4392
--- /dev/null
+++ b/gcc/testsuite/rust/debug/oldlang.rs
@@ -0,0 +1,6 @@ 
+fn main () {
+// { dg-do compile }
+// { dg-options "-gstrict-dwarf -gdwarf-3 -dA" }
+// DW_LANG_Rust_old is 0x9000
+// { dg-final { scan-assembler "0x9000\[ \t]\[^\n\r]* DW_AT_language" } } */
+}
diff --git a/gcc/testsuite/rust/debug/tuple.rs b/gcc/testsuite/rust/debug/tuple.rs
new file mode 100644
index 00000000000..e51a5ffdbb6
--- /dev/null
+++ b/gcc/testsuite/rust/debug/tuple.rs
@@ -0,0 +1,8 @@ 
+fn main () {
+// { dg-do compile }
+// { dg-options "-gdwarf-5 -dA -w" }
+    let x = (32, 32);
+// Look for field __0 and __1
+// { dg-final { scan-assembler "__0" } } */
+// { dg-final { scan-assembler "__1" } } */
+}
diff --git a/gcc/testsuite/rust/debug/win64-abi.rs b/gcc/testsuite/rust/debug/win64-abi.rs
new file mode 100644
index 00000000000..b2b08cd5114
--- /dev/null
+++ b/gcc/testsuite/rust/debug/win64-abi.rs
@@ -0,0 +1,11 @@ 
+// { dg-do compile { target { x86_64-*-* } } }
+// { dg-options "-gdwarf-5 -dA -w -O1 -m64" }
+pub extern "win64" fn square(num: i32) -> i32 {
+    num * num
+}
+
+fn main() {
+    // MS ABI dictates that the first argument is ecx instead of edi from the sysv world
+    // { dg-final { scan-assembler "%ecx, %ecx" } }
+    square(1);
+}