autowarefoundation / autoware.universe

https://autowarefoundation.github.io/autoware.universe/
Apache License 2.0
964 stars 630 forks source link

refactor(yabloc_pose_initializer): apply static analysis #7719

Closed a-maumau closed 3 months ago

a-maumau commented 3 months ago

Description

This PR applies some suggestions from the linter to localization/yabloc/yabloc_pose_initializer. Checked with clang-tidy and cppcheck.

Fixed:

not Fixed:

We might need to change the clang-tidy's configuration to suppress this errors which occurs from OpenCV header.

Related links

Parent Issue:

How was this PR tested?

Checked with clang-tidy (v14.0.0) and cppcheck (v2.14.1)

check_linter.sh ``` #!/bin/bash set -eux TARGET_DIR=$1 current_dir=$(basename $(pwd)) if [[ ! $current_dir =~ ^(autoware|pilot-auto) ]]; then echo "This script must be run in a directory with a prefix of autoware or pilot-auto." exit 1 fi set +eux export CPLUS_INCLUDE_PATH=/usr/include/c++/11:/usr/include/x86_64-linux-gnu/c++/11:$CPLUS_INCLUDE_PATH set -eux fdfind -e cpp -e hpp --full-path ${TARGET_DIR} | xargs -P $(nproc) -I{} cpplint {} fdfind -e cpp -e hpp --full-path ${TARGET_DIR} | xargs -P $(nproc) -I{} clang-tidy -p build/ {} ```

Before fixing the code:

