[clang][deps] Call getMemBuffer with RequiresNullTerminator false - #195072
Conversation
The getMemBuffer() has a default parameter RequiresNullTerminator which is set to true. In ModuleCache the MemoryBuffer::getOpenFile is called with /* RequiresNullTerminator=*/false. This means that initial contents of the MemoryBuffer may not have a trailing 0x0 at the end of the file. When assertions are enabled and RequiresNullTerminator is true the MemoryBuffer will trigger a "Buffer is not null terminated!" assertion failure if BufEnd[0] != 0. We have at one build with assertions enabled that is triggering this MemoryBuffer assertion failure in the check-clang tests: * ClangScanDeps/modules-dep-args.c * Driver/modules-driver-import-std.cpp The failure is specific to one particular machine, we have not been able to reproduce locally. It is possible that the failure is filesystem type or path length dependent. Changing the RequiresNullTerminator in getMemBuffer to false to match the value of RequiresNullTerminator in getOpenFile fixes the problem and all tests pass.
|
@llvm/pr-subscribers-clang Author: Peter Smith (smithp35) ChangesThe getMemBuffer() has a default parameter RequiresNullTerminator which is set to true. In ModuleCache the MemoryBuffer::getOpenFile is called with /* RequiresNullTerminator=*/false. This means that initial contents of the MemoryBuffer may not have a trailing 0x0 at the end of the file. When assertions are enabled and RequiresNullTerminator is true the MemoryBuffer will trigger a "Buffer is not null terminated!" assertion failure if BufEnd[0] != 0. We have at one build with assertions enabled that is triggering this MemoryBuffer assertion failure in the check-clang tests:
The failure is specific to one particular machine, we have not been able to reproduce locally. It is possible that the failure is filesystem type or path length dependent. Changing the RequiresNullTerminator in getMemBuffer to false to match the value of RequiresNullTerminator in getOpenFile fixes the problem and all tests pass. Full diff: https://github.com/llvm/llvm-project/pull/195072.diff 1 Files Affected:
diff --git a/clang/lib/DependencyScanning/InProcessModuleCache.cpp b/clang/lib/DependencyScanning/InProcessModuleCache.cpp
index 7bbad3ca1da3a..538ff2952c4f5 100644
--- a/clang/lib/DependencyScanning/InProcessModuleCache.cpp
+++ b/clang/lib/DependencyScanning/InProcessModuleCache.cpp
@@ -179,7 +179,8 @@ class InProcessModuleCache : public ModuleCache {
}
Size = Entry.Buffer->getBufferSize();
ModTime = Entry.ModTime;
- return llvm::MemoryBuffer::getMemBuffer(*Entry.Buffer);
+ return llvm::MemoryBuffer::getMemBuffer(*Entry.Buffer,
+ /* RequiresNullTerminator */ false);
}
};
} // namespace
|
…vm#195072) The getMemBuffer() has a default parameter RequiresNullTerminator which is set to true. In ModuleCache the MemoryBuffer::getOpenFile is called with /* RequiresNullTerminator=*/false. This means that initial contents of the MemoryBuffer may not have a trailing 0x0 at the end of the file. When assertions are enabled and RequiresNullTerminator is true the MemoryBuffer will trigger a "Buffer is not null terminated!" assertion failure if BufEnd[0] != 0. We have at one build with assertions enabled that is triggering this MemoryBuffer assertion failure in the check-clang tests: * ClangScanDeps/modules-dep-args.c * Driver/modules-driver-import-std.cpp The failure is specific to one particular machine, we have not been able to reproduce locally. It is possible that the failure is filesystem type or path length dependent. Changing the RequiresNullTerminator in getMemBuffer to false to match the value of RequiresNullTerminator in getOpenFile fixes the problem and all tests pass.
…vm#195072) The getMemBuffer() has a default parameter RequiresNullTerminator which is set to true. In ModuleCache the MemoryBuffer::getOpenFile is called with /* RequiresNullTerminator=*/false. This means that initial contents of the MemoryBuffer may not have a trailing 0x0 at the end of the file. When assertions are enabled and RequiresNullTerminator is true the MemoryBuffer will trigger a "Buffer is not null terminated!" assertion failure if BufEnd[0] != 0. We have at one build with assertions enabled that is triggering this MemoryBuffer assertion failure in the check-clang tests: * ClangScanDeps/modules-dep-args.c * Driver/modules-driver-import-std.cpp The failure is specific to one particular machine, we have not been able to reproduce locally. It is possible that the failure is filesystem type or path length dependent. Changing the RequiresNullTerminator in getMemBuffer to false to match the value of RequiresNullTerminator in getOpenFile fixes the problem and all tests pass.
The getMemBuffer() has a default parameter RequiresNullTerminator which is set to true.
In ModuleCache the MemoryBuffer::getOpenFile is called with /* RequiresNullTerminator=*/false. This means that initial contents of the MemoryBuffer may not have a trailing 0x0 at the end of the file.
When assertions are enabled and RequiresNullTerminator is true the MemoryBuffer will trigger a "Buffer is not null terminated!" assertion failure if BufEnd[0] != 0.
We have at one build with assertions enabled that is triggering this MemoryBuffer assertion failure in the check-clang tests:
The failure is specific to one particular machine, we have not been able to reproduce locally. It is possible that the failure is filesystem type or path length dependent.
Changing the RequiresNullTerminator in getMemBuffer to false to match the value of RequiresNullTerminator in getOpenFile fixes the problem and all tests pass.