* lib/scanasm.exp (scan-assembler*): Don't take "testcase" argument.
authorJason Merrill <jason@redhat.com>
Tue, 24 Jul 2001 15:17:04 +0000 (11:17 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 24 Jul 2001 15:17:04 +0000 (11:17 -0400)
From-SVN: r44302

13 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/abi/mangle1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/mangle1.C [deleted file]
gcc/testsuite/g++.dg/opt/vtgc1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/vtgc1.C [deleted file]
gcc/testsuite/gcc.dg/asm-2.c
gcc/testsuite/gcc.dg/asm-3.c
gcc/testsuite/gcc.dg/asm-fs-1.c
gcc/testsuite/gcc.dg/dll-1.c
gcc/testsuite/gcc.dg/dll-3.c
gcc/testsuite/gcc.dg/dll-4.c
gcc/testsuite/gcc.dg/iftrap-1.c
gcc/testsuite/lib/scanasm.exp

index 995daaef83250be07128002d0310f98635134927..add7b2c9d4d862a952cb4289ab154f55b8c005a0 100644 (file)
@@ -1,3 +1,16 @@
+2001-07-24  Jason Merrill  <jason_merrill@redhat.com>
+
+       * lib/scanasm.exp (scan-assembler*): Don't take "testcase" argument.
+       * gcc.dg/asm-2.c, gcc.dg/asm-3.c, gcc.dg/asm-fs-1.c, gcc.dg/dll-1.c,
+       gcc.dg/dll-3.c, gcc.dg/dll-4.c, gcc.dg/iftrap-1.c: Don't pass it.
+       * g++.dg/mangle1.C, g++.dg/vtgc1.C: Likewise.
+
+       * lib/prune.exp (prune_gcc_output): Prune "Please submit a full
+       bug report" message.
+
+       * g++.dg/dg.exp: Run tests from subdirectories other than "special".
+       * g++.dg/ext/instantiate1.C: Move from old-deja.
+
 2001-07-24  David Billinghurst <David.Billinghurst@riotinto.com>
 
        * g77.f-torture/execute/intrinsic-unix-bessel.f: New test
@@ -109,6 +122,13 @@ Mon Jul 16 12:21:56 2001  Nicola Pero  <n.pero@mi.flashnet.it>
 
        * g++.old-deja/g++.other/enum5.C: New test.
 
+2001-07-10  Jason Merrill  <jason_merrill@redhat.com>
+
+       * lib/g++-dg.exp: Load file-format and target-supports like gcc.
+       (g++-dg-prune): Call prune_gcc_output.
+       * prune.exp: New file for prune_gcc_output.
+       * lib/g++.exp, lib/gcc.exp: Load it.
+
 2001-07-08  Joseph S. Myers  <jsm28@cam.ac.uk>
 
        * gcc.c-torture/compile/20010701-1.c,
diff --git a/gcc/testsuite/g++.dg/abi/mangle1.C b/gcc/testsuite/g++.dg/abi/mangle1.C
new file mode 100644 (file)
index 0000000..ab377d1
--- /dev/null
@@ -0,0 +1,28 @@
+// Test for mangling of simple testcase involving construction vtables.
+
+// { dg-do compile }
+// { dg-options "-fno-inline" }
+
+struct A {
+  virtual void f () { }
+};
+
+struct B: public virtual A { };
+struct C: public B { };
+
+C c;
+
+// { dg-final { scan-assembler "\n_?_ZN1A1fEv\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZN1AC2Ev\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZN1BC2Ev\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZN1CC1Ev\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTC1C0_1B\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTI1A\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTI1B\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTI1C\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTS1A\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTS1B\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTS1C\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTT1C\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTV1A\[: \t\n\]" } }
+// { dg-final { scan-assembler "\n_?_ZTV1C\[: \t\n\]" } }
diff --git a/gcc/testsuite/g++.dg/mangle1.C b/gcc/testsuite/g++.dg/mangle1.C
deleted file mode 100644 (file)
index 0fde91e..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-// Test for mangling of simple testcase involving construction vtables.
-
-// { dg-do compile }
-// { dg-options "-fno-inline" }
-
-struct A {
-  virtual void f () { }
-};
-
-struct B: public virtual A { };
-struct C: public B { };
-
-C c;
-
-// { dg-final { scan-assembler mangle1.C "\n_?_ZN1A1fEv\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZN1AC2Ev\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZN1BC2Ev\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZN1CC1Ev\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZTC1C0_1B\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZTI1A\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZTI1B\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZTI1C\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZTS1A\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZTS1B\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZTS1C\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZTT1C\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZTV1A\[: \t\n\]" } }
-// { dg-final { scan-assembler mangle1.C "\n_?_ZTV1C\[: \t\n\]" } }
diff --git a/gcc/testsuite/g++.dg/opt/vtgc1.C b/gcc/testsuite/g++.dg/opt/vtgc1.C
new file mode 100644 (file)
index 0000000..c508555
--- /dev/null
@@ -0,0 +1,133 @@
+// { dg-do compile }
+// { dg-options "-fvtable-gc" }
+// Origin: Hans-Peter Nilsson <hp@bitrange.com>
+
+class Base0
+{
+public:
+  Base0(); virtual ~Base0();
+  virtual void f1();
+  virtual void f2();
+private:
+  int a_value;
+};
+
+class Base1 : public Base0
+{
+public:
+  Base1(); virtual ~Base1();
+  virtual void f1(), f2();
+  virtual void f3();
+};
+
+class Base2 : public Base1
+{
+public:
+  Base2(); virtual ~Base2();
+  virtual void f1(), f2();
+  virtual void f4();
+};
+
+class VbasedA : virtual public Base2
+{
+public:
+  VbasedA(); virtual ~VbasedA();
+  virtual void f1(), f2(), f3();
+  virtual void f6();
+};
+
+class Side0
+{
+public:
+  Side0(); virtual ~Side0();
+  virtual void x1();
+  virtual void xx();
+private:
+  int ryan;
+};
+
+class Multisv0 : public Side0, virtual public Base2
+{
+public:
+  Multisv0(); virtual ~Multisv0();
+  virtual void f1(), f2();
+  virtual void f3();
+  virtual void f6();
+  virtual void xx();
+};
+
+class Multivs1 : public Base2, virtual public Side0
+{
+public:
+  Multivs1(); virtual ~Multivs1(); virtual void f1(); virtual void fx2();
+  virtual void fx4(), fx5();
+  virtual void f6();
+  virtual void xx();
+};
+
+class Multiss2 : public Base2, public Side0
+{
+public:
+  Multiss2(); virtual ~Multiss2(); virtual void f1(); virtual void fx2();
+  virtual void fx4();
+  virtual void f6();
+  virtual void xx();
+};
+
+class Multivv3 : virtual public Base2, virtual public Side0
+{
+public:
+  Multivv3(); virtual ~Multivv3(); virtual void f1(); virtual void fx2();
+  virtual void fx4(), fx5();
+  virtual void f6();
+  virtual void xx();
+};
+
+Base0::Base0() {}
+Base0::~Base0() {}
+Base1::Base1() {}
+Base1::~Base1() {}
+Base2::Base2() {}
+Base2::~Base2() {}
+VbasedA::VbasedA() {}
+VbasedA::~VbasedA() {}
+Multisv0::Multisv0() {}
+Multisv0::~Multisv0() {}
+Multivs1::Multivs1() {}
+Multivs1::~Multivs1() {}
+Multiss2::Multiss2() {}
+Multiss2::~Multiss2() {}
+Multivv3::Multivv3() {}
+Multivv3::~Multivv3() {}
+Side0::Side0() {}
+Side0::~Side0() {}
+
+extern void x (VbasedA *);
+extern void x2 (Multisv0 *);
+extern void x3 (Multivs1 *);
+extern void x4 (Multiss2 *);
+extern void x5 (Multivv3 *);
+void y () { VbasedA ii; x(&ii);}
+void y2 () { Multisv0 ii; x2(&ii);}
+void y3 () { Multivs1 ii; x3(&ii);}
+void y4 () { Multiss2 ii; x4(&ii);}
+void y5 () { Multivv3 ii; x5(&ii);}
+void x (VbasedA *ii) { ii->f2();}
+void x2 (Multisv0 *ii) { ii->f2();}
+void x3 (Multivs1 *ii) { ii->f2();}
+void x4 (Multiss2 *ii) { ii->f2();}
+void x5 (Multivv3 *ii) { ii->f2();}
+
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multivv3, 0" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multivv3, 0" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multiss2, vtable for Base2" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multivs1, vtable for Base2" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multivs1, vtable for Base2" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Multisv0, vtable for Side0" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for Multisv0, vtable for Side0" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Side0, 0" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for VbasedA, 0" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*VTT for VbasedA, 0" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base2, vtable for Base1" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base1, vtable for Base0" } }
+// { dg-final { scan-assembler-dem "\.vtable_inherit\[ \t\]*vtable for Base0, 0" } }
diff --git a/gcc/testsuite/g++.dg/vtgc1.C b/gcc/testsuite/g++.dg/vtgc1.C
deleted file mode 100644 (file)
index 791e4ce..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-// { dg-do compile }
-// { dg-options "-fvtable-gc" }
-// Origin: Hans-Peter Nilsson <hp@bitrange.com>
-
-class Base0
-{
-public:
-  Base0(); virtual ~Base0();
-  virtual void f1();
-  virtual void f2();
-private:
-  int a_value;
-};
-
-class Base1 : public Base0
-{
-public:
-  Base1(); virtual ~Base1();
-  virtual void f1(), f2();
-  virtual void f3();
-};
-
-class Base2 : public Base1
-{
-public:
-  Base2(); virtual ~Base2();
-  virtual void f1(), f2();
-  virtual void f4();
-};
-
-class VbasedA : virtual public Base2
-{
-public:
-  VbasedA(); virtual ~VbasedA();
-  virtual void f1(), f2(), f3();
-  virtual void f6();
-};
-
-class Side0
-{
-public:
-  Side0(); virtual ~Side0();
-  virtual void x1();
-  virtual void xx();
-private:
-  int ryan;
-};
-
-class Multisv0 : public Side0, virtual public Base2
-{
-public:
-  Multisv0(); virtual ~Multisv0();
-  virtual void f1(), f2();
-  virtual void f3();
-  virtual void f6();
-  virtual void xx();
-};
-
-class Multivs1 : public Base2, virtual public Side0
-{
-public:
-  Multivs1(); virtual ~Multivs1(); virtual void f1(); virtual void fx2();
-  virtual void fx4(), fx5();
-  virtual void f6();
-  virtual void xx();
-};
-
-class Multiss2 : public Base2, public Side0
-{
-public:
-  Multiss2(); virtual ~Multiss2(); virtual void f1(); virtual void fx2();
-  virtual void fx4();
-  virtual void f6();
-  virtual void xx();
-};
-
-class Multivv3 : virtual public Base2, virtual public Side0
-{
-public:
-  Multivv3(); virtual ~Multivv3(); virtual void f1(); virtual void fx2();
-  virtual void fx4(), fx5();
-  virtual void f6();
-  virtual void xx();
-};
-
-Base0::Base0() {}
-Base0::~Base0() {}
-Base1::Base1() {}
-Base1::~Base1() {}
-Base2::Base2() {}
-Base2::~Base2() {}
-VbasedA::VbasedA() {}
-VbasedA::~VbasedA() {}
-Multisv0::Multisv0() {}
-Multisv0::~Multisv0() {}
-Multivs1::Multivs1() {}
-Multivs1::~Multivs1() {}
-Multiss2::Multiss2() {}
-Multiss2::~Multiss2() {}
-Multivv3::Multivv3() {}
-Multivv3::~Multivv3() {}
-Side0::Side0() {}
-Side0::~Side0() {}
-
-extern void x (VbasedA *);
-extern void x2 (Multisv0 *);
-extern void x3 (Multivs1 *);
-extern void x4 (Multiss2 *);
-extern void x5 (Multivv3 *);
-void y () { VbasedA ii; x(&ii);}
-void y2 () { Multisv0 ii; x2(&ii);}
-void y3 () { Multivs1 ii; x3(&ii);}
-void y4 () { Multiss2 ii; x4(&ii);}
-void y5 () { Multivv3 ii; x5(&ii);}
-void x (VbasedA *ii) { ii->f2();}
-void x2 (Multisv0 *ii) { ii->f2();}
-void x3 (Multivs1 *ii) { ii->f2();}
-void x4 (Multiss2 *ii) { ii->f2();}
-void x5 (Multivv3 *ii) { ii->f2();}
-
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multivv3, 0" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for Multivv3, 0" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multiss2, vtable for Base2" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multivs1, vtable for Base2" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for Multivs1, vtable for Base2" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Multisv0, vtable for Side0" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for Multisv0, vtable for Side0" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Side0, 0" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for VbasedA, 0" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*VTT for VbasedA, 0" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Base2, vtable for Base1" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Base1, vtable for Base0" } }
-// { dg-final { scan-assembler-dem vtgc1.C "\.vtable_inherit\[ \t\]*vtable for Base0, 0" } }
index 80396ae288b33f1d21ebb5cc55e3ce996a6eb6cd..5adee41b9c6f28a15ed5ca806a2cc86d4c5cc14a 100644 (file)
@@ -6,4 +6,4 @@ int f()
   asm volatile ("foo%%bar" : : );
 }
 
-/* { dg-final { scan-assembler asm-2.c "foo%bar" } } */
+/* { dg-final { scan-assembler "foo%bar" } } */
index 5c6864777f187db3bb4fbfb1228bdb6b3f89794d..e7db804c18adbbf8e4ada24d00adb2c3b6b9e40a 100644 (file)
@@ -6,4 +6,4 @@ int f()
   asm ("foo%%bar");
 }
 
-/* { dg-final { scan-assembler asm-3.c "foo%%bar" } } */
+/* { dg-final { scan-assembler "foo%%bar" } } */
index 4c7c3e033292c739ed61d0d4e9cfdaa3750f2bfe..c60187a7af56c1ff60c35918d4bb3b2801ab320d 100644 (file)
@@ -10,5 +10,5 @@ void foo (void) {}
 extern int foobar asm ("_baz");
 int foobar = 3;
 
-/* { dg-final { scan-assembler-not asm-fs-1.c "\\*_bar" } } */
-/* { dg-final { scan-assembler-not asm-fs-1.c "\\*_baz" } } */
+/* { dg-final { scan-assembler-not "\\*_bar" } } */
+/* { dg-final { scan-assembler-not "\\*_baz" } } */
index eb3b9b867f0323bb401682341cdc292bd6af306e..4ae1a0e1797724032a24d9a62088c4db3557985f 100644 (file)
@@ -6,5 +6,5 @@ __declspec (dllimport) void imp ();
 
 __declspec (dllexport) void exp () { imp (); }
 
-/* { dg-final { scan-assembler dll-1.c "\.section\[ \t\]*.drectve\n\[^\n\]*-export:exp.*__imp_imp" } } */
-/* { dg-final { scan-assembler-not dll-1.c "__imp_exp" } } */
+/* { dg-final { scan-assembler "\.section\[ \t\]*.drectve\n\[^\n\]*-export:exp.*__imp_imp" } } */
+/* { dg-final { scan-assembler-not "__imp_exp" } } */
index 0f7818f1e5caa3b575a17db1e4f47121349490a3..0be1f9730252d6c57a5c7980ffcc919dd5563f7e 100644 (file)
@@ -12,5 +12,5 @@ __declspec (dllimport) int foo2 ();
 __declspec (dllexport) int foo1 () { return foo2 (); }
 __declspec (dllexport) int foo2 () { return foo1 (); }
 
-/* { dg-final { scan-assembler dll-3.c "\.section\[ \t\]*\.drectve\n\[^\n\]*-export:foo1.*\.section\[ \t\]*\.drectve\n\[^\n\]*-export:foo2" } } */
-/* { dg-final { scan-assembler-not dll-3.c "(__imp_foo1|__imp_foo2)" } } */
+/* { dg-final { scan-assembler "\.section\[ \t\]*\.drectve\n\[^\n\]*-export:foo1.*\.section\[ \t\]*\.drectve\n\[^\n\]*-export:foo2" } } */
+/* { dg-final { scan-assembler-not "(__imp_foo1|__imp_foo2)" } } */
index b708790baa5cd7035272920a25a434cc76e07493..fec08fcbb604d09ecdaf42114f69cc8cd4262281 100644 (file)
@@ -10,5 +10,5 @@ int foo2 = 5;
 int f () { return foo1 + foo2; }
 
 /* FIXME: We should scan the output of nm for this case.  */
-/* { dg-final { scan-assembler dll-4.c "(foo2:.*\.comm\[ \t_\]*foo1)" } } */
-/* { dg-final { scan-assembler-not dll-4.c "__imp_" } } */
+/* { dg-final { scan-assembler "(foo2:.*\.comm\[ \t_\]*foo1)" } } */
+/* { dg-final { scan-assembler-not "__imp_" } } */
index b37cfce9f4385713b53cc9f5d12ec6c690a3593c..b6abfc44e56b6925c2768e70754edd5fb05f3761 100644 (file)
@@ -1,7 +1,7 @@
 /* Verify that we optimize to conditional traps.  */
 /* { dg-options "-O" } */
 /* { dg-do compile { target rs6000-*-* powerpc-*-* sparc*-*-* } } */
-/* { dg-final { scan-assembler-not iftrap-1.c "^\t(trap|ta)\[ \t\]" } } */
+/* { dg-final { scan-assembler-not "^\t(trap|ta)\[ \t\]" } } */
 
 void f1(int p)
 {
index 9720b381fa5691277599c492464ca045225b7238..105da61c2f082ad5ae1bbc34c2f0e50985a27d64 100644 (file)
 
 # Utility for scanning compiler result, invoked via dg-final.
 # Call pass if pattern is present, otherwise fail.
-proc scan-assembler { testcase pattern args } {
-    global subdir
+proc scan-assembler { pattern args } {
+    # This assumes that we are two frames down from dg-test, and that
+    # it still stores the filename of the testcase in a local variable "name".
+    # A cleaner solution would require a new dejagnu release.
+    set testcase [uplevel 2 { concat "$name" }]
 
-    set fd [open [file rootname $testcase].s r]
+    # This must match the rule in gcc-dg.exp.
+    set output_file "[file rootname [file tail $testcase]].s"
+
+    set fd [open $output_file r]
     set text [read $fd]
     close $fd
 
@@ -32,17 +38,18 @@ proc scan-assembler { testcase pattern args } {
     }
 
     if [regexp -- $pattern $text] {
-       pass "$subdir/$testcase scan-assembler $vmessage"
+       pass "$testcase scan-assembler $vmessage"
     } else {
-       fail "$subdir/$testcase scan-assembler $vmessage"
+       fail "$testcase scan-assembler $vmessage"
     }
 }
 
 # Call pass if pattern is not present, otherwise fail.
-proc scan-assembler-not { testcase pattern args } {
-    global subdir
+proc scan-assembler-not { pattern args } {
+    set testcase [uplevel 2 { concat "$name" }]
+    set output_file "[file rootname [file tail $testcase]].s"
 
-    set fd [open [file rootname $testcase].s r]
+    set fd [open $output_file r]
     set text [read $fd]
     close $fd
 
@@ -52,16 +59,15 @@ proc scan-assembler-not { testcase pattern args } {
     }
 
     if ![regexp -- $pattern $text] {
-       pass "$subdir/$testcase scan-assembler-not $vmessage"
+       pass "$testcase scan-assembler-not $vmessage"
     } else {
-       fail "$subdir/$testcase scan-assembler-not $vmessage"
+       fail "$testcase scan-assembler-not $vmessage"
     }
 }
 
 # Utility for scanning demangled compiler result, invoked via dg-final.
 # Call pass if pattern is present, otherwise fail.
-proc scan-assembler-dem { testcase pattern args } {
-    global subdir
+proc scan-assembler-dem { pattern args } {
     global cxxfilt
     global base_dir
 
@@ -73,7 +79,10 @@ proc scan-assembler-dem { testcase pattern args } {
        verbose -log "c++filt is $cxxfilt"
     }
 
-    set fd [open "| $cxxfilt < [file rootname $testcase].s" r]
+    set testcase [uplevel 2 { concat "$name" }]
+    set output_file "[file rootname [file tail $testcase]].s"
+
+    set fd [open "| $cxxfilt < $output_file" r]
     set text [read $fd]
     close $fd
 
@@ -83,15 +92,14 @@ proc scan-assembler-dem { testcase pattern args } {
     }
 
     if [regexp -- $pattern $text] {
-       pass "$subdir/$testcase scan-assembler $vmessage"
+       pass "$testcase scan-assembler $vmessage"
     } else {
-       fail "$subdir/$testcase scan-assembler $vmessage"
+       fail "$testcase scan-assembler $vmessage"
     }
 }
 
 # Call pass if demangled pattern is not present, otherwise fail.
-proc scan-assembler-dem-not { testcase pattern args } {
-    global subdir
+proc scan-assembler-dem-not { pattern args } {
     global cxxfilt
     global base_dir
 
@@ -103,7 +111,10 @@ proc scan-assembler-dem-not { testcase pattern args } {
        verbose -log "c++filt is $cxxfilt"
     }
 
-    set fd [open "| $cxxfilt < [file rootname $testcase].s" r]
+    set testcase [uplevel 2 { concat "$name" }]
+    set output_file "[file rootname [file tail $testcase]].s"
+
+    set fd [open "| $cxxfilt < $output_file" r]
     set text [read $fd]
     close $fd
 
@@ -113,8 +124,8 @@ proc scan-assembler-dem-not { testcase pattern args } {
     }
 
     if ![regexp -- $pattern $text] {
-       pass "$subdir/$testcase scan-assembler-not $vmessage"
+       pass "$testcase scan-assembler-not $vmessage"
     } else {
-       fail "$subdir/$testcase scan-assembler-not $vmessage"
+       fail "$testcase scan-assembler-not $vmessage"
     }
 }