diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5355b4df23acdd40bdf06e2c428d54856d02879b..f7386283660bf5bbfee6851a09612fba1fde3c01 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2008-08-14  Rafael Avila de Espindola  <espindola@google.com>
+
+	* gcc.dg/visibility-14.c: New test.
+	* gcc.dg/visibility-15.c: New test.
+	* gcc.dg/visibility-16.c: New test.
+	* gcc.dg/visibility-17.c: New test.
+	* gcc.dg/visibility-18.c: New test.
+	* gcc.dg/visibility-19.c: New test.
+
 2008-08-14  Paolo Carlini  <paolo.carlini@oracle.com>
 
 	PR c++/34600
diff --git a/gcc/testsuite/gcc.dg/visibility-14.c b/gcc/testsuite/gcc.dg/visibility-14.c
new file mode 100644
index 0000000000000000000000000000000000000000..6b75608f2acd747468ea73f0756c4069296a3a41
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-14.c
@@ -0,0 +1,9 @@
+/* Test that called external functions are marked. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-hidden "foo" } } */
+
+extern void foo(void) __attribute__ ((visibility ("hidden")));
+int f () {
+ foo();
+}
diff --git a/gcc/testsuite/gcc.dg/visibility-15.c b/gcc/testsuite/gcc.dg/visibility-15.c
new file mode 100644
index 0000000000000000000000000000000000000000..4a3aa6803f0608fea8d9e2e11138eff0c14617b0
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-15.c
@@ -0,0 +1,11 @@
+/* Test that accessed external functions are marked. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-hidden "foo" } } */
+
+extern void foo(void) __attribute__ ((visibility ("hidden")));
+typedef void (*foo_t)(void);
+
+foo_t g(void) {
+  return foo;
+}
diff --git a/gcc/testsuite/gcc.dg/visibility-16.c b/gcc/testsuite/gcc.dg/visibility-16.c
new file mode 100644
index 0000000000000000000000000000000000000000..055d00f4856b4869ca6f2ca29ce11ab97e326efa
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-16.c
@@ -0,0 +1,9 @@
+/* Test that accessed external variables are marked. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-hidden "foo" } } */
+
+extern int foo __attribute__ ((visibility ("hidden")));
+int f () {
+  return foo;
+}
diff --git a/gcc/testsuite/gcc.dg/visibility-17.c b/gcc/testsuite/gcc.dg/visibility-17.c
new file mode 100644
index 0000000000000000000000000000000000000000..99a1bc276de7b50ba8df4289c32dde0feb44c8bd
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-17.c
@@ -0,0 +1,9 @@
+/* Test that external variable whose address is taken are marked. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-hidden "foo" } } */
+
+extern int foo __attribute__ ((visibility ("hidden")));
+int *f () {
+  return &foo;
+}
diff --git a/gcc/testsuite/gcc.dg/visibility-18.c b/gcc/testsuite/gcc.dg/visibility-18.c
new file mode 100644
index 0000000000000000000000000000000000000000..4e8706640ad6a48c71003dad8ba08baf93f7aea9
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-18.c
@@ -0,0 +1,7 @@
+/* Test that external variable whose address is taken are marked. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-hidden "foo" } } */
+
+extern int foo __attribute__ ((visibility ("hidden")));
+int *test = &foo;
diff --git a/gcc/testsuite/gcc.dg/visibility-19.c b/gcc/testsuite/gcc.dg/visibility-19.c
new file mode 100644
index 0000000000000000000000000000000000000000..f56f13606789d9c87dd6c9ce7118f759e3730c00
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/visibility-19.c
@@ -0,0 +1,8 @@
+/* Test that accessed external functions are marked. */
+/* { dg-do compile } */
+/* { dg-require-visibility "" } */
+/* { dg-final { scan-hidden "foo" } } */
+
+extern void foo(void) __attribute__ ((visibility ("hidden")));
+typedef void (*foo_t)(void);
+foo_t test = foo;