Workaround GCC 12 false positive warnings.

This commit is contained in:
levlam 2022-05-18 16:59:15 +03:00
parent 1616513c4c
commit 18cd0dd95e
3 changed files with 15 additions and 13 deletions

View File

@ -145,6 +145,9 @@ function(td_set_up_compiler)
# see http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1579 # see http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1579
add_cxx_compiler_flag("-Wno-redundant-move") add_cxx_compiler_flag("-Wno-redundant-move")
endif() endif()
if (GCC AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.0))
add_cxx_compiler_flag("-Wno-stringop-overflow") # some false positives
endif()
if (CLANG AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5)) if (CLANG AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5))
# https://stackoverflow.com/questions/26744556/warning-returning-a-captured-reference-from-a-lambda # https://stackoverflow.com/questions/26744556/warning-returning-a-captured-reference-from-a-lambda
add_cxx_compiler_flag("-Wno-return-stack-address") add_cxx_compiler_flag("-Wno-return-stack-address")

View File

@ -1516,7 +1516,7 @@ Status SecretChatActor::outbound_rewrite_with_empty(uint64 state_id) {
state->message->is_external = false; state->message->is_external = false;
state->message->need_notify_user = false; state->message->need_notify_user = false;
state->message->is_silent = true; state->message->is_silent = true;
state->message->file = log_event::EncryptedInputFile::from_input_encrypted_file(nullptr); state->message->file = log_event::EncryptedInputFile();
binlog_rewrite(context_->binlog(), state->message->log_event_id(), LogEvent::HandlerType::SecretChats, binlog_rewrite(context_->binlog(), state->message->log_event_id(), LogEvent::HandlerType::SecretChats,
create_storer(*state->message)); create_storer(*state->message));
return Status::OK(); return Status::OK();
@ -1606,15 +1606,14 @@ void SecretChatActor::on_outbound_send_message_result(NetQueryPtr query, Promise
auto sent = move_tl_object_as<telegram_api::messages_sentEncryptedFile>(result); auto sent = move_tl_object_as<telegram_api::messages_sentEncryptedFile>(result);
auto file = EncryptedFile::get_encrypted_file(std::move(sent->file_)); auto file = EncryptedFile::get_encrypted_file(std::move(sent->file_));
if (file == nullptr) { if (file == nullptr) {
state->message->file = log_event::EncryptedInputFile::from_input_encrypted_file(nullptr); state->message->file = log_event::EncryptedInputFile();
state->send_result_ = [this, random_id = state->message->random_id, state->send_result_ = [this, random_id = state->message->random_id,
message_id = MessageId(ServerMessageId(state->message->message_id)), message_id = MessageId(ServerMessageId(state->message->message_id)),
date = sent->date_](Promise<> promise) { date = sent->date_](Promise<> promise) {
context_->on_send_message_ok(random_id, message_id, date, nullptr, std::move(promise)); context_->on_send_message_ok(random_id, message_id, date, nullptr, std::move(promise));
}; };
} else { } else {
state->message->file = log_event::EncryptedInputFile::from_input_encrypted_file( state->message->file = {log_event::EncryptedInputFile::Location, file->id_, file->access_hash_, 0, 0};
make_tl_object<telegram_api::inputEncryptedFile>(file->id_, file->access_hash_));
state->send_result_ = [this, random_id = state->message->random_id, state->send_result_ = [this, random_id = state->message->random_id,
message_id = MessageId(ServerMessageId(state->message->message_id)), message_id = MessageId(ServerMessageId(state->message->message_id)),
date = sent->date_, file = *file](Promise<> promise) { date = sent->date_, file = *file](Promise<> promise) {

View File

@ -175,31 +175,30 @@ struct EncryptedInputFile {
} }
} }
static EncryptedInputFile from_input_encrypted_file(const tl_object_ptr<telegram_api::InputEncryptedFile> &from) { static EncryptedInputFile from_input_encrypted_file(const tl_object_ptr<telegram_api::InputEncryptedFile> &from) {
if (!from) { if (from == nullptr) {
return EncryptedInputFile{Empty, 0, 0, 0, 0}; return EncryptedInputFile();
} }
return from_input_encrypted_file(*from); switch (from->get_id()) {
}
static EncryptedInputFile from_input_encrypted_file(const telegram_api::InputEncryptedFile &from) {
switch (from.get_id()) {
case telegram_api::inputEncryptedFileEmpty::ID: case telegram_api::inputEncryptedFileEmpty::ID:
return EncryptedInputFile{Empty, 0, 0, 0, 0}; return EncryptedInputFile{Empty, 0, 0, 0, 0};
case telegram_api::inputEncryptedFileUploaded::ID: { case telegram_api::inputEncryptedFileUploaded::ID: {
auto &uploaded = static_cast<const telegram_api::inputEncryptedFileUploaded &>(from); auto &uploaded = static_cast<const telegram_api::inputEncryptedFileUploaded &>(*from);
return EncryptedInputFile{Uploaded, uploaded.id_, 0, uploaded.parts_, uploaded.key_fingerprint_}; return EncryptedInputFile{Uploaded, uploaded.id_, 0, uploaded.parts_, uploaded.key_fingerprint_};
} }
case telegram_api::inputEncryptedFileBigUploaded::ID: { case telegram_api::inputEncryptedFileBigUploaded::ID: {
auto &uploaded = static_cast<const telegram_api::inputEncryptedFileBigUploaded &>(from); auto &uploaded = static_cast<const telegram_api::inputEncryptedFileBigUploaded &>(*from);
return EncryptedInputFile{BigUploaded, uploaded.id_, 0, uploaded.parts_, uploaded.key_fingerprint_}; return EncryptedInputFile{BigUploaded, uploaded.id_, 0, uploaded.parts_, uploaded.key_fingerprint_};
} }
case telegram_api::inputEncryptedFile::ID: { case telegram_api::inputEncryptedFile::ID: {
auto &uploaded = static_cast<const telegram_api::inputEncryptedFile &>(from); auto &uploaded = static_cast<const telegram_api::inputEncryptedFile &>(*from);
return EncryptedInputFile{Location, uploaded.id_, uploaded.access_hash_, 0, 0}; return EncryptedInputFile{Location, uploaded.id_, uploaded.access_hash_, 0, 0};
} }
default: default:
UNREACHABLE(); UNREACHABLE();
return EncryptedInputFile();
} }
} }
tl_object_ptr<telegram_api::InputEncryptedFile> as_input_encrypted_file() const { tl_object_ptr<telegram_api::InputEncryptedFile> as_input_encrypted_file() const {
switch (type) { switch (type) {
case Empty: case Empty:
@ -212,6 +211,7 @@ struct EncryptedInputFile {
return make_tl_object<telegram_api::inputEncryptedFile>(id, access_hash); return make_tl_object<telegram_api::inputEncryptedFile>(id, access_hash);
} }
UNREACHABLE(); UNREACHABLE();
return nullptr;
} }
}; };