summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2015-06-21 20:32:40 +0000
committerJustin Bogner <mail@justinbogner.com>2015-06-21 20:32:40 +0000
commit4c18324b8b5d0eaa1199634e3809ee52f7a851a0 (patch)
treef71527126ff6ed24ab482420c22449f1e9eacac0 /clang/lib/Serialization
parentca9c0ccbc03716701ea4b87f1e509e1c87ab17d4 (diff)
downloadbcm5719-llvm-4c18324b8b5d0eaa1199634e3809ee52f7a851a0.tar.gz
bcm5719-llvm-4c18324b8b5d0eaa1199634e3809ee52f7a851a0.zip
ASTReader: Treat InputFileOffsets as unaligned to avoid UB
This is a better approach to fixing the undefined behaviour I tried to fix in r240228. This data doesn't necessarily have suitable alignment for uint64_t, so use unaligned_uint64_t instead. This fixes 225 test failures when clang is built with ubsan. llvm-svn: 240247
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r--clang/lib/Serialization/ASTReader.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index d75b5eb73d5..7242793be22 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -2307,7 +2307,8 @@ ASTReader::ReadControlBlock(ModuleFile &F,
case INPUT_FILE_OFFSETS:
NumInputs = Record[0];
NumUserInputs = Record[1];
- F.InputFileOffsets = (const uint64_t *)Blob.data();
+ F.InputFileOffsets =
+ (const llvm::support::unaligned_uint64_t *)Blob.data();
F.InputFilesLoaded.resize(NumInputs);
break;
}
OpenPOWER on IntegriCloud