output from above commands ```Text $ ./check_linter.sh yabloc_pose_initializer ... 8182 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/include/yabloc_pose_initializer/camera/semantic_segmentation.hpp. /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 8182 warnings (8182 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 14785 warnings and 5 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/semantic_segmentation.cpp. /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/semantic_segmentation.cpp:38:31: warning: method 'make_blob' can be made static [readability-convert-member-functions-to-static] cv::Mat SemanticSegmentation::make_blob(const cv::Mat & image) ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/semantic_segmentation.cpp:48:31: warning: method 'convert_blob_to_image' can be made static [readability-convert-member-functions-to-static] cv::Mat SemanticSegmentation::convert_blob_to_image(const cv::Mat & blob) ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/semantic_segmentation.cpp:56:42: warning: use of a signed integer operand with a binary bitwise operator [hicpp-signed-bitwise] cv::Mat image = cv::Mat(height, width, CV_32FC4); ^ /usr/include/opencv4/opencv2/core/hal/interface.h:121:18: note: expanded from macro 'CV_32FC4' #define CV_32FC4 CV_MAKETYPE(CV_32F,4) ^~~~~~~~~~~~~~~~~~~~~ /usr/include/opencv4/opencv2/core/hal/interface.h:85:32: note: expanded from macro 'CV_MAKETYPE' #define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT)) ^~~~~~~~~~~~~~~~~~~ /usr/include/opencv4/opencv2/core/hal/interface.h:83:34: note: expanded from macro 'CV_MAT_DEPTH' #define CV_MAT_DEPTH(flags) ((flags) & CV_MAT_DEPTH_MASK) ^~~~~~~ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/semantic_segmentation.cpp:86:31: warning: method 'normalize' can be made static [readability-convert-member-functions-to-static] cv::Mat SemanticSegmentation::normalize(const cv::Mat & mask, double score_threshold) ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/semantic_segmentation.cpp:95:34: warning: use of a signed integer operand with a binary bitwise operator [hicpp-signed-bitwise] bin_mask.convertTo(bin_mask, CV_8UC1); ^ /usr/include/opencv4/opencv2/core/hal/interface.h:88:17: note: expanded from macro 'CV_8UC1' #define CV_8UC1 CV_MAKETYPE(CV_8U,1) ^~~~~~~~~~~~~~~~~~~~ /usr/include/opencv4/opencv2/core/hal/interface.h:85:32: note: expanded from macro 'CV_MAKETYPE' #define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT)) ^~~~~~~~~~~~~~~~~~~ /usr/include/opencv4/opencv2/core/hal/interface.h:83:34: note: expanded from macro 'CV_MAT_DEPTH' #define CV_MAT_DEPTH(flags) ((flags) & CV_MAT_DEPTH_MASK) ^~~~~~~ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/semantic_segmentation.cpp:104:31: warning: method 'draw_overlay' can be made static [readability-convert-member-functions-to-static] cv::Mat SemanticSegmentation::draw_overlay(const cv::Mat & image, const cv::Mat & segmentation) ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/semantic_segmentation.cpp:112:21: warning: invalid case style for variable 'ERROR_MESSAGE' [readability-identifier-naming] const std::string ERROR_MESSAGE = ^~~~~~~~~~~~~ error_message /usr/include/opencv4/opencv2/core/cuda.inl.hpp:105:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/cuda.inl.hpp:487:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/flann/index_testing.h:249:11: error: variable 'p1' set but not used [clang-diagnostic-unused-but-set-variable] float p1; ^ Suppressed 14774 warnings (14774 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 29292 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/include/yabloc_pose_initializer/camera/lane_image.hpp. /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 29341 warnings (29292 in non-user code, 49 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 18078 warnings generated. Suppressed 18091 warnings (18078 in non-user code, 13 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 21149 warnings generated. /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/marker_module.cpp:31:13: warning: invalid case style for variable 'N' [readability-identifier-naming] const int N = scores.size(); ^ n /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/marker_module.cpp:31:17: warning: narrowing conversion from 'std::vector::size_type' (aka 'unsigned long') to signed type 'int' is implementation-defined [cppcoreguidelines-narrowing-conversions] const int N = scores.size(); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/marker_module.cpp:34:31: warning: narrowing conversion from 'int' to 'float' [cppcoreguidelines-narrowing-conversions] return static_cast(score - *minmax.first) / ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/marker_module.cpp:46:84: warning: narrowing conversion from '__gnu_cxx::__alloc_traits, float>::value_type' (aka 'float') to 'int' [cppcoreguidelines-narrowing-conversions] static_cast(common::color_scale::rainbow(normalize(scores.at(i)))); ^ Suppressed 21158 warnings (21145 in non-user code, 13 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 44605 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp. /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:30:1: error: use 'using' instead of 'typedef' [modernize-use-using,-warnings-as-errors] typedef bg::model::d2::point_xy point_t; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ using point_t = bg::model::d2::point_xy /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:31:1: error: use 'using' instead of 'typedef' [modernize-use-using,-warnings-as-errors] typedef bg::model::box box_t; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ using box_t = bg::model::box /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:32:1: error: use 'using' instead of 'typedef' [modernize-use-using,-warnings-as-errors] typedef bg::model::polygon polygon_t; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ using polygon_t = bg::model::polygon /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:34:22: warning: pass by value and use std::move [modernize-pass-by-value] LaneImage::LaneImage(lanelet::LaneletMapPtr map) : map_(map) ^ std::move( ) /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:40:15: warning: invalid case style for variable 'image_size_' [readability-identifier-naming] const float image_size_ = 800; ^~~~~~~~~~~ image_size /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:41:15: warning: invalid case style for variable 'max_range_' [readability-identifier-naming] const float max_range_ = 30; ^~~~~~~~~~ max_range /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:44:10: warning: narrowing conversion from 'float' to 'int' [cppcoreguidelines-narrowing-conversions] pt.x = -v.y() / max_range_ * image_size_ * 0.5f + image_size_ / 2.f; ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:45:10: warning: narrowing conversion from 'float' to 'int' [cppcoreguidelines-narrowing-conversions] pt.y = -v.x() / max_range_ * image_size_ * 0.5f + image_size_ / 2.f; ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:62:50: warning: narrowing conversion from 'double' to 'Eigen::Matrix::Scalar' (aka 'float') [cppcoreguidelines-narrowing-conversions] cv::Point2i pt = to_cv_point(Eigen::Vector3f(p.x(), p.y(), 0)); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:62:57: warning: narrowing conversion from 'double' to 'Eigen::Matrix::Scalar' (aka 'float') [cppcoreguidelines-narrowing-conversions] cv::Point2i pt = to_cv_point(Eigen::Vector3f(p.x(), p.y(), 0)); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:74:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy] for (auto p : line) { ^ const & /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:75:50: warning: narrowing conversion from 'double' to 'Eigen::Matrix::Scalar' (aka 'float') [cppcoreguidelines-narrowing-conversions] cv::Point2i pt = to_cv_point(Eigen::Vector3f(p.x() - xyz.x, p.y() - xyz.y, 0)); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:75:65: warning: narrowing conversion from 'double' to 'Eigen::Matrix::Scalar' (aka 'float') [cppcoreguidelines-narrowing-conversions] cv::Point2i pt = to_cv_point(Eigen::Vector3f(p.x() - xyz.x, p.y() - xyz.y, 0)); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:86:54: warning: use of a signed integer operand with a binary bitwise operator [hicpp-signed-bitwise] cv::Mat image = cv::Mat::zeros(cv::Size(800, 800), CV_8UC3); ^ /usr/include/opencv4/opencv2/core/hal/interface.h:90:17: note: expanded from macro 'CV_8UC3' #define CV_8UC3 CV_MAKETYPE(CV_8U,3) ^~~~~~~~~~~~~~~~~~~~ /usr/include/opencv4/opencv2/core/hal/interface.h:85:32: note: expanded from macro 'CV_MAKETYPE' #define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT)) ^~~~~~~~~~~~~~~~~~~ /usr/include/opencv4/opencv2/core/hal/interface.h:83:34: note: expanded from macro 'CV_MAT_DEPTH' #define CV_MAT_DEPTH(flags) ((flags) & CV_MAT_DEPTH_MASK) ^~~~~~~ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp:94:15: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy] for (auto left : boost::adaptors::reverse(lanelet.leftBound2d())) { ^ const & /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 44637 warnings (44588 in non-user code, 49 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings treated as errors 23928 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/include/yabloc_pose_initializer/camera/projector_module.hpp. /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 23941 warnings (23928 in non-user code, 13 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 31949 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/projector_module.cpp. /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/projector_module.cpp:30:15: warning: invalid case style for variable 'image_size_' [readability-identifier-naming] const float image_size_ = 800; ^~~~~~~~~~~ image_size /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/projector_module.cpp:31:15: warning: invalid case style for variable 'max_range_' [readability-identifier-naming] const float max_range_ = 30; ^~~~~~~~~~ max_range /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/projector_module.cpp:34:10: warning: narrowing conversion from 'float' to 'int' [cppcoreguidelines-narrowing-conversions] pt.x = -v.y() / max_range_ * image_size_ * 0.5f + image_size_ / 2.f; ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/projector_module.cpp:35:10: warning: narrowing conversion from 'float' to 'int' [cppcoreguidelines-narrowing-conversions] pt.y = -v.x() / max_range_ * image_size_ * 0.5f + image_size_ / 2.f; ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/projector_module.cpp:47:64: warning: use of a signed integer operand with a binary bitwise operator [hicpp-signed-bitwise] cv::Mat projected_image = cv::Mat::zeros(cv::Size(800, 800), CV_8UC3); ^ /usr/include/opencv4/opencv2/core/hal/interface.h:90:17: note: expanded from macro 'CV_8UC3' #define CV_8UC3 CV_MAKETYPE(CV_8U,3) ^~~~~~~~~~~~~~~~~~~~ /usr/include/opencv4/opencv2/core/hal/interface.h:85:32: note: expanded from macro 'CV_MAKETYPE' #define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT)) ^~~~~~~~~~~~~~~~~~~ /usr/include/opencv4/opencv2/core/hal/interface.h:83:34: note: expanded from macro 'CV_MAT_DEPTH' #define CV_MAT_DEPTH(flags) ((flags) & CV_MAT_DEPTH_MASK) ^~~~~~~ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/projector_module.cpp:93:24: warning: narrowing conversion from 'int' to 'Eigen::Matrix::Scalar' (aka 'float') [cppcoreguidelines-narrowing-conversions] Eigen::Vector3f u3(u.x, u.y, 1); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/projector_module.cpp:93:29: warning: narrowing conversion from 'int' to 'Eigen::Matrix::Scalar' (aka 'float') [cppcoreguidelines-narrowing-conversions] Eigen::Vector3f u3(u.x, u.y, 1); ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 31953 warnings (31940 in non-user code, 13 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 38390 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/include/yabloc_pose_initializer/camera/camera_pose_initializer.hpp. /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 38450 warnings (38390 in non-user code, 60 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 45502 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp. /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/include/yabloc_pose_initializer/camera/camera_pose_initializer.hpp:67:8: warning: function 'yabloc::CameraPoseInitializer::on_service' has a definition with different parameter names [readability-inconsistent-declaration-parameter-name] void on_service( ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:184:29: note: the definition seen here void CameraPoseInitializer::on_service( ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/include/yabloc_pose_initializer/camera/camera_pose_initializer.hpp:67:8: note: differing parameters are named here: ('request'), in definition: ('response') void on_service( ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:35:21: warning: narrowing conversion from 'long' to signed type 'int' is implementation-defined [cppcoreguidelines-narrowing-conversions] angle_resolution_(declare_parameter("angle_resolution")) ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:65:39: warning: the const qualified parameter 'src1' is copied for each invocation; consider making it a reference [performance-unnecessary-value-param] cv::Mat bitwise_and_3ch(const cv::Mat src1, const cv::Mat src2) ^ & /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:65:59: warning: the const qualified parameter 'src2' is copied for each invocation; consider making it a reference [performance-unnecessary-value-param] cv::Mat bitwise_and_3ch(const cv::Mat src1, const cv::Mat src2) ^ & /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:82:28: warning: the parameter 'image_3ch' is copied for each invocation but only used as a const reference; consider making it a const reference [performance-unnecessary-value-param] int count_non_zero(cv::Mat image_3ch) ^ const & /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:156:14: warning: narrowing conversion from 'double' to 'float' [cppcoreguidelines-narrowing-conversions] gain = 2 + std::cos((lane_angle_rad.value() - angle_rad) / 2.0); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:159:32: warning: narrowing conversion from 'int' to 'float' [cppcoreguidelines-narrowing-conversions] const float score = gain * (1 + count_non_zero(dst)); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:162:26: warning: narrowing conversion from 'double' to 'std::vector::value_type' (aka 'float') [cppcoreguidelines-narrowing-conversions] angles_rad.push_back(angle_rad); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:179:13: warning: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy] for (auto l : lanelet_map->laneletLayer) { ^ const & /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:194:35: warning: narrowing conversion from 'geometry_msgs::msg::Point_::_x_type' (aka 'double') to 'Eigen::Matrix::Scalar' (aka 'float') [cppcoreguidelines-narrowing-conversions] const Eigen::Vector3f pos_vec3f(query_pos.x, query_pos.y, query_pos.z); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:194:48: warning: narrowing conversion from 'geometry_msgs::msg::Point_::_y_type' (aka 'double') to 'Eigen::Matrix::Scalar' (aka 'float') [cppcoreguidelines-narrowing-conversions] const Eigen::Vector3f pos_vec3f(query_pos.x, query_pos.y, query_pos.z); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:194:61: warning: narrowing conversion from 'geometry_msgs::msg::Point_::_z_type' (aka 'double') to 'Eigen::Matrix::Scalar' (aka 'float') [cppcoreguidelines-narrowing-conversions] const Eigen::Vector3f pos_vec3f(query_pos.x, query_pos.y, query_pos.z); ^ /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp:209:62: warning: method 'create_rectified_initial_pose' can be made static [readability-convert-member-functions-to-static] CameraPoseInitializer::PoseCovStamped CameraPoseInitializer::create_rectified_initial_pose( ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 45688 warnings (45489 in non-user code, 199 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). ```

