///
/// Copyright (c) 2019-2020 Arm Limited.
///
/// SPDX-License-Identifier: MIT
///
/// Permission is hereby granted, free of charge, to any person obtaining a copy
/// of this software and associated documentation files (the "Software"), to
/// deal in the Software without restriction, including without limitation the
/// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
/// sell copies of the Software, and to permit persons to whom the Software is
/// furnished to do so, subject to the following conditions:
///
/// The above copyright notice and this permission notice shall be included in all
/// copies or substantial portions of the Software.
///
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
/// SOFTWARE.
///
namespace arm_compute
{
/**
@page errata Errata

@tableofcontents

@section S7_1_errata Errata

- Under certain conditions, the validation test case 'CL/DirectConvolutionLayer/Float/FP32/RunSmall9x9\@InputShape=32x37x3x4:StrideX=1:StrideY=1:PadX=0:PadY=0:KernelSize=9:NumKernels=1:DataType=F32:ActivationInfo=LU_BOUNDED_RELU:DataLayout=NHWC' may fail.
    - Versions Affected: >= v20.08
    - Conditions:
        - The validation suite has to run in nightly mode and execute 40k+ test cases before the test mentioned above

- Under certain conditions, benchmark examples can hang when OpenCL profiling queues are enabled.
    - Versions Affected: >= v19.11
    - OSs Affected: Linux
    - Conditions:
        - Mali DDK r1p0 - r8p0, and
        - Linux kernel >= 4.4

- On Android with arm64-v8a/arm64-v8.2-a architecture, NEON validation tests can fail when compiled using Android Ndk
  >= r18b in debug mode (https://github.com/android/ndk/issues/1135).
    - Versions Affected: >= v19.11
    - OSs Affected: Android
    - Conditions:
        - arm64-v8a/arm64-v8.2-a architecture, and
        - Compiled using Android NDK >= r18b in debug mode.

*/
} // namespace
