Coverage Report

Created: 2024-01-17 10:31

/src/llvm-project/clang/lib/Driver/ToolChains/LazyDetector.h
Line
Count
Source (jump to first uncovered line)
1
//===--- LazyDetector.h - Lazy ToolChain Detection --------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_LAZYDETECTOR_H
10
#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_LAZYDETECTOR_H
11
12
#include "clang/Driver/Tool.h"
13
#include "clang/Driver/ToolChain.h"
14
#include <optional>
15
16
namespace clang {
17
18
/// Simple wrapper for toolchain detector with costly initialization. This
19
/// delays the creation of the actual detector until its first usage.
20
21
template <class T> class LazyDetector {
22
  const driver::Driver &D;
23
  llvm::Triple Triple;
24
  const llvm::opt::ArgList &Args;
25
26
  std::optional<T> Detector;
27
28
public:
29
  LazyDetector(const driver::Driver &D, const llvm::Triple &Triple,
30
               const llvm::opt::ArgList &Args)
31
0
      : D(D), Triple(Triple), Args(Args) {}
Unexecuted instantiation: clang::LazyDetector<clang::driver::CudaInstallationDetector>::LazyDetector(clang::driver::Driver const&, llvm::Triple const&, llvm::opt::ArgList const&)
Unexecuted instantiation: clang::LazyDetector<clang::driver::RocmInstallationDetector>::LazyDetector(clang::driver::Driver const&, llvm::Triple const&, llvm::opt::ArgList const&)
32
0
  T *operator->() {
33
0
    if (!Detector)
34
0
      Detector.emplace(D, Triple, Args);
35
0
    return &*Detector;
36
0
  }
Unexecuted instantiation: clang::LazyDetector<clang::driver::RocmInstallationDetector>::operator->()
Unexecuted instantiation: clang::LazyDetector<clang::driver::CudaInstallationDetector>::operator->()
37
0
  const T *operator->() const {
38
0
    return const_cast<T const *>(
39
0
        const_cast<LazyDetector &>(*this).operator->());
40
0
  }
Unexecuted instantiation: clang::LazyDetector<clang::driver::RocmInstallationDetector>::operator->() const
Unexecuted instantiation: clang::LazyDetector<clang::driver::CudaInstallationDetector>::operator->() const
41
};
42
43
} // end namespace clang
44
45
#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_LAZYDETECTOR_H