aaron.ballman added a comment.

In http://reviews.llvm.org/D11784#224430, @alexfh wrote:

> In http://reviews.llvm.org/D11784#224421, @aaron.ballman wrote:
>
> > In http://reviews.llvm.org/D11784#224386, @alexfh wrote:
> >
> > > > One thing I am not certain of in this patch is how to test it. I have 
> > > > some rudimentary tests, but am unable to test the "note:" diagnostics 
> > > > from 
> > >
> > > >  FileCheck (attempting to add any cause the "warning:" diagnostics to 
> > > > not be found).
> > >
> > >
> > > Can you give an example of what you do and what results do you get?
> >
> >
> > I put "CHECK: :[[@LINE+1]]:3: note: copy constructor being called" into the 
> > source file, and tests no longer pass because it cannot find the matching 
> > "warning: " diagnostic. If I then remove the warning diagnostic, the tests 
> > pass again. So it seems I can test one or the other, but not both. 
> > Specifically (with note and warning):
>
>
> Might it be that you got the line offsets in @LINE incorrectly? A test like 
> this should work, if both the warning and the note are on the same line:
>
>   // CHECK: :[[@LINE+2]]:...: warning: ....
>   // CHECK: :[[@LINE+1]]:...: note: ....
>   some_line_that_generates_a_warning_with_a_note();


The warning is on line 28, the note is on line 20.

> If your note is generated on a different line than the warning (e.g. class 
> declaration vs. the incorrect use of a variable), then you may have to use 
> @LINE+x for the warning and the line number verbatim for the note check.


Ah, interesting -- I was avoiding that because of how fragile it is. Also, it 
seems to require me grouping the CHECK lines together. e.g.) this fails:

struct B {

  B() {}
  B(const B&) {}
  B(B &&) {}   // CHECK: 19:3: note: copy constructor being called

};

struct D : B {

  D() : B() {}
  D(const D &RHS) : B(RHS) {}
  // CHECK: :[[@LINE+1]]:16: warning: move constructor initializes base class 
by calling a copy constructor [misc-move-constructor-base]
  D(D &&RHS) : B(RHS) {}

};

But this succeeds:

struct B {

  B() {}
  B(const B&) {}
  B(B &&) {}

};

struct D : B {

  D() : B() {}
  D(const D &RHS) : B(RHS) {}
  // CHECK: :[[@LINE+2]]:16: warning: move constructor initializes base class 
by calling a copy constructor [misc-move-constructor-base]
  // CHECK: 19:3: note: copy constructor being called
  D(D &&RHS) : B(RHS) {}

};

In any event, there's now a solution that lets me test the notes, so that's 
great. Thank you!

~Aaron


http://reviews.llvm.org/D11784



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to