<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Mar 30, 2014 at 11:05 AM, Nico Rieck <span dir="ltr"><<a href="mailto:nico.rieck@gmail.com" target="_blank">nico.rieck@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On 30.03.2014 19:35, Reid Kleckner wrote:<br>
> Should we be more specific here?  Something like:<br>
> redeclaration %0 adds attribute %1 which was missing the previous<br>
> declaration<br>
<br>
</div>Sounds like a good idea. I would phrase it: "redeclaration of %q0 may<br>
not add %q1 attribute" (or rather "cannot"?) which would look like:<br>
<br>
t.cpp:222:28: error: redeclaration of 'X::f' may not add 'dllexport'<br>
attribute<br>
__declspec(dllexport) void X::f() {}<br>
                              ^<br>
t.cpp:219:6: note: previous declaration is here<br>
  void f();<br></blockquote><div><br></div><div>I like your wording better.  I'd go with "cannot".  DiagnosticSemaKinds.td has 28 "may not" instances and ~370 "cannot" instances. </div></div>
<br></div></div>