]> granicus.if.org Git - clang/commitdiff
When diagnosing multiple mem-initializers in a delegating ctor, point to the delegati...
authorRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 14 Sep 2012 18:21:10 +0000 (18:21 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 14 Sep 2012 18:21:10 +0000 (18:21 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163919 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaDeclCXX.cpp
test/SemaCXX/cxx0x-delegating-ctors.cpp

index 7c97453d6fc1345317500e53774ee15a5d619643..6fe3b6869a483f41974b9154c934d7c691ca9609 100644 (file)
@@ -3346,11 +3346,10 @@ void Sema::ActOnMemInitializers(Decl *ConstructorDecl,
     } else {
       assert(Init->isDelegatingInitializer());
       // This must be the only initializer
-      if (i != 0 || NumMemInits > 1) {
-        Diag(MemInits[0]->getSourceLocation(),
+      if (NumMemInits != 1) {
+        Diag(Init->getSourceLocation(),
              diag::err_delegating_initializer_alone)
-          << MemInits[0]->getSourceRange();
-        HadError = true;
+          << Init->getSourceRange() << MemInits[i ? 0 : 1]->getSourceRange();
         // We will treat this as being the only initializer.
       }
       SetDelegatingInitializer(Constructor, MemInits[i]);
index 2d49f0fc599d3fd88485aa3b9045f70cb15177c4..a34ee4fcb024f91ced41569c77962dfb3e062451 100644 (file)
@@ -33,7 +33,9 @@ foo::foo (const float &f) : foo(&f) { //expected-error{{creates a delegation cyc
                                       //expected-note{{which delegates to}}
 }
 
-foo::foo (char) : i(3), foo(3) { // expected-error{{must appear alone}}
+foo::foo (char) :
+  i(3),
+  foo(3) { // expected-error{{must appear alone}}
 }
 
 // This should not cause an infinite loop