// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: cxx_compiler cxx_11 -c %s -o %t.o
// RUN: bindump %t.o | FileCheck prefixes %s

// arrays
// CHECK-DAG: _Z3bazRA6_i
void baz(int (&) [6]) {}

// CHECK-DAG: _Z4barcILi6EEvRAT__i
template <int n> void barc(int (&) [n]);
template <> void barc<6>(int (&) [6]) {}

// CHECK-DAG: _Z3razRA6_A3_i
void raz(int (&) [6] [3]) {}

// CHECK-DAG: _Z3razRA3_iRA3_S_
void raz(int (&) [3], int (&) [3] [3]) {}

// CHECK-DAG: _Z3fooIfEvRAplstT_Li1E_i
template <typename T> void foo(int (&) [((sizeof (T))+1)]);
template <> void foo<float>(int (&) [((sizeof (float))+1)]) {}

// CHECK-DAG: _Z3fooIA5_iEvv
template <typename T> void foo();
template <> void foo<int [5]>() {}

// CHECK-DAG: _Z3fooIA5_iEvPT_
template <typename T> void foo(T*);
template <> void foo<int [5]>(int (*) [5]) {}

// CHECK-DAG: _Z3fooIA5_iEvT_PS1_
template <typename T> void foo(T, T*);
template <> void foo<int [5]>(int [5], int (*) [5]) {}

// CHECK-DAG: _Z3fooIA5_iEPT_v
template <typename T> T* foo();
template <> int (* foo<int [5]>()) [5] { return 0;}


