When a function takes a variable number of pointer arguments, with a zero
authorJeff Cohen <jeffc@jolt-lang.org>
Sun, 23 Oct 2005 04:37:20 +0000 (04:37 +0000)
committerJeff Cohen <jeffc@jolt-lang.org>
Sun, 23 Oct 2005 04:37:20 +0000 (04:37 +0000)
commit66c5fd6c537269eaef0f630fa14360dcaff6a295
tree90ec39b9c89faa77f29186419eb3f67def5383b1
parent8b7f14e970d87eb52ac34e443bb508a403a2ac0d
When a function takes a variable number of pointer arguments, with a zero
pointer marking the end of the list, the zero *must* be cast to the pointer
type.  An un-cast zero is a 32-bit int, and at least on x86_64, gcc will
not extend the zero to 64 bits, thus allowing the upper 32 bits to be
random junk.

The new END_WITH_NULL macro may be used to annotate a such a function
so that GCC (version 4 or newer) will detect the use of un-casted zero
at compile time.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23888 91177308-0d34-0410-b5e6-96231b3b80d8
27 files changed:
Makefile.rules
examples/Fibonacci/fibonacci.cpp
examples/HowToUseJIT/HowToUseJIT.cpp
examples/ParallelJIT/ParallelJIT.cpp
include/llvm/Module.h
include/llvm/Support/CommandLine.h
include/llvm/Support/DataTypes.h.in
lib/AsmParser/llvmAsmParser.cpp
lib/AsmParser/llvmAsmParser.h
lib/AsmParser/llvmAsmParser.y
lib/Bytecode/Reader/Reader.cpp
lib/Bytecode/Reader/ReaderWrappers.cpp
lib/CodeGen/IntrinsicLowering.cpp
lib/Debugger/UnixLocalInferiorProcess.cpp
lib/Transforms/IPO/LowerSetJmp.cpp
lib/Transforms/IPO/SimplifyLibCalls.cpp
lib/Transforms/Instrumentation/ProfilePaths/EdgeCode.cpp
lib/Transforms/Instrumentation/ProfilePaths/InstLoops.cpp
lib/Transforms/Instrumentation/ProfilePaths/ProfilePaths.cpp
lib/Transforms/Instrumentation/ProfilingUtils.cpp
lib/Transforms/Instrumentation/TraceBasicBlocks.cpp
lib/Transforms/Instrumentation/TraceValues.cpp
lib/Transforms/Scalar/LowerGC.cpp
lib/Transforms/Utils/LowerAllocations.cpp
lib/Transforms/Utils/LowerInvoke.cpp
tools/bugpoint/Miscompilation.cpp
tools/lli/lli.cpp