Mark C++ reference parameters as dereferenceable
authorHal Finkel <hfinkel@anl.gov>
Fri, 18 Jul 2014 15:52:10 +0000 (15:52 +0000)
committerHal Finkel <hfinkel@anl.gov>
Fri, 18 Jul 2014 15:52:10 +0000 (15:52 +0000)
commita2347baaec37ba81d64f9b455af3084cf183f127
tree38de0cdf097468df1afb29d2abb642bf7bdab1f1
parentb0407ba0716d940d035f5da73f6d3bfbaffecb44
Mark C++ reference parameters as dereferenceable

Because references must be initialized using some evaluated expression, they
must point to something, and a callee can assume the reference parameter is
dereferenceable. Taking advantage of a new attribute just added to LLVM, mark
them as such.

Because dereferenceability in addrspace(0) implies nonnull in the backend, we
don't need both attributes. However, we need to know the size of the object to
use the dereferenceable attribute, so for incomplete types we still emit only
nonnull.

llvm-svn: 213386
58 files changed:
clang/lib/CodeGen/CGCall.cpp
clang/test/CXX/except/except.spec/p14-ir.cpp
clang/test/CodeGenCXX/address-space-ref.cpp [new file with mode: 0644]
clang/test/CodeGenCXX/blocks-cxx11.cpp
clang/test/CodeGenCXX/blocks.cpp
clang/test/CodeGenCXX/catch-undef-behavior.cpp
clang/test/CodeGenCXX/conditional-gnu-ext.cpp
clang/test/CodeGenCXX/const-init-cxx11.cpp
clang/test/CodeGenCXX/constructor-direct-call.cpp
clang/test/CodeGenCXX/constructor-init.cpp
clang/test/CodeGenCXX/convert-to-fptr.cpp
clang/test/CodeGenCXX/copy-assign-synthesis-1.cpp
clang/test/CodeGenCXX/copy-constructor-elim-2.cpp
clang/test/CodeGenCXX/copy-constructor-synthesis-2.cpp
clang/test/CodeGenCXX/copy-constructor-synthesis.cpp
clang/test/CodeGenCXX/cxx11-initializer-aggregate.cpp
clang/test/CodeGenCXX/cxx11-thread-local-reference.cpp
clang/test/CodeGenCXX/decl-ref-init.cpp
clang/test/CodeGenCXX/default-arg-temps.cpp
clang/test/CodeGenCXX/derived-to-base-conv.cpp
clang/test/CodeGenCXX/derived-to-virtual-base-class-calls-final.cpp
clang/test/CodeGenCXX/dllexport-members.cpp
clang/test/CodeGenCXX/dllexport.cpp
clang/test/CodeGenCXX/dllimport-members.cpp
clang/test/CodeGenCXX/dllimport.cpp
clang/test/CodeGenCXX/eh.cpp
clang/test/CodeGenCXX/empty-nontrivially-copyable.cpp
clang/test/CodeGenCXX/exceptions.cpp
clang/test/CodeGenCXX/fastcall.cpp
clang/test/CodeGenCXX/goto.cpp
clang/test/CodeGenCXX/implicit-copy-assign-operator.cpp
clang/test/CodeGenCXX/implicit-copy-constructor.cpp
clang/test/CodeGenCXX/mangle-lambdas.cpp
clang/test/CodeGenCXX/mangle.cpp
clang/test/CodeGenCXX/microsoft-abi-sret-and-byval.cpp
clang/test/CodeGenCXX/microsoft-abi-static-initializers.cpp
clang/test/CodeGenCXX/nrvo.cpp
clang/test/CodeGenCXX/pod-member-memcpys.cpp
clang/test/CodeGenCXX/pointers-to-data-members.cpp
clang/test/CodeGenCXX/reference-cast.cpp
clang/test/CodeGenCXX/rvalue-references.cpp
clang/test/CodeGenCXX/temporaries.cpp
clang/test/CodeGenCXX/throw-expressions.cpp
clang/test/CodeGenCXX/volatile.cpp
clang/test/CodeGenObjC/return-objc-object.mm
clang/test/CodeGenObjCXX/arc-blocks.mm
clang/test/CodeGenObjCXX/arc-move.mm
clang/test/CodeGenObjCXX/arc-special-member-functions.mm
clang/test/CodeGenObjCXX/implicit-copy-assign-operator.mm
clang/test/CodeGenObjCXX/implicit-copy-constructor.mm
clang/test/CodeGenObjCXX/lvalue-reference-getter.mm
clang/test/CodeGenObjCXX/message-reference.mm
clang/test/CodeGenObjCXX/property-dot-reference.mm
clang/test/CodeGenObjCXX/property-lvalue-capture.mm
clang/test/CodeGenObjCXX/property-object-reference-2.mm
clang/test/CodeGenObjCXX/property-objects.mm
clang/test/CodeGenObjCXX/property-reference.mm
clang/test/Modules/templates.mm