| // 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 -S %s -o %t.s |
| // RUN: cat %t.s | FileCheck prefixes %s |
| // init guard of plain global static var |
| // init guard of function local statis var |
| // init guard of template instance |
| // check that guard var gets reset by exception |
| |
| |
| |
| // CHECK-DAG: .size _ZGVZ4addxIfET_S0_S0_E1p, 8 |
| // CHECK-DAG: .size _ZGVZ3fooiiE1r, 8 |
| // CHECK-DAG: call{{.*}} __cxa_guard_acquire |
| // CHECK-DAG: call{{.*}} __cxa_guard_release |
| // |
| // the static variables themselves |
| // CHECK-DAG: .size _ZZ4addxIfET_S0_S0_E1p,{{ *}}4 |
| // CHECK-DAG: .size _ZZ3fooiiE1r,{{ *}}4 |
| // CHECK-DAG: _ZGVN4pairIiE5countE |
| // |
| inline int foo(int p, int q) |
| { |
| static int r = q; |
| return p + r; |
| } |
| |
| int bar(int x) |
| { |
| return foo(x, x); |
| } |
| |
| template <class T> T addx(T x, T y) { |
| static T p = y; |
| return x + p; |
| } |
| |
| float bar(float x) |
| { |
| return addx(x, x); |
| } |
| template <class T > struct pair { |
| T l, r; |
| static int count; |
| }; |
| int q=123; |
| template <class T> int pair<T>::count = q++; |
| int w1 = pair<int>::count; |
| int x1 = pair<int>::count; |
| |