summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-mudflap.c2
-rw-r--r--libmudflap/ChangeLog6
-rw-r--r--libmudflap/testsuite/libmudflap.c/cfrags.exp6
-rw-r--r--libmudflap/testsuite/libmudflap.c/externs-1.c14
-rw-r--r--libmudflap/testsuite/libmudflap.c/externs-2.c2
-rw-r--r--libmudflap/testsuite/libmudflap.c/externs.exp40
7 files changed, 74 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0de09727b8c..023b85db884 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-06-14 Frank Ch. Eigler <fche@redhat.com>
+
+ PR mudflap/21023
+ * tree-mudflap.c (mudflap_finish_file): Exclude non-public
+ rather than static objects (!) from libmudflap registration.
+
2005-06-14 Richard Sandiford <richard@codesourcery.com>
* opt-functions.awk (global_state_p, needs_state_p, static_var): New.
diff --git a/gcc/tree-mudflap.c b/gcc/tree-mudflap.c
index 401e6b15cdb..1ed0159fed5 100644
--- a/gcc/tree-mudflap.c
+++ b/gcc/tree-mudflap.c
@@ -1257,7 +1257,7 @@ mudflap_finish_file (void)
Perform registration for non-static objects regardless of
TREE_USED or TREE_ADDRESSABLE, because they may be used
from other compilation units. */
- if (TREE_STATIC (obj) && ! TREE_ADDRESSABLE (obj))
+ if (! TREE_PUBLIC (obj) && ! TREE_ADDRESSABLE (obj))
continue;
if (! COMPLETE_TYPE_P (TREE_TYPE (obj)))
diff --git a/libmudflap/ChangeLog b/libmudflap/ChangeLog
index 3cc2238ba63..4e0525c2f11 100644
--- a/libmudflap/ChangeLog
+++ b/libmudflap/ChangeLog
@@ -1,5 +1,11 @@
2005-06-14 Frank Ch. Eigler <fche@redhat.com>
+ PR mudflap/21023
+ * testsuite/libmudflap.c/externs.exp, externs-{1,2}.c: New test files.
+ * testsuite/libmudflap.c/cfrags.exp: Bypass new sources.
+
+2005-06-14 Frank Ch. Eigler <fche@redhat.com>
+
PR libmudflap/21094
* testsuite/libmudflap.c++/*.exp: Assert build tree g++.
diff --git a/libmudflap/testsuite/libmudflap.c/cfrags.exp b/libmudflap/testsuite/libmudflap.c/cfrags.exp
index c29975c30fe..577a4cc80c9 100644
--- a/libmudflap/testsuite/libmudflap.c/cfrags.exp
+++ b/libmudflap/testsuite/libmudflap.c/cfrags.exp
@@ -5,7 +5,11 @@ dg-init
global srcdir
foreach flags [list {} {-static} {-O2} {-O3}] {
- foreach srcfile [lsort [glob -nocomplain ${srcdir}/libmudflap.c/*.c]] {
+ foreach srcfile [lsort [glob -nocomplain \
+ ${srcdir}/libmudflap.c/*frag.c \
+ ${srcdir}/libmudflap.c/heap*.c \
+ ${srcdir}/libmudflap.c/hook*.c \
+ ${srcdir}/libmudflap.c/pass*.c]] {
set bsrc [file tail $srcfile]
setenv MUDFLAP_OPTIONS "-viol-segv"
dg-runtest $srcfile $flags "-fmudflap -lmudflap"
diff --git a/libmudflap/testsuite/libmudflap.c/externs-1.c b/libmudflap/testsuite/libmudflap.c/externs-1.c
new file mode 100644
index 00000000000..552801d4b40
--- /dev/null
+++ b/libmudflap/testsuite/libmudflap.c/externs-1.c
@@ -0,0 +1,14 @@
+typedef struct { char *name; } dummy;
+extern dummy d[];
+
+int
+main (void)
+{
+ dummy *pd = d;
+
+ while (pd->name)
+ {
+ printf ("%s\n", pd->name);
+ pd++;
+ }
+}
diff --git a/libmudflap/testsuite/libmudflap.c/externs-2.c b/libmudflap/testsuite/libmudflap.c/externs-2.c
new file mode 100644
index 00000000000..cecf6253a6a
--- /dev/null
+++ b/libmudflap/testsuite/libmudflap.c/externs-2.c
@@ -0,0 +1,2 @@
+typedef struct { char *name; } dummy;
+dummy d[] = { {"a"}, {0} };
diff --git a/libmudflap/testsuite/libmudflap.c/externs.exp b/libmudflap/testsuite/libmudflap.c/externs.exp
new file mode 100644
index 00000000000..e97e0b684e4
--- /dev/null
+++ b/libmudflap/testsuite/libmudflap.c/externs.exp
@@ -0,0 +1,40 @@
+libmudflap-init c
+dg-init
+
+global srcdir subdir
+
+foreach flags [list {} {-static} {-O2} {-O3}] {
+ set l1 [libmudflap_target_compile "$srcdir/$subdir/externs-1.c" "externs-1.o" object {additional_flags=-fmudflap}]
+ set test "externs-1 compilation ${flags}"
+ if [string match "*mudflap cannot track unknown size extern *d*" $l1] { pass $test } { fail $test }
+
+ set l2 [libmudflap_target_compile "$srcdir/$subdir/externs-2.c" "externs-2.o" object {additional_flags=-fmudflap}]
+ set test "externs-2 compilation ${flags}"
+ if [string match "" $l2] { pass $test } { fail $test }
+
+ set l3 [libmudflap_target_compile "externs-1.o externs-2.o" "externs-12.exe" executable {additional_flags=-fmudflap additional_flags=-lmudflap}]
+ set test "externs-12 linkage ${flags}"
+ if [string match "" $l3] { pass $test } { fail $test }
+
+ set l4 [libmudflap_target_compile "externs-2.o externs-1.o" "externs-21.exe" executable {additional_flags=-fmudflap additional_flags=-lmudflap}]
+ set test "externs-21 linkage ${flags}"
+ if [string match "" $l3] { pass $test } { fail $test }
+
+ setenv MUDFLAP_OPTIONS "-viol-segv"
+
+ remote_spawn host "./externs-12.exe"
+ set l5 [remote_wait host 10]
+ set test "externs-12 execution ${flags}"
+ if {[lindex $l5 0] == 0} { pass $test } { fail $test }
+
+ remote_spawn host "./externs-21.exe"
+ set l6 [remote_wait host 10]
+ set test "externs-21 execution ${flags}"
+ if {[lindex $l6 0] == 0} { pass $test } { fail $test }
+
+ foreach f [glob -nocomplain "externs-*"] {
+ remote_file build delete $f
+ }
+}
+
+dg-finish