From b984b4bfa5a88cfc5bd05ad969287d6256f88a3e Mon Sep 17 00:00:00 2001
From: "Frank Ch. Eigler" <fche@redhat.com>
Date: Fri, 9 Jul 2004 19:51:51 +0000
Subject: [PATCH] Test case for g++/15861

2004-07-09  Frank Ch. Eigler  <fche@redhat.com>

	Test case for g++/15861
	* testsuite/libmudflap.c++/ctors-[12].cxx: New test case halves.
	* testsuite/libmudflap.c++/ctors.exp: Driver.
	* testsuite/libmudflap.c++/c++frags.exp: Elide redundant default.
	Look only for *frag* test cases.

From-SVN: r84392
---
 libmudflap/ChangeLog                          |  8 ++++
 .../testsuite/libmudflap.c++/c++frags.exp     |  4 +-
 .../testsuite/libmudflap.c++/ctors-1.cxx      | 20 +++++++++
 .../testsuite/libmudflap.c++/ctors-2.cxx      |  1 +
 libmudflap/testsuite/libmudflap.c++/ctors.exp | 42 +++++++++++++++++++
 5 files changed, 73 insertions(+), 2 deletions(-)
 create mode 100644 libmudflap/testsuite/libmudflap.c++/ctors-1.cxx
 create mode 100644 libmudflap/testsuite/libmudflap.c++/ctors-2.cxx
 create mode 100644 libmudflap/testsuite/libmudflap.c++/ctors.exp

diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog
index 04ce4727ecdf..804359a0036d 100644
--- a/libmudflap/ChangeLog
+++ b/libmudflap/ChangeLog
@@ -1,3 +1,11 @@
+2004-07-09  Frank Ch. Eigler  <fche@redhat.com>
+
+	Test case for g++/15861
+	* testsuite/libmudflap.c++/ctors-[12].cxx: New test case halves.
+	* testsuite/libmudflap.c++/ctors.exp: Driver.
+	* testsuite/libmudflap.c++/c++frags.exp: Elide redundant default.
+	Look only for *frag* test cases.
+
 2004-07-08  Frank Ch. Eigler  <fche@redhat.com>
 
 	ANSI C conversion, libmudflap specialization, recursion limiting.
diff --git a/libmudflap/testsuite/libmudflap.c++/c++frags.exp b/libmudflap/testsuite/libmudflap.c++/c++frags.exp
index 43da3bdf56b1..5eb69aa65282 100644
--- a/libmudflap/testsuite/libmudflap.c++/c++frags.exp
+++ b/libmudflap/testsuite/libmudflap.c++/c++frags.exp
@@ -6,9 +6,9 @@ dg-init
 global srcdir
 
 foreach flags [list {} {-static} {-O2} {-O3}] {
-    foreach srcfile [lsort [glob -nocomplain ${srcdir}/libmudflap.c++/*.cxx]] {
+    foreach srcfile [lsort [glob -nocomplain ${srcdir}/libmudflap.c++/*frag.cxx]] {
 	set bsrc [file tail $srcfile]
-	setenv MUDFLAP_OPTIONS "-no-heur-proc-map -viol-segv"
+	setenv MUDFLAP_OPTIONS "-viol-segv"
 	dg-runtest $srcfile $flags "-fmudflap -lmudflap"
     }
 }
diff --git a/libmudflap/testsuite/libmudflap.c++/ctors-1.cxx b/libmudflap/testsuite/libmudflap.c++/ctors-1.cxx
new file mode 100644
index 000000000000..7717c805ca58
--- /dev/null
+++ b/libmudflap/testsuite/libmudflap.c++/ctors-1.cxx
@@ -0,0 +1,20 @@
+#include <iostream>
+
+
+extern char k [];
+
+class foo
+{
+ public:
+  foo (char *m) { m [40] = 20; }
+};
+
+
+foo f1 (k);
+foo f2 (k);
+foo f3 (k);
+
+int main ()
+{
+  return 0;
+}
diff --git a/libmudflap/testsuite/libmudflap.c++/ctors-2.cxx b/libmudflap/testsuite/libmudflap.c++/ctors-2.cxx
new file mode 100644
index 000000000000..c1a501979bf7
--- /dev/null
+++ b/libmudflap/testsuite/libmudflap.c++/ctors-2.cxx
@@ -0,0 +1 @@
+char k [500];
diff --git a/libmudflap/testsuite/libmudflap.c++/ctors.exp b/libmudflap/testsuite/libmudflap.c++/ctors.exp
new file mode 100644
index 000000000000..a160bc9d340e
--- /dev/null
+++ b/libmudflap/testsuite/libmudflap.c++/ctors.exp
@@ -0,0 +1,42 @@
+
+libmudflap-init c++
+
+dg-init
+
+global srcdir subdir
+
+foreach flags [list {} {-static} {-O2} {-O3}] {
+    set l1 [libmudflap_target_compile "$srcdir/$subdir/ctors-1.cxx" "ctors-1.o" object {additional_flags=-fmudflap}]
+    set test "ctors-1 compilation ${flags}"
+    if [string match "*mudflap cannot track lifetime of*k*" $l1] { pass $test } { fail $test }
+
+    set l2 [libmudflap_target_compile "$srcdir/$subdir/ctors-2.cxx" "ctors-2.o" object {additional_flags=-fmudflap}]
+    set test "ctors-2 compilation ${flags}"
+    if [string match "" $l2]  { pass $test } { fail $test }
+
+    set l3 [libmudflap_target_compile "ctors-1.o ctors-2.o" "ctors-12.exe" executable {additional_flags=-fmudflap additional_flags=-lmudflap additional_flags=-lstdc++}]
+    set test "ctors-12 linkage ${flags}"
+    if [string match "" $l3]  { pass $test } { fail $test }
+
+    set l4 [libmudflap_target_compile "ctors-2.o ctors-1.o" "ctors-21.exe" executable {additional_flags=-fmudflap additional_flags=-lmudflap additional_flags=-lstdc++}]
+    set test "ctors-21 linkage ${flags}"
+    if [string match "" $l3]  { pass $test } { fail $test }
+
+    setenv MUDFLAP_OPTIONS "-viol-segv"
+
+    remote_spawn host "./ctors-12.exe"
+    set l5 [remote_wait host 10]
+    set test "ctors-12 execution ${flags}"
+    if {[lindex $l5 0] == 0}  { pass $test } { fail $test }
+
+    remote_spawn host "./ctors-21.exe"
+    set l6 [remote_wait host 10]
+    set test "ctors-21 execution ${flags}"
+    if {[lindex $l6 0] == 0}  { pass $test } { fail $test }
+
+    foreach f [glob -nocomplain "ctors-*"] {
+       remote_file build delete $f
+    }
+}
+
+dg-finish
-- 
GitLab