summaryrefslogtreecommitdiff
path: root/binaryninjaapi.h
diff options
context:
space:
mode:
authorChristian Blichmann <cblichmann@google.com>2022-09-30 09:20:11 +0200
committerPeter LaFosse <peter@vector35.com>2022-09-30 07:07:09 -0400
commit727d2be6872c878b5ed49b8dd33c23a6543826f6 (patch)
treed96dff05fefcc3da5523addeb47b50ca83091199 /binaryninjaapi.h
parente51abf509d7040aac768e183a47c966613b67bb7 (diff)
Avoid referring to `std::vector<T>` members when `T` is incomplete.
This is [not legal](https://timsong-cpp.github.io/cppwp/n4868/vector#overview-4) according to the C++ standard, and causes build errors in particular in C++20 mode. Fix it by defining the vector's type before using the vector. This is a particular problem for C++20 because the compiler now generates code for `std::vector` members earlier, due to changes to which functions are `constexpr` in C++20. So code that was already illegal is now detected as such by the compiler, causing errors in the vector header about the use of incomplete types. This was found during an internal #Cleanup at Google. No functional changes.
Diffstat (limited to 'binaryninjaapi.h')
-rw-r--r--binaryninjaapi.h78
1 files changed, 38 insertions, 40 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index 70f8d45b..64206875 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -1237,7 +1237,44 @@ namespace BinaryNinja {
std::string GetId();
};
- struct InstructionTextToken;
+ struct InstructionTextToken
+ {
+ enum
+ {
+ WidthIsByteCount = 0
+ };
+
+ BNInstructionTextTokenType type;
+ std::string text;
+ uint64_t value;
+ uint64_t width;
+ size_t size, operand;
+ BNInstructionTextTokenContext context;
+ uint8_t confidence;
+ uint64_t address;
+ std::vector<std::string> typeNames;
+
+ InstructionTextToken();
+ InstructionTextToken(uint8_t confidence, BNInstructionTextTokenType t, const std::string& txt);
+ InstructionTextToken(BNInstructionTextTokenType type, const std::string& text, uint64_t value = 0,
+ size_t size = 0, size_t operand = BN_INVALID_OPERAND, uint8_t confidence = BN_FULL_CONFIDENCE,
+ const std::vector<std::string>& typeName = {}, uint64_t width = WidthIsByteCount);
+ InstructionTextToken(BNInstructionTextTokenType type, BNInstructionTextTokenContext context,
+ const std::string& text, uint64_t address, uint64_t value = 0, size_t size = 0,
+ size_t operand = BN_INVALID_OPERAND, uint8_t confidence = BN_FULL_CONFIDENCE,
+ const std::vector<std::string>& typeName = {}, uint64_t width = WidthIsByteCount);
+ InstructionTextToken(const BNInstructionTextToken& token);
+
+ InstructionTextToken WithConfidence(uint8_t conf);
+ static BNInstructionTextToken* CreateInstructionTextTokenList(const std::vector<InstructionTextToken>& tokens);
+ static void FreeInstructionTextTokenList(
+ BNInstructionTextToken* tokens, size_t count);
+ static std::vector<InstructionTextToken> ConvertAndFreeInstructionTextTokenList(
+ BNInstructionTextToken* tokens, size_t count);
+ static std::vector<InstructionTextToken> ConvertInstructionTextTokenList(
+ const BNInstructionTextToken* tokens, size_t count);
+ };
+
struct UndoEntry;
struct DatabaseException : std::runtime_error
@@ -2165,45 +2202,6 @@ namespace BinaryNinja {
};
- struct InstructionTextToken
- {
- enum
- {
- WidthIsByteCount = 0
- };
-
- BNInstructionTextTokenType type;
- std::string text;
- uint64_t value;
- uint64_t width;
- size_t size, operand;
- BNInstructionTextTokenContext context;
- uint8_t confidence;
- uint64_t address;
- std::vector<std::string> typeNames;
-
- InstructionTextToken();
- InstructionTextToken(uint8_t confidence, BNInstructionTextTokenType t, const std::string& txt);
- InstructionTextToken(BNInstructionTextTokenType type, const std::string& text, uint64_t value = 0,
- size_t size = 0, size_t operand = BN_INVALID_OPERAND, uint8_t confidence = BN_FULL_CONFIDENCE,
- const std::vector<std::string>& typeName = {}, uint64_t width = WidthIsByteCount);
- InstructionTextToken(BNInstructionTextTokenType type, BNInstructionTextTokenContext context,
- const std::string& text, uint64_t address, uint64_t value = 0, size_t size = 0,
- size_t operand = BN_INVALID_OPERAND, uint8_t confidence = BN_FULL_CONFIDENCE,
- const std::vector<std::string>& typeName = {}, uint64_t width = WidthIsByteCount);
- InstructionTextToken(const BNInstructionTextToken& token);
-
- InstructionTextToken WithConfidence(uint8_t conf);
- static BNInstructionTextToken* CreateInstructionTextTokenList(const std::vector<InstructionTextToken>& tokens);
- static void FreeInstructionTextTokenList(
- BNInstructionTextToken* tokens, size_t count);
- static std::vector<InstructionTextToken> ConvertAndFreeInstructionTextTokenList(
- BNInstructionTextToken* tokens, size_t count);
- static std::vector<InstructionTextToken> ConvertInstructionTextTokenList(
- const BNInstructionTextToken* tokens, size_t count);
- };
-
-
class Tag;
struct DisassemblyTextLineTypeInfo
{