[CUDA] Emit deferred diagnostics during Sema rather than during codegen.
authorJustin Lebar <jlebar@google.com>
Thu, 13 Oct 2016 20:52:12 +0000 (20:52 +0000)
committerJustin Lebar <jlebar@google.com>
Thu, 13 Oct 2016 20:52:12 +0000 (20:52 +0000)
commit23d954241b42e9c7d7d515a7dee308a720006c3e
treeecb684aa6198467ba8bd9ba3cf504a8dd56c81d6
parenta81682aad4c8bff4d5465aceb7e95572cadfcb66
[CUDA] Emit deferred diagnostics during Sema rather than during codegen.

Summary:
Emitting deferred diagnostics during codegen was a hack.  It did work,
but usability was poor, both for us as compiler devs and for users.  We
don't codegen if there are any sema errors, so for users this meant that
they wouldn't see deferred errors if there were any non-deferred errors.
For devs, this meant that we had to carefully split up our tests so that
when we tested deferred errors, we didn't emit any non-deferred errors.

This change moves checking for deferred errors into Sema.  See the big
comment in SemaCUDA.cpp for an overview of the idea.

This checking adds overhead to compilation, because we have to maintain
a partial call graph.  As a result, this change makes deferred errors a
CUDA-only concept (whereas before they were a general concept).  If
anyone else wants to use this framework for something other than CUDA,
we can generalize at that time.

This patch makes the minimal set of test changes -- after this lands,
I'll go back through and do a cleanup of the tests that we no longer
have to split up.

Reviewers: rnk

Subscribers: cfe-commits, rsmith, tra

Differential Revision: https://reviews.llvm.org/D25541

llvm-svn: 284158
12 files changed:
clang/include/clang/AST/ASTContext.h
clang/include/clang/AST/Decl.h
clang/include/clang/Sema/Sema.h
clang/lib/AST/Decl.cpp
clang/lib/CodeGen/CodeGenModule.cpp
clang/lib/CodeGen/CodeGenModule.h
clang/lib/Sema/SemaCUDA.cpp
clang/test/Parser/lambda-attr.cu
clang/test/SemaCUDA/call-host-fn-from-device.cu
clang/test/SemaCUDA/function-overload.cu
clang/test/SemaCUDA/method-target.cu
clang/test/SemaCUDA/reference-to-kernel-fn.cu