]> granicus.if.org Git - clang/commit
[CUDA] Raise an error if a wrong-side call is codegen'ed.
authorJustin Lebar <jlebar@google.com>
Mon, 15 Aug 2016 23:00:49 +0000 (23:00 +0000)
committerJustin Lebar <jlebar@google.com>
Mon, 15 Aug 2016 23:00:49 +0000 (23:00 +0000)
commit2be279f314d7f2a45d0266d4103f520deb25f901
tree935d40fe934d3c48cefe97475a8d1e53d54bdceb
parent836da9f5b05ef4fd9d24d4fce64a4a3e22720196
[CUDA] Raise an error if a wrong-side call is codegen'ed.

Summary:
Some function calls in CUDA are allowed to appear in
semantically-correct programs but are an error if they're ever
codegen'ed.  Specifically, a host+device function may call a host
function, but it's an error if such a function is ever codegen'ed in
device mode (and vice versa).

Previously, clang made no attempt to catch these errors.  For the most
part, they would be caught by ptxas, and reported as "call to unknown
function 'foo'".

Now we catch these errors and report them the same as we report other
illegal calls (e.g. a call from a host function to a device function).

This has a small change in error-message behavior for calls that were
previously disallowed (e.g. calls from a host to a device function).
Previously, we'd catch disallowed calls fairly early, before doing
additional semantic checking e.g. of the call's arguments.  Now we catch
these illegal calls at the very end of our semantic checks, so we'll
only emit a "illegal CUDA call" error if the call is otherwise
well-formed.

Reviewers: tra, rnk

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@278759 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Sema/Sema.h
lib/Sema/SemaCUDA.cpp
lib/Sema/SemaDeclCXX.cpp
lib/Sema/SemaExpr.cpp
lib/Sema/SemaOverload.cpp
test/CodeGenCUDA/host-device-calls-host.cu [deleted file]
test/SemaCUDA/Inputs/cuda.h
test/SemaCUDA/call-device-fn-from-host.cu [new file with mode: 0644]
test/SemaCUDA/call-host-fn-from-device.cu [new file with mode: 0644]