]> granicus.if.org Git - clang/commit
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)
commit4cdf252c1243bc19662ca522657a583b060df913
tree0e28d43e32d8a30012a4ca53cb503e3b40128365
parentd100f97758f2a65e6ffdaaa7154753f5f15d09e6
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.

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