[PATCH] D23241: Add the notion of deferred diagnostics.
Justin Lebar via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 9 10:23:20 PDT 2016
jlebar added a comment.
Reid, I'd still like you to have a look at this one if you don't mind, since it's outside my and Art's core competencies.
Comment at: clang/lib/CodeGen/CodeGenModule.cpp:2886
@@ +2885,3 @@
+ // Check if this function has diagnostics that should be emitted when we
+ // codegen it. If so, don't eit this function definition, but don't emit the
+ // diags just yet. Emitting an error during codegen stops codegen, and we
> "don't do X, but don't do Y" construction sounds awkward to me.
> I'd reword the whole comment in terms of what the code does -- if there are diagnostics, only collect them to emit at the end of codegen. Otherwise, proceed to emit function definition.
Thanks. I tried to reword it, phal.
I also realized that this was skipping functions if they contained *any* deferred diags, but that's not right -- we only want to skip functions that contain deferred errors. Fixed that too.
I wish I could use StoredDiagnostic instead of PartialDiagnosticAt, but I don't see a way to create a StoredDiagnostic for an error without setting the HasError bit in the DiagnosticEngine. I need to carefully avoid setting that bit, otherwise we don't even make it to codegen. (In fact it looks like the code for emitting diagnostics assumes that creating a StoredDiagnostic sets the bit, because I don't see it setting that bit when we emit the StoredDiagnostic.)
More information about the cfe-commits