diff options
author | Timm Baeder <tbaeder@redhat.com> | 2025-08-02 17:29:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-02 17:29:11 +0200 |
commit | c304a2bb0c83ce34c7a63d9812888fc89c3facb5 (patch) | |
tree | 0857f6cb99d13f0f55d921fefa9c73bc946660d7 | |
parent | 969b246c0218a05a0ed0e237f4f92d28554b88c2 (diff) | |
download | llvm-c304a2bb0c83ce34c7a63d9812888fc89c3facb5.zip llvm-c304a2bb0c83ce34c7a63d9812888fc89c3facb5.tar.gz llvm-c304a2bb0c83ce34c7a63d9812888fc89c3facb5.tar.bz2 |
[clang][bytecode][NFC] Code size is always aligned (#151824)
We don't need to align Code.size(), since we always resize it to aligned
values, so Code.size() is always aligned.
-rw-r--r-- | clang/lib/AST/ByteCode/ByteCodeEmitter.cpp | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/clang/lib/AST/ByteCode/ByteCodeEmitter.cpp b/clang/lib/AST/ByteCode/ByteCodeEmitter.cpp index 3288585..d474605 100644 --- a/clang/lib/AST/ByteCode/ByteCodeEmitter.cpp +++ b/clang/lib/AST/ByteCode/ByteCodeEmitter.cpp @@ -137,21 +137,21 @@ int32_t ByteCodeEmitter::getOffset(LabelTy Label) { template <typename T> static void emit(Program &P, std::vector<std::byte> &Code, const T &Val, bool &Success) { + size_t ValPos = Code.size(); size_t Size; if constexpr (std::is_pointer_v<T>) - Size = sizeof(uint32_t); + Size = align(sizeof(uint32_t)); else - Size = sizeof(T); + Size = align(sizeof(T)); - if (Code.size() + Size > std::numeric_limits<unsigned>::max()) { + if (ValPos + Size > std::numeric_limits<unsigned>::max()) { Success = false; return; } // Access must be aligned! - size_t ValPos = align(Code.size()); - Size = align(Size); + assert(aligned(ValPos)); assert(aligned(ValPos + Size)); Code.resize(ValPos + Size); @@ -168,17 +168,16 @@ static void emit(Program &P, std::vector<std::byte> &Code, const T &Val, template <typename T> static void emitSerialized(std::vector<std::byte> &Code, const T &Val, bool &Success) { - size_t Size = Val.bytesToSerialize(); + size_t ValPos = Code.size(); + size_t Size = align(Val.bytesToSerialize()); - if (Code.size() + Size > std::numeric_limits<unsigned>::max()) { + if (ValPos + Size > std::numeric_limits<unsigned>::max()) { Success = false; return; } // Access must be aligned! - assert(aligned(Code.size())); - size_t ValPos = Code.size(); - Size = align(Size); + assert(aligned(ValPos)); assert(aligned(ValPos + Size)); Code.resize(ValPos + Size); |