diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 59b0e40b0004..782c674375d6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,11 @@
+2010-04-06  Taras Glek  <taras@mozilla.com>
+	    Jason Merrill  <jason@redhat.com>
+
+	* parser.c (cp_parser_class_specifier): Set class location to that
+	of IDENTIFIER_NODE instead of '{' when possible.
+	* semantics.c (begin_class_definition): Do not overide locations
+	with less precise ones.
+
 2010-04-06  Jason Merrill  <jason@redhat.com>
 
 	PR c++/43648
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 8a1bb9f600ed..e25c280f4867 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -16395,6 +16395,9 @@ cp_parser_class_head (cp_parser* parser,
       end_specialization ();
       --parser->num_template_parameter_lists;
     }
+
+  if (type)
+    DECL_SOURCE_LOCATION (TYPE_NAME (type)) = type_start_token->location;
   *attributes_p = attributes;
   return type;
 }
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 1c47ded84d00..5cf4b693f26e 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -2409,9 +2409,6 @@ begin_class_definition (tree t, tree attributes)
       pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
     }
 
-  /* Update the location of the decl.  */
-  DECL_SOURCE_LOCATION (TYPE_NAME (t)) = input_location;
-
   if (TYPE_BEING_DEFINED (t))
     {
       t = make_class_type (TREE_CODE (t));
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 31103d12fb53..c0b46185d61a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,45 @@
+2010-04-06  Jason Merrill  <jason@redhat.com>
+
+	* g++.dg/cpp0x/pr31437.C: Adjust error location.
+	* g++.dg/ext/attrib18.C: Likewise.
+	* g++.dg/ext/bitfield2.C: Likewise.
+	* g++.dg/ext/bitfield4.C: Likewise.
+	* g++.dg/ext/visibility/warn2.C: Likewise.
+	* g++.dg/ext/visibility/warn3.C: Likewise.
+	* g++.dg/gomp/pr26690-1.C: Likewise.
+	* g++.dg/inherit/covariant7.C: Likewise.
+	* g++.dg/init/synth2.C: Likewise.
+	* g++.dg/lookup/using7.C: Likewise.
+	* g++.dg/other/crash-4.C: Likewise.
+	* g++.dg/other/error13.C: Likewise.
+	* g++.dg/other/error20.C: Likewise.
+	* g++.dg/parse/crash31.C: Likewise.
+	* g++.dg/parse/error16.C: Likewise.
+	* g++.dg/parse/error19.C: Likewise.
+	* g++.dg/parse/error27.C: Likewise.
+	* g++.dg/parse/error28.C: Likewise.
+	* g++.dg/parse/fused-params1.C: Likewise.
+	* g++.dg/template/error2.C: Likewise.
+	* g++.dg/template/local6.C: Likewise.
+	* g++.dg/template/qualttp15.C: Likewise.
+	* g++.dg/warn/Wnvdtor-2.C: Likewise.
+	* g++.dg/warn/anonymous-namespace-3.C: Likewise.
+	* g++.old-deja/g++.benjamin/15309-1.C: Likewise.
+	* g++.old-deja/g++.brendan/crash29.C: Likewise.
+	* g++.old-deja/g++.eh/spec6.C: Likewise.
+	* g++.old-deja/g++.jason/crash3.C: Likewise.
+	* g++.old-deja/g++.jason/destruct2.C: Likewise.
+	* g++.old-deja/g++.law/ctors5.C: Likewise.
+	* g++.old-deja/g++.law/ctors9.C: Likewise.
+	* g++.old-deja/g++.mike/p3538a.C: Likewise.
+	* g++.old-deja/g++.mike/p3538b.C: Likewise.
+	* g++.old-deja/g++.other/struct1.C: Likewise.
+	* g++.old-deja/g++.other/volatile1.C: Likewise.
+	* g++.old-deja/g++.pt/crash36.C: Likewise.
+	* g++.old-deja/g++.pt/derived3.C: Likewise.
+	* g++.old-deja/g++.robertl/eb109.C: Likewise.
+	* g++.old-deja/g++.robertl/eb4.C: Likewise.
+
 2010-04-06  Sebastian Pop  <sebastian.pop@amd.com>
 
 	PR middle-end/43519
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr31437.C b/gcc/testsuite/g++.dg/cpp0x/pr31437.C
index 0e1a888138bc..812c695f4ec0 100644
--- a/gcc/testsuite/g++.dg/cpp0x/pr31437.C
+++ b/gcc/testsuite/g++.dg/cpp0x/pr31437.C
@@ -1,6 +1,6 @@
 // { dg-options "-std=gnu++0x" }
-template <typename... T> struct A
-{ // { dg-error "candidates|A" }
+template <typename... T> struct A // { dg-error "candidates|A" }
+{
   A(T* p) {  // { dg-error "parameter packs|T" }
    (A<T...>*)(p); 
   }
diff --git a/gcc/testsuite/g++.dg/ext/attrib18.C b/gcc/testsuite/g++.dg/ext/attrib18.C
index 0c3a072b5b36..ab9fea0950cb 100644
--- a/gcc/testsuite/g++.dg/ext/attrib18.C
+++ b/gcc/testsuite/g++.dg/ext/attrib18.C
@@ -2,8 +2,8 @@
 // Test that we warn when an attribute preceding the class-key is ignored.
 // { dg-do compile }
 
-__attribute__ ((packed)) struct A
-{				// { dg-warning "attribute" }
+__attribute__ ((packed)) struct A // { dg-warning "attribute" }
+{
   char c;
   int x;
   void f();
diff --git a/gcc/testsuite/g++.dg/ext/bitfield2.C b/gcc/testsuite/g++.dg/ext/bitfield2.C
index 3d89505e2ef1..40effc786a3e 100644
--- a/gcc/testsuite/g++.dg/ext/bitfield2.C
+++ b/gcc/testsuite/g++.dg/ext/bitfield2.C
@@ -3,8 +3,8 @@
 /* { dg-options "" } */
 /* { dg-options "-mno-ms-bitfields" { target i?86-*-netware } } */
 
-struct t
-{ /* { dg-message "note: Offset of packed bit-field 't::b' has changed in GCC 4.4" "" { target pcc_bitfield_type_matters } } */
+struct t /* { dg-message "note: Offset of packed bit-field 't::b' has changed in GCC 4.4" "" { target pcc_bitfield_type_matters } } */
+{
   char a:4;
   char b:8;
   char c:4;
diff --git a/gcc/testsuite/g++.dg/ext/bitfield4.C b/gcc/testsuite/g++.dg/ext/bitfield4.C
index f9858d78c0e6..8dacfaf33cb0 100644
--- a/gcc/testsuite/g++.dg/ext/bitfield4.C
+++ b/gcc/testsuite/g++.dg/ext/bitfield4.C
@@ -2,8 +2,8 @@
 /* { dg-options "" } */
 /* { dg-options "-mno-ms-bitfields" { target i?86-*-netware } } */
 
-struct t
-{ /* { dg-message "note: Offset of packed bit-field 't::b' has changed in GCC 4.4" "" { target pcc_bitfield_type_matters } } */
+struct t /* { dg-message "note: Offset of packed bit-field 't::b' has changed in GCC 4.4" "" { target pcc_bitfield_type_matters } } */
+{
   char a:4;
   char b:8 __attribute__ ((packed));
   char c:4;
diff --git a/gcc/testsuite/g++.dg/ext/visibility/warn2.C b/gcc/testsuite/g++.dg/ext/visibility/warn2.C
index 3a9637db3c7a..475179fd64be 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/warn2.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/warn2.C
@@ -8,8 +8,8 @@ namespace N __attribute ((__visibility__ ("hidden")))
   struct A { };
 }
 
-struct B
-{				// { dg-warning "visibility" }
+struct B			// { dg-warning "visibility" }
+{
   N::A a;
 };
 
diff --git a/gcc/testsuite/g++.dg/ext/visibility/warn3.C b/gcc/testsuite/g++.dg/ext/visibility/warn3.C
index 2d4ec402127c..d1d3ba486eba 100644
--- a/gcc/testsuite/g++.dg/ext/visibility/warn3.C
+++ b/gcc/testsuite/g++.dg/ext/visibility/warn3.C
@@ -14,8 +14,8 @@ void A::f() { }
 
 // This gets a warning because B objects might rely
 // on hidden symbols from A.
-struct B
-{				// { dg-warning "visibility" }
+struct B			// { dg-warning "visibility" }
+{
   A a;
 };
 
diff --git a/gcc/testsuite/g++.dg/gomp/pr26690-1.C b/gcc/testsuite/g++.dg/gomp/pr26690-1.C
index 3b7a4f8d572c..c49c8b721801 100644
--- a/gcc/testsuite/g++.dg/gomp/pr26690-1.C
+++ b/gcc/testsuite/g++.dg/gomp/pr26690-1.C
@@ -1,8 +1,8 @@
 // PR c++/26690
 // { dg-do compile }
 
-struct A
-{					// { dg-message "A::A\\(const A&\\)" }
+struct A			// { dg-message "A::A\\(const A&\\)" }
+{
   A (int);				// { dg-message "candidates" }
 };
 
diff --git a/gcc/testsuite/g++.dg/inherit/covariant7.C b/gcc/testsuite/g++.dg/inherit/covariant7.C
index 596c679f2484..cbd58bb24e19 100644
--- a/gcc/testsuite/g++.dg/inherit/covariant7.C
+++ b/gcc/testsuite/g++.dg/inherit/covariant7.C
@@ -27,7 +27,7 @@ struct c4 : virtual c3, virtual c0, virtual c1
   int m;
 };
 
-struct c6 : c0, c3, c4
-{ // { dg-warning "direct base" "" }
+struct c6 : c0, c3, c4		// { dg-warning "direct base" "" }
+{
   virtual c1 &f2() volatile;
 };
diff --git a/gcc/testsuite/g++.dg/init/synth2.C b/gcc/testsuite/g++.dg/init/synth2.C
index 795ce42893c8..624f10b2a4d6 100644
--- a/gcc/testsuite/g++.dg/init/synth2.C
+++ b/gcc/testsuite/g++.dg/init/synth2.C
@@ -5,8 +5,8 @@ struct G {
   G(G&);			// { dg-message "" "candidate" }
 };
 
-class A
-{				// { dg-error "no match" }
+class A				// { dg-error "no match" }
+{
   const G g;
 };
 
diff --git a/gcc/testsuite/g++.dg/lookup/using7.C b/gcc/testsuite/g++.dg/lookup/using7.C
index b250c5823f57..69e27da4700e 100644
--- a/gcc/testsuite/g++.dg/lookup/using7.C
+++ b/gcc/testsuite/g++.dg/lookup/using7.C
@@ -3,8 +3,8 @@ template <typename T, bool=T::X> struct A
   int i;
 };
 
-template <typename T> struct B : A<T>
-{ // { dg-error "incomplete" }
+template <typename T> struct B : A<T> // { dg-error "incomplete" }
+{
   using A<T>::i; // { dg-error "incomplete" "incomplete" } 
                  // { dg-error "using" "using" { target *-*-* } 8 }
 };
diff --git a/gcc/testsuite/g++.dg/other/crash-4.C b/gcc/testsuite/g++.dg/other/crash-4.C
index bc2c457f1b4d..d6247c44f36b 100644
--- a/gcc/testsuite/g++.dg/other/crash-4.C
+++ b/gcc/testsuite/g++.dg/other/crash-4.C
@@ -14,8 +14,8 @@ struct a
   int m;
   a(const a&);
 };
-struct b
-{ // { dg-error "cannot bind packed field" "" { target { ! default_packed } } }
+struct b // { dg-error "cannot bind packed field" "" { target { ! default_packed } } }
+{
   char c;
   a aa __attribute__((packed)); // { dg-warning "attribute ignored" "" { target default_packed } }
 };
diff --git a/gcc/testsuite/g++.dg/other/error13.C b/gcc/testsuite/g++.dg/other/error13.C
index d3b1eabc0b2f..89e88478679e 100644
--- a/gcc/testsuite/g++.dg/other/error13.C
+++ b/gcc/testsuite/g++.dg/other/error13.C
@@ -1,7 +1,7 @@
 //PR c++/28258
 
-struct A 
-{            // { dg-message "note" }
+struct A			// { dg-message "note" }
+{
   A(void x); // { dg-error "invalid use|incomplete type|candidates" }
 };
 
diff --git a/gcc/testsuite/g++.dg/other/error20.C b/gcc/testsuite/g++.dg/other/error20.C
index 6033c0e783d2..6f3f778ab841 100644
--- a/gcc/testsuite/g++.dg/other/error20.C
+++ b/gcc/testsuite/g++.dg/other/error20.C
@@ -1,8 +1,8 @@
 // PR c++/34275
 // { dg-do compile }
 
-struct A
-{		// { dg-message "candidate is" }
+struct A			// { dg-message "candidate is" }
+{
   virtual A foo ();
 };
 
diff --git a/gcc/testsuite/g++.dg/parse/crash31.C b/gcc/testsuite/g++.dg/parse/crash31.C
index c3fc6790a2fe..0068846755b8 100644
--- a/gcc/testsuite/g++.dg/parse/crash31.C
+++ b/gcc/testsuite/g++.dg/parse/crash31.C
@@ -1,5 +1,5 @@
-struct A
-{ // { dg-error "forward declaration" }
+struct A // { dg-error "forward declaration" }
+{
   A : A; // { dg-error "expected|incomplete" }
   A : B; // { dg-error "not declared|incomplete" }
   A : A(); // { dg-error "undefined type|incomplete" }
diff --git a/gcc/testsuite/g++.dg/parse/error16.C b/gcc/testsuite/g++.dg/parse/error16.C
index ba9aacc26e33..3d9dcc334e5b 100644
--- a/gcc/testsuite/g++.dg/parse/error16.C
+++ b/gcc/testsuite/g++.dg/parse/error16.C
@@ -3,7 +3,7 @@
 
 struct A
 {
-  struct B {}; // { dg-error "12:previous definition of 'struct A::B'" }
+  struct B {}; // { dg-error "10:previous definition of 'struct A::B'" }
 };
 
 struct A::B{}; // { dg-error "11:redefinition of 'struct A::B'" }
diff --git a/gcc/testsuite/g++.dg/parse/error19.C b/gcc/testsuite/g++.dg/parse/error19.C
index 39c2d7858373..0955e6a90760 100644
--- a/gcc/testsuite/g++.dg/parse/error19.C
+++ b/gcc/testsuite/g++.dg/parse/error19.C
@@ -1,8 +1,8 @@
 // { dg-options "-fshow-column -fmessage-length=0   -ansi -pedantic-errors -Wno-long-long " }
 // PR C++/17867
 
-struct A
-{  // { dg-message "1:candidate is:" }
+struct A			// { dg-message "8:candidate is:" }
+{
   A(int);
 };
 
diff --git a/gcc/testsuite/g++.dg/parse/error27.C b/gcc/testsuite/g++.dg/parse/error27.C
index c07d1d3a7583..90cb231c0ac8 100644
--- a/gcc/testsuite/g++.dg/parse/error27.C
+++ b/gcc/testsuite/g++.dg/parse/error27.C
@@ -1,8 +1,8 @@
 // { dg-options "-fshow-column -ansi -pedantic-errors -Wno-long-long" }
 // PR c++/20152
 
-struct KrSelectionMode {  virtual void init() = 0; }; // { dg-error "24:previous definition of 'struct KrSelectionMode'" }
-struct KrKDESelectionMode : public KrSelectionMode { void init() { } }; // { dg-error "52:previous definition of 'struct KrKDESelectionMode'" }
+struct KrSelectionMode {  virtual void init() = 0; }; // { dg-error "8:previous definition of 'struct KrSelectionMode'" }
+struct KrKDESelectionMode : public KrSelectionMode { void init() { } }; // { dg-error "8:previous definition of 'struct KrKDESelectionMode'" }
 struct KrSelectionMode {  virtual void init() = 0; }; // { dg-error "8:redefinition of 'struct KrSelectionMode'" }
 struct KrKDESelectionMode : public KrSelectionMode { void init() { } }; // { dg-error "8:redefinition of 'struct KrKDESelectionMode'" }
 KrKDESelectionMode krKDESelectionMode;
diff --git a/gcc/testsuite/g++.dg/parse/error28.C b/gcc/testsuite/g++.dg/parse/error28.C
index 50ad960e09e9..7e235a13b21d 100644
--- a/gcc/testsuite/g++.dg/parse/error28.C
+++ b/gcc/testsuite/g++.dg/parse/error28.C
@@ -2,7 +2,7 @@
 // PR c++/21908
 
 struct virt { virt () {} virt (int i) {} };
-struct der : public virtual virt { // { dg-message "34:der::der" }
+struct der : public virtual virt { // { dg-message "8:der::der" }
   der (int i) : virt(i) {} // { dg-message "3:candidates are: der" }
 };
 struct top : public der { 
diff --git a/gcc/testsuite/g++.dg/parse/fused-params1.C b/gcc/testsuite/g++.dg/parse/fused-params1.C
index adb47a0522ae..33732fc2871d 100644
--- a/gcc/testsuite/g++.dg/parse/fused-params1.C
+++ b/gcc/testsuite/g++.dg/parse/fused-params1.C
@@ -2,8 +2,8 @@
 // Origin: Alexander Zvyagin <Alexander.Zviagine@cern.ch>
 // { dg-do compile }
 
-template <int N,typename T> struct A
-{ //  { dg-error "" } 
+template <int N,typename T> struct A //  { dg-error "" }
+{
     typedef T X;
     template <int M> void foo (const A<M,X>&);
 };
diff --git a/gcc/testsuite/g++.dg/template/error2.C b/gcc/testsuite/g++.dg/template/error2.C
index 86486a2e7f26..5bd9b870e7a5 100644
--- a/gcc/testsuite/g++.dg/template/error2.C
+++ b/gcc/testsuite/g++.dg/template/error2.C
@@ -15,8 +15,8 @@ template<class T> struct X
 template<class T >
 struct Derived
 {
-  class Nested : public X<T>
-  { // { dg-message "instantiated" "" }
+  class Nested : public X<T> // { dg-message "instantiated" "" }
+  {
   };
   
   Nested m; // { dg-message "instantiated" "" }
diff --git a/gcc/testsuite/g++.dg/template/local6.C b/gcc/testsuite/g++.dg/template/local6.C
index c691c4c789b8..6c5e8ac7022c 100644
--- a/gcc/testsuite/g++.dg/template/local6.C
+++ b/gcc/testsuite/g++.dg/template/local6.C
@@ -1,5 +1,5 @@
-template <class T> struct PCVector2
-{ // { dg-message "candidate is" }
+template <class T> struct PCVector2 // { dg-message "candidate is" }
+{
     template <class T2> PCVector2(const PCVector2<T> &cv) ;
 
     PCVector2<T> operator- (const PCVector2<T> &ov) const 
diff --git a/gcc/testsuite/g++.dg/template/qualttp15.C b/gcc/testsuite/g++.dg/template/qualttp15.C
index 0f97c32fcb87..b1c61195d42f 100644
--- a/gcc/testsuite/g++.dg/template/qualttp15.C
+++ b/gcc/testsuite/g++.dg/template/qualttp15.C
@@ -12,8 +12,8 @@ template <template <class> class TT> struct X
 	TT<int> y;
 };
 
-template <class T> struct X<T::template B>
-{	// { dg-error "previous" }
+template <class T> struct X<T::template B> // { dg-error "previous" }
+{
 	T z;
 };
 
diff --git a/gcc/testsuite/g++.dg/warn/Wnvdtor-2.C b/gcc/testsuite/g++.dg/warn/Wnvdtor-2.C
index cd078ac05213..d40de3d7c1a5 100644
--- a/gcc/testsuite/g++.dg/warn/Wnvdtor-2.C
+++ b/gcc/testsuite/g++.dg/warn/Wnvdtor-2.C
@@ -6,37 +6,37 @@
 // destructor, in which case it would be possible but unsafe to delete
 // an instance of a derived class through a pointer to the base class.
 
-struct A
-{ // { dg-bogus "non-virtual destructor" }
+struct A // { dg-bogus "non-virtual destructor" }
+{
 protected:
   ~A();
 public:
   virtual void f() = 0;
 };
 
-struct B
-{ // { dg-bogus "non-virtual destructor" }
+struct B // { dg-bogus "non-virtual destructor" }
+{
 private:
   ~B();
 public:
   virtual void f() = 0;
 };
 
-struct C
-{ // { dg-warning "non-virtual destructor" }
+struct C // { dg-warning "non-virtual destructor" }
+{
   virtual void f() = 0;
 };
 
-struct D
-{ // { dg-warning "non-virtual destructor" }
+struct D // { dg-warning "non-virtual destructor" }
+{
   ~D();
   virtual void f() = 0;
 };
 
 struct E;
 
-struct F
-{ // { dg-warning "non-virtual destructor" }
+struct F // { dg-warning "non-virtual destructor" }
+{
 protected:
   friend class E;
   ~F();
@@ -44,8 +44,8 @@ public:
   virtual void f() = 0;
 };
 
-struct G
-{ // { dg-warning "non-virtual destructor" }
+struct G // { dg-warning "non-virtual destructor" }
+{
 private:
   friend class E;
   ~G();
diff --git a/gcc/testsuite/g++.dg/warn/anonymous-namespace-3.C b/gcc/testsuite/g++.dg/warn/anonymous-namespace-3.C
index fee48b46017d..0ba6790f4c99 100644
--- a/gcc/testsuite/g++.dg/warn/anonymous-namespace-3.C
+++ b/gcc/testsuite/g++.dg/warn/anonymous-namespace-3.C
@@ -7,7 +7,7 @@
 struct B { std::auto_ptr<A> p; };
 
 #line 10 "foo.C"
-struct C
-{ // { dg-warning "uses the anonymous namespace" }
+struct C		   // { dg-warning "uses the anonymous namespace" }
+{
   std::auto_ptr<A> p;
 };
diff --git a/gcc/testsuite/g++.old-deja/g++.benjamin/15309-1.C b/gcc/testsuite/g++.old-deja/g++.benjamin/15309-1.C
index ae13ee843147..aa5530fff7fd 100644
--- a/gcc/testsuite/g++.old-deja/g++.benjamin/15309-1.C
+++ b/gcc/testsuite/g++.old-deja/g++.benjamin/15309-1.C
@@ -9,8 +9,8 @@ public:
   ~bahamian ();  
 };
 
-class miami : public bahamian
-{ // { dg-warning "" } // WARNING -
+class miami : public bahamian	// { dg-warning "" } // WARNING -
+{
 public:
    miami ();
    ~miami ();
diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash29.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash29.C
index fd2fa2ff9860..33be95f20447 100644
--- a/gcc/testsuite/g++.old-deja/g++.brendan/crash29.C
+++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash29.C
@@ -6,8 +6,8 @@ union Value
 	Value(){}
 };
 
-struct GlobalAddress
-{// { dg-message "note" }
+struct GlobalAddress		// { dg-message "note" }
+{
 	GlobalAddress(Value *nvar){} // { dg-message "candidates" }
 };
 
diff --git a/gcc/testsuite/g++.old-deja/g++.eh/spec6.C b/gcc/testsuite/g++.old-deja/g++.eh/spec6.C
index b6e7f2645523..015bbefdfb54 100644
--- a/gcc/testsuite/g++.old-deja/g++.eh/spec6.C
+++ b/gcc/testsuite/g++.old-deja/g++.eh/spec6.C
@@ -122,8 +122,8 @@ struct B1 : A
 {
 };
 
-struct C : A, A1
-{ // { dg-error "" } looser throw - A::~A()
+struct C : A, A1		// { dg-error "" } looser throw - A::~A()
+{
   virtual void foo() throw(int);    // { dg-error "" } looser throw - A::foo
   virtual void bar() throw(int);    // { dg-error "" } looser throw - A1::bar
 };
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash3.C b/gcc/testsuite/g++.old-deja/g++.jason/crash3.C
index 5d5b3af9cb4f..e94cc7c97815 100644
--- a/gcc/testsuite/g++.old-deja/g++.jason/crash3.C
+++ b/gcc/testsuite/g++.old-deja/g++.jason/crash3.C
@@ -2,8 +2,8 @@
 // Bug: g++ tries to generate initialization semantics for a Node from an int,
 // and fails.
 
-struct Node
-{				// { dg-message "note" } 
+struct Node			// { dg-message "note" }
+{
   Node* child[2];
 };
 
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/destruct2.C b/gcc/testsuite/g++.old-deja/g++.jason/destruct2.C
index a28860f93686..62c8f8fba2f6 100644
--- a/gcc/testsuite/g++.old-deja/g++.jason/destruct2.C
+++ b/gcc/testsuite/g++.old-deja/g++.jason/destruct2.C
@@ -10,8 +10,8 @@ struct X
 struct Y : public X
 {};
 
-struct Z : public Y, public X
-{};				// { dg-warning "" } 
+struct Z : public Y, public X	// { dg-warning "" }
+{};
 
 void foo ()
 {
diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors5.C b/gcc/testsuite/g++.old-deja/g++.law/ctors5.C
index 02c5fb06fe4a..7c376229b697 100644
--- a/gcc/testsuite/g++.old-deja/g++.law/ctors5.C
+++ b/gcc/testsuite/g++.old-deja/g++.law/ctors5.C
@@ -5,8 +5,8 @@
 // Subject: bug in handling static const object of the enclosing class
 // Date: Tue, 1 Sep 92 10:38:44 EDT
 
-class X
-{ // { dg-message "1:X::X\\(const X&\\)" } implicit constructor
+class X	      // { dg-message "7:X::X\\(const X&\\)" } implicit constructor
+{
   private:
     int x;
   public:
diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors9.C b/gcc/testsuite/g++.old-deja/g++.law/ctors9.C
index 17207f6acf5a..43ba1262c95b 100644
--- a/gcc/testsuite/g++.old-deja/g++.law/ctors9.C
+++ b/gcc/testsuite/g++.old-deja/g++.law/ctors9.C
@@ -20,8 +20,8 @@ Foo::Foo(int aa)
 { }
 
 
-struct var_Foo: public Foo
-{ // { dg-message "note" }  base.*// ERROR -  in class.*
+struct var_Foo: public Foo // { dg-message "note" }  base.*// ERROR -  in class.*
+{
   var_Foo* operator-> () {return this;}
 };
 
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3538a.C b/gcc/testsuite/g++.old-deja/g++.mike/p3538a.C
index 1da61f390d7a..a2c985386e4d 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/p3538a.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/p3538a.C
@@ -24,8 +24,8 @@ const ccObjectInfo& ccHandle<T>::repInvariant (int)
 class ccHandleBase : public ccObjectInfo
 {};
 
-class cc_CircleHdl : public virtual ccHandleBase, public ccObjectInfo
-{				// { dg-warning "" } 
+class cc_CircleHdl : public virtual ccHandleBase, public ccObjectInfo // { dg-warning "" } 
+{
 public:
   virtual const ccObjectInfo& ri (int);
 };
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3538b.C b/gcc/testsuite/g++.old-deja/g++.mike/p3538b.C
index e9fcb0cba01b..96ba124a1265 100644
--- a/gcc/testsuite/g++.old-deja/g++.mike/p3538b.C
+++ b/gcc/testsuite/g++.old-deja/g++.mike/p3538b.C
@@ -26,8 +26,8 @@ const ccObjectInfo& ccHandle<T>::repInvariant (int)
 class ccHandleBase : public ccObjectInfo
 {};
 
-class cc_CircleHdl : public virtual ccHandleBase, public ccObjectInfo
-{				// { dg-warning "" } 
+class cc_CircleHdl : public virtual ccHandleBase, public ccObjectInfo // { dg-warning "" } 
+{
 public:
   virtual const ccObjectInfo& repInvariant (int);
 };
diff --git a/gcc/testsuite/g++.old-deja/g++.other/struct1.C b/gcc/testsuite/g++.old-deja/g++.other/struct1.C
index b1f943f604fc..699d524b9e8b 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/struct1.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/struct1.C
@@ -6,36 +6,36 @@
 // Duplicate definitions are wrong, we should just cough
 // politely, but we used to die horribly.
 
-class Y
-{   // { dg-error "" } previous definition
+class Y // { dg-error "" } previous definition
+{
 };
 class Y // { dg-error "" } redefinition
 {   
 };
 
-template<class T> class X
-{   // { dg-error "" } previous definition
+template<class T> class X // { dg-error "" } previous definition
+{
 };
 template<class T> class X // { dg-error "" } redefinition
 {   
 };
 
-template<class T> class X<T *>
-{   // { dg-error "" } previous definition
+template<class T> class X<T *> // { dg-error "" } previous definition
+{
 };
 template<class T> class X<T *> // { dg-error "" } redefinition
 {   
 };
 
-template<> class X<int>
-{   // { dg-error "" } previous definition
+template<> class X<int> // { dg-error "" } previous definition
+{
 };
 template<> class X<int> // { dg-error "" } redefinition
 {   
 };
 
-template<> class X<int *>
-{   // { dg-error "" } previous definition
+template<> class X<int *> // { dg-error "" } previous definition
+{
 };
 template<> class X<int *> // { dg-error "" } redefinition
 {   
diff --git a/gcc/testsuite/g++.old-deja/g++.other/volatile1.C b/gcc/testsuite/g++.old-deja/g++.other/volatile1.C
index 9e72ea266a18..5c5872870360 100644
--- a/gcc/testsuite/g++.old-deja/g++.other/volatile1.C
+++ b/gcc/testsuite/g++.old-deja/g++.other/volatile1.C
@@ -2,9 +2,8 @@
 // Test that failed lvalue-to-rvalue conversion of vf doesn't crash the
 // compiler.
 
-class f_class
-{ };				// { dg-message "candidates" "candidates" } 
-// { dg-message "note" "note" { target *-*-* } 6 }
+class f_class		       // { dg-message "note" "candidates" }
+{ };
 
 volatile f_class
 ret_v_f_class()
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/crash36.C b/gcc/testsuite/g++.old-deja/g++.pt/crash36.C
index 9bf99d162807..fa9401bee03a 100644
--- a/gcc/testsuite/g++.old-deja/g++.pt/crash36.C
+++ b/gcc/testsuite/g++.old-deja/g++.pt/crash36.C
@@ -13,8 +13,8 @@ struct iterator {
 
 
 template <class Iterator>
-struct reverse_iterator : public
-iterator<typename iterator_traits<Iterator>::iterator_category> { // { dg-message "instantiated" } no type iterator_category
+struct reverse_iterator : public // { dg-message "instantiated" } no type iterator_category
+iterator<typename iterator_traits<Iterator>::iterator_category> {
   protected:
   Iterator current;
   
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/derived3.C b/gcc/testsuite/g++.old-deja/g++.pt/derived3.C
index 2c5604923253..b0d1d3bb2b80 100644
--- a/gcc/testsuite/g++.old-deja/g++.pt/derived3.C
+++ b/gcc/testsuite/g++.old-deja/g++.pt/derived3.C
@@ -5,8 +5,8 @@
 
 template<class T>
 class X {
-	class Y : public T
-	{ // { dg-error "base type .* fails to be" }
+	class Y : public T	// { dg-error "base type .* fails to be" }
+	{
 	};
 	Y y;			// { dg-message "instantiated" }
 };
diff --git a/gcc/testsuite/g++.old-deja/g++.robertl/eb109.C b/gcc/testsuite/g++.old-deja/g++.robertl/eb109.C
index 5a70e194439e..dae13b67bd57 100644
--- a/gcc/testsuite/g++.old-deja/g++.robertl/eb109.C
+++ b/gcc/testsuite/g++.old-deja/g++.robertl/eb109.C
@@ -19,8 +19,8 @@ inline istream& operator>>(istream& is, Empty& ) { return is;}
 
 
 template<class VertexType, class EdgeType>
-class Graph
-{  // { dg-message "note" } candidates
+class Graph			// { dg-message "note" } candidates
+{
   public:
     // public type interface
     typedef std::map<int, EdgeType > Successor;
diff --git a/gcc/testsuite/g++.old-deja/g++.robertl/eb4.C b/gcc/testsuite/g++.old-deja/g++.robertl/eb4.C
index 5f82e1fc9264..dfd3d6ceda4e 100644
--- a/gcc/testsuite/g++.old-deja/g++.robertl/eb4.C
+++ b/gcc/testsuite/g++.old-deja/g++.robertl/eb4.C
@@ -16,8 +16,8 @@ public:
         int i;
         };
 
-class some_derived : public some_base
-        {  // { dg-message "note" }
+class some_derived : public some_base // { dg-message "note" }
+        {
 public:
         class derived_func_args;
         void func(derived_func_args &);
diff --git a/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc b/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc
index a874814f42d2..e09ab757b546 100644
--- a/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/19_diagnostics/error_category/cons/copy_neg.cc
@@ -33,6 +33,6 @@ int main()
 }
 
 // { dg-error "deleted function" "" { target *-*-* } 72 }
-// { dg-error "used here" "" { target *-*-* } 31 }
+// { dg-error "used here" "" { target *-*-* } 30 }
 // { dg-error "first required here" "" { target *-*-* } 30 }
 // { dg-excess-errors "copy constructor" }
diff --git a/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc b/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
index 012482299e8c..e02ab105911a 100644
--- a/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/27_io/ios_base/cons/copy_neg.cc
@@ -32,7 +32,7 @@ void test02()
   test_base io1;
   test_base io2 = io1; 
 }
-// { dg-error "within this context" "" { target *-*-* } 27 } 
+// { dg-error "within this context" "" { target *-*-* } 26 }
 // { dg-error "synthesized" "" { target *-*-* } 33 } 
 // { dg-error "is private" "" { target *-*-* } 785 } 
 // { dg-error "copy constructor" "" { target *-*-* } 0 } 
diff --git a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
index cafaf39e5154..ba3dd763bd51 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/add_unsigned_integer_neg.cc
@@ -36,4 +36,4 @@ int main()
 }
 
 // { dg-error "invalid use of incomplete" "" { target *-*-* } 28 } 
-// { dg-error "declaration of" "" { target *-*-* } 62 } 
+// { dg-error "declaration of" "" { target *-*-* } 61 }
diff --git a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
index 0b73904e4a79..2347a14c0e72 100644
--- a/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
+++ b/libstdc++-v3/testsuite/ext/type_traits/remove_unsigned_integer_neg.cc
@@ -36,4 +36,4 @@ int main()
 }
 
 // { dg-error "invalid use of incomplete" "" { target *-*-* } 28 } 
-// { dg-error "declaration of" "" { target *-*-* } 105 } 
+// { dg-error "declaration of" "" { target *-*-* } 104 }