rsmith added a comment.
Everything other than the diagnostics change LGTM; can we handle the
diagnostics change as a central patch and put this fallback logic directly into
the diagnostics formatting code, so it applies everywhere we try to print the
name of an unnamed class?
================
Comment at: lib/Sema/SemaType.cpp:7168-7176
@@ -7167,3 +7167,11 @@
!RD->hasTrivialDefaultConstructor()) {
- Diag(RD->getLocation(), diag::note_non_literal_no_constexpr_ctors) << RD;
+ // If the class does not have a name (for e.g. a lambda's closure class)
use
+ // its type which we should know how to pretty-print, otherwise use the
+ // class's name.
+ auto &&DiagBuilder =
+ Diag(RD->getLocation(), diag::note_non_literal_no_constexpr_ctors);
+ if (!RD->getIdentifier())
+ DiagBuilder << Context.getRecordType(RD);
+ else
+ DiagBuilder << RD;
} else if (RD->hasNonLiteralTypeFieldsOrBases()) {
----------------
This seems like something that would be better handled centrally by the
diagnostics machinery.
https://reviews.llvm.org/D22662
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits