+2004-09-27  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       PR c/13804
+       * c-typeck.c (build_component_ref): Name type involved in
+       diagnostic for structure or union without a member of the given
+       name.
+
 2004-09-27  DJ Delorie  <dj@redhat.com>
 
        * config/stormy16/stormy16.c (xstormy16_asm_output_aligned_common):
 
 
       if (!field)
        {
-         error ("%s has no member named %qs",
-                code == RECORD_TYPE ? "structure" : "union",
+         error ("%qT has no member named %qs", type,
                 IDENTIFIER_POINTER (component));
          return error_mark_node;
        }
 
+2004-09-27  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       PR c/13804
+       * gcc.dg/pr13804-1.c: New test.
+
 2004-09-27  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
 
        PR fortran/16938
 
--- /dev/null
+/* Diagnostics for attempts to access a member not in a structure or
+   union should name the type involved.  Bug 13804.  */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+struct s0 { int a; };
+union u0 { long b; };
+typedef struct s0 S0;
+typedef union u0 U0;
+
+struct s0 x0;
+S0 x1;
+union u0 x2;
+U0 x3;
+struct s0 *x4;
+union u0 *x5;
+
+void
+f (void)
+{
+  x0.c; /* { dg-error "error: 'struct s0' has no member named 'c'" } */
+  x1.c; /* { dg-error "error: 'S0' has no member named 'c'" } */
+  x2.c; /* { dg-error "error: 'union u0' has no member named 'c'" } */
+  x3.c; /* { dg-error "error: 'U0' has no member named 'c'" } */
+  x4->c; /* { dg-error "error: 'struct s0' has no member named 'c'" } */
+  x5->c; /* { dg-error "error: 'union u0' has no member named 'c'" } */
+}