aaron.ballman added inline comments.

================
Comment at: include/clang/Basic/Attr.td:2096
+def TriviallyRelocatable : InheritableAttr {
+  let Spellings = [CXX11<"", "trivially_relocatable", 200809>,
+                   CXX11<"clang", "trivially_relocatable">];
----------------
erichkeane wrote:
> Quuxplusone wrote:
> > erichkeane wrote:
> > > This spelling is almost definitely not acceptable until it is in the 
> > > standard.  Also, why specify that it was added in 2008?
> > Agreed, it should be `[[clang::trivially_relocatable]]` for Clang's 
> > purposes. This spelling was because this patch came from the Godbolt 
> > Compiler Explorer patch where I wanted the shorter/future spelling for 
> > public relations reasons. :)
> > IIUC, the appropriate fix here is to change these two lines from
> > ```
> > let Spellings = [CXX11<"", "trivially_relocatable", "200809">,
> >               CXX11<"clang", "trivially_relocatable">];
> > ```
> > to
> > ```
> > let Spellings = [Clang<"trivially_relocatable">,
> > ```
> > I believe the "200809" was because I wanted it to be available in C++11 
> > mode on Godbolt.
> Yep, thats the suggested fix.
> to
> `let Spellings = [Clang<"trivially_relocatable">,`

Close, but since this attribute has no meaning in C mode, it should be `let 
Spellings = [Clang<"trivially_relocatable", 0>,`


================
Comment at: include/clang/Basic/DiagnosticSemaKinds.td:8207
 
+def err_attribute_missing_on_first_decl : Error<
+  "type %0 declared %1 after its first declaration">;
----------------
erichkeane wrote:
> Quuxplusone wrote:
> > erichkeane wrote:
> > > I'm shocked that there isn't a different diagnostic to do this same 
> > > thing.  @aaron.ballman likely knows better...  I haven't seen the usage 
> > > yet, but I presume you don't necessarily want a behavior that doesn't 
> > > allow forward declarations.
> > I would be very happy to see this diagnostic get into trunk separately and 
> > earlier than D50119. There are some other diagnostics that could be merged 
> > with this one, e.g. `[[noreturn]]` needs a version of this diagnostic, and 
> > I believe `[[clang::trivial_abi]]` should have it added.
> > 
> > I don't know how to link to comments on Phabricator, but Ctrl+F downward 
> > for this example:
> > ```
> > struct S { S(S&&); ~S(); };
> > std::vector<S> vec;
> > struct [[trivially_relocatable]] S;  // ha ha, now you have to re-do all of 
> > vector's codegen!
> > ```
> > This is why it is important to diagnose and disallow "backward 
> > declarations." I don't particularly care about "forward declarations" 
> > (either to allow or disallow them). The attribute would end up getting used 
> > only on library types where IMHO nobody should ever be forward-declaring 
> > them anyway. E.g. it is not a good idea for a regular C++ programmer to 
> > forward-declare `unique_ptr`. But if there's a way to allow 
> > forward-declarations (when the type remains incomplete) while disallowing 
> > backward-declarations (adding the attribute to an already-complete type), 
> > then I will be happy to do it.
> Sure, I get that... I'm just surprised/amazed it doesn't already exist.  
> Hopefully Aaron takes a look.
Yeah, I'm also surprised this doesn't already exist, but... it doesn't seem to. 
We have `err_noreturn_missing_on_first_decl`, 
`err_carries_dependency_missing_on_first_decl`, and 
`err_internal_linkage_redeclaration` to all do the same thing.


Repository:
  rC Clang

https://reviews.llvm.org/D50119



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

Reply via email to