diff --git gdb/testsuite/ChangeLog gdb/testsuite/ChangeLog
index 0cd9d83..7e360ae 100644
--- gdb/testsuite/ChangeLog
+++ gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-04-24  David Blaikie  <dblaikie@gmail.com>
+
+	* gdb.cp/impl-this.exp: Mark several tests KFAIL/UNSUPPORTED due to
+	GDB PR16841 and GCC PR60833
+
 2014-04-25  Yao Qi  <yao@codesourcery.com>
 
 	* gdb.dwarf2/dwz.exp (Dwarf::assemble): Remove unused
diff --git gdb/testsuite/gdb.cp/impl-this.exp gdb/testsuite/gdb.cp/impl-this.exp
index dd1bc64..3191806 100644
--- gdb/testsuite/gdb.cp/impl-this.exp
+++ gdb/testsuite/gdb.cp/impl-this.exp
@@ -30,13 +30,22 @@ if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
 with_test_prefix "before run" {
     gdb_test "print i" "No symbol \"i\" in current context."
     gdb_test "print D::i" "Cannot reference non-static field \"i\""
-    gdb_test "print D::B<int>::i" "Cannot reference non-static field \"i\""
-    gdb_test "print B<int>::i" "Cannot reference non-static field \"i\""
     gdb_test "print D::C::i" "Cannot reference non-static field \"i\""
     gdb_test "print C::i" "Cannot reference non-static field \"i\""
-    gdb_test "print D::B<int>::A<int>::i" \
-	"Cannot reference non-static field \"i\""
-    gdb_test "print B<int>::A<int>::i" "Cannot reference non-static field \"i\""
+    if {[test_compiler_info {gcc-*-*}]} {
+        unsupported "gdb/16841"
+    } else {
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::B<int>::i" "Cannot reference non-static field \"i\""
+        gdb_test "print D::Bint::i" "Cannot reference non-static field \"i\""
+        gdb_test "print B<int>::i" "Cannot reference non-static field \"i\""
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::B<int>::A<int>::i" \
+            "Cannot reference non-static field \"i\""
+        gdb_test "print D::Bint::A<int>::i" \
+            "Cannot reference non-static field \"i\""
+        gdb_test "print B<int>::A<int>::i" "Cannot reference non-static field \"i\""
+    }
     gdb_test "print A<int>::i" "Cannot reference non-static field \"i\""
     gdb_test "print D::C::A<int>::i" "Cannot reference non-static field \"i\""
     gdb_test "print C::A<int>::i" "Cannot reference non-static field \"i\""
@@ -61,18 +70,27 @@ gdb_continue_to_breakpoint "continue to D::f"
 with_test_prefix "at D::f (valid expressions)" {
     gdb_test "print i" "= 4"
     gdb_test "print D::i" "= 4"
-    gdb_test "print D::B<int>::i" "= 2"
-    gdb_test "print B<int>::i" "= 2"
-    gdb_test "print D::Bint::i" \
-	"No type \"Bint\" within class or namespace \"D\"."
-    gdb_test "print Bint::i" "= 2"
+    if {[test_compiler_info {gcc-*-*}]} {
+        unsupported "gdb/16841"
+    } else {
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::B<int>::i" "= 2"
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print B<int>::i" "= 2"
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print Bint::i" "= 2"
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::Bint::i" "= 2"
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print Bint::i" "= 2"
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::B<int>::A<int>::i" "= 1"
+        gdb_test "print B<int>::A<int>::i" "= 1"
+        gdb_test "print D::Bint::A<int>::i" "= 1"
+        gdb_test "print Bint::A<int>::i" "= 1"
+    }
     gdb_test "print D::C::i" "= 3"
     gdb_test "print C::i" "= 3"
-    gdb_test "print D::B<int>::A<int>::i" "= 1"
-    gdb_test "print B<int>::A<int>::i" "= 1"
-    gdb_test "print D::Bint::A<int>::i" \
-	"No type \"Bint\" within class or namespace \"D\"."
-    gdb_test "print Bint::A<int>::i" "= 1"
     gdb_test "print A<int>::i" "= 1"
     gdb_test "print D::C::A<int>::i" "= 1"
     gdb_test "print C::A<int>::i" "= 1"
@@ -86,29 +104,40 @@ with_test_prefix "at D::f (valid expressions)" {
 
 # Test some invalid expressions
 with_test_prefix "at D::f (invalid expressions)" {
-    gdb_test "print D::B<int>::c" "There is no field named c"
-    gdb_test "print D::B<int>::A<int>::c" "There is no field named c"
-    gdb_test "print D::Bint::c" \
-	"No type \"Bint\" within class or namespace \"D\"."
-
-    gdb_test "print D::Bint::A<int>::c" \
-	"No type \"Bint\" within class or namespace \"D\"."
-    gdb_test "print D::C::A<int>::c" "There is no field named c"
-    gdb_test "print B<int>::c" "There is no field named c"
-    gdb_test "print B<int>::A<int>::c" "There is no field named c"
-    gdb_test "print Bint::c" "There is no field named c"
-    gdb_test "print Bint::A<int>::c" "There is no field named c"
+    if {[test_compiler_info {gcc-*-*}]} {
+        unsupported "gdb/16841"
+    } else {
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::B<int>::c" "There is no field named c"
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::B<int>::A<int>::c" "There is no field named c"
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::Bint::c" \
+        "No type \"Bint\" within class or namespace \"D\"."
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::Bint::A<int>::c" \
+        "No type \"Bint\" within class or namespace \"D\"."
+        gdb_test "print B<int>::c" "There is no field named c"
+        gdb_test "print B<int>::A<int>::c" "There is no field named c"
+        gdb_test "print Bint::c" "There is no field named c"
+        gdb_test "print Bint::A<int>::c" "There is no field named c"
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::B<int>::x" "There is no field named x"
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::B<int>::A<int>::x" "There is no field named x"
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::Bint::x" \
+        "No type \"Bint\" within class or namespace \"D\"."
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print D::Bint::A<int>::x" \
+        "No type \"Bint\" within class or namespace \"D\"."
+        gdb_test "print B<int>::x" "There is no field named x"
+        gdb_test "print B<int>::A<int>::x" "There is no field named x"
+        gdb_test "print Bint::x" "There is no field named x"
+        gdb_test "print Bint::A<int>::x" "There is no field named x"
+    }
     gdb_test "print C::A<int>::c" "There is no field named c"
-    gdb_test "print D::B<int>::x" "There is no field named x"
-    gdb_test "print D::B<int>::A<int>::x" "There is no field named x"
-    gdb_test "print D::Bint::x" \
-	"No type \"Bint\" within class or namespace \"D\"."
-    gdb_test "print D::Bint::A<int>::x" \
-	"No type \"Bint\" within class or namespace \"D\"."
-    gdb_test "print B<int>::x" "There is no field named x"
-    gdb_test "print B<int>::A<int>::x" "There is no field named x"
-    gdb_test "print Bint::x" "There is no field named x"
-    gdb_test "print Bint::A<int>::x" "There is no field named x"
+    gdb_test "print D::C::A<int>::c" "There is no field named c"
     gdb_test "print D::C::x" "There is no field named x"
     gdb_test "print C::x" "There is no field named x"
     gdb_test "print D::C::A<int>::x" "There is no field named x"
@@ -117,8 +146,14 @@ with_test_prefix "at D::f (invalid expressions)" {
 
 # Test some ambiguous names
 with_test_prefix "at D::f (ambiguous names)" {
-    gdb_test "print B<int>::common" " = 200"
-    gdb_test "print Bint::common" " = 200"
+    if {[test_compiler_info {gcc-*-*}]} {
+        unsupported "gdb/16841"
+    } else {
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print B<int>::common" " = 200"
+        setup_kfail gdb/16841 *-*-*
+        gdb_test "print Bint::common" " = 200"
+    }
     gdb_test "print C::common" " = 300"
     gdb_test "print am.i" " = 1000"
     gdb_test "print am.A<int>::i" \
