diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a7773a1d92b52e7c2f43daf62146f01c92b1b033..34b0a267e43e90463e719e4e81c472ccbfc85518 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-07  Dodji Seketeli  <dodji@redhat.com>
+
+	PR debug/43628
+	* dwarf2out.c (modified_type_die): Ignore artificial typedefs.
+
 2010-04-06  Kai Tietz  <kai.tietz@onevision.com>
 
 	* config/i386/i386.c (ix86_handle_cconv_attribute): Ignore
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 82b0d49aa28bd12fc6fcd939024e02b4603be40e..5fd0ec6b9905b16d38eb641bc73769e66ba041cc 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -12146,7 +12146,8 @@ modified_type_die (tree type, int is_const_type, int is_volatile_type,
   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
 
   /* Handle C typedef types.  */
-  if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name))
+  if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
+      && !DECL_ARTIFICIAL (name))
     {
       tree dtype = TREE_TYPE (name);
 
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4aa4800be820a6cd22324857ce3b80c871e7d7a4..ce0a43956e426686fdb3d0a31c76d1618b59e14f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-04-07  Dodji Seketeli  <dodji@redhat.com>
+
+	PR debug/43628
+	* g++.dg/debug/dwarf2/typedef2.C: New test.
+
 2010-04-06  Dodji Seketeli  <dodji@redhat.com>
 
 	* g++.dg/debug/dwarf2/redeclaration-1.C: Moved from 
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/typedef2.C b/gcc/testsuite/g++.dg/debug/dwarf2/typedef2.C
new file mode 100644
index 0000000000000000000000000000000000000000..5bf04998a1068794ac9e0c581153ac375d1a4637
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/typedef2.C
@@ -0,0 +1,11 @@
+// Origin: PR debug/43628
+// { dg-options "-g -dA" }
+// { dg-do compile }
+
+// { dg-final { scan-assembler-times "\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_formal_parameter\\)\[\n\r\]{1,2}\[^\n\r\]*DW_AT_type\[\n\r\]{1,2}" 1 } }
+class C
+{
+  public:
+  typedef void (*t) (C);
+};
+C::t f;