Check with cppcheck : (nothing to be changed)


After this PR:

Check with check_linter.sh ```Text $ ./check_linter.sh yabloc_pose_initializer ... 8182 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/include/yabloc_pose_initializer/camera/semantic_segmentation.hpp. /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 8182 warnings (8182 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 14774 warnings and 5 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/semantic_segmentation.cpp. /usr/include/opencv4/opencv2/core/cuda.inl.hpp:105:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/cuda.inl.hpp:487:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/flann/index_testing.h:249:11: error: variable 'p1' set but not used [clang-diagnostic-unused-but-set-variable] float p1; ^ Suppressed 14780 warnings (14774 in non-user code, 6 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 29292 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/include/yabloc_pose_initializer/camera/lane_image.hpp. /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 29341 warnings (29292 in non-user code, 49 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 18078 warnings generated. Suppressed 18091 warnings (18078 in non-user code, 13 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 21145 warnings generated. Suppressed 21158 warnings (21145 in non-user code, 13 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 44588 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/lane_image.cpp. /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 44640 warnings (44588 in non-user code, 52 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 23928 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/include/yabloc_pose_initializer/camera/projector_module.hpp. /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 23941 warnings (23928 in non-user code, 13 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 31940 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/projector_module.cpp. /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 31956 warnings (31940 in non-user code, 16 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 38390 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/include/yabloc_pose_initializer/camera/camera_pose_initializer.hpp. /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 38450 warnings (38390 in non-user code, 60 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 45489 warnings and 2 errors generated. Error while processing /home/masakibaba/autoware/src/universe/autoware.universe/localization/yabloc/yabloc_pose_initializer/src/camera/camera_pose_initializer_core.cpp. /usr/include/opencv4/opencv2/core/mat.inl.hpp:2116:9: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] CV_XADD(&this->hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ /usr/include/opencv4/opencv2/core/mat.inl.hpp:2131:21: error: '_Atomic' is a C11 extension [clang-diagnostic-c11-extensions] if( m.hdr ) CV_XADD(&m.hdr->refcount, 1); ^ /usr/include/opencv4/opencv2/core/cvdef.h:670:60: note: expanded from macro 'CV_XADD' # define CV_XADD(addr, delta) __c11_atomic_fetch_add((_Atomic(int)*)(addr), delta, __ATOMIC_ACQ_REL) ^ Suppressed 45688 warnings (45489 in non-user code, 199 NOLINT). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). ```

Notes for reviewers

None.

Interface changes

None.

Effects on system behavior

None.

github-actions[bot] commented 3 months ago

Thank you for contributing to the Autoware project!

🚧 If your pull request is in progress, switch it to draft mode.

Please ensure:

codecov[bot] commented 3 months ago

Codecov Report

Attention: Patch coverage is 0% with 28 lines in your changes missing coverage. Please review.

Project coverage is 0.00%. Comparing base (3d849e9) to head (f63fbfe). Report is 539 commits behind head on main.

Files Patch % Lines
...alizer/src/camera/camera_pose_initializer_core.cpp 0.00% 9 Missing :warning:
.../yabloc_pose_initializer/src/camera/lane_image.cpp 0.00% 8 Missing :warning:
...bloc_pose_initializer/src/camera/marker_module.cpp 0.00% 4 Missing :warning:
...c_pose_initializer/src/camera/projector_module.cpp 0.00% 4 Missing :warning:
...e_initializer/src/camera/semantic_segmentation.cpp 0.00% 3 Missing :warning:
Additional details and impacted files ```diff @@ Coverage Diff @@ ## main #7719 +/- ## ========================================== - Coverage 15.09% 0.00% -15.10% ========================================== Files 1967 64 -1903 Lines 135941 2680 -133261 Branches 42122 192 -41930 ========================================== - Hits 20520 0 -20520 + Misses 92700 2680 -90020 + Partials 22721 0 -22721 ``` | [Flag](https://app.codecov.io/gh/autowarefoundation/autoware.universe/pull/7719/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=autowarefoundation) | Coverage Δ | | |---|---|---| | [differential](https://app.codecov.io/gh/autowarefoundation/autoware.universe/pull/7719/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=autowarefoundation) | `0.00% <0.00%> (?)` | | | [total](https://app.codecov.io/gh/autowarefoundation/autoware.universe/pull/7719/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=autowarefoundation) | `?` | |

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.