include-what-you-use/tests/cxx/badinc-d1.h

109 lines
2.6 KiB
C++

//===--- badinc-d1.h - test input file for iwyu ---------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef INCLUDE_WHAT_YOU_USE_TESTS_CXX_BADINC_D1_H_
#define INCLUDE_WHAT_YOU_USE_TESTS_CXX_BADINC_D1_H_
#include <stdlib.h>
#include <errno.h> // not used, but iwyu shouldn't warn about that
// i1.h should come first, to make sure d3.h is seen after i1.h
#include "tests/cxx/badinc-i1.h"
#include "tests/cxx/badinc-d3.h"
#include "tests/cxx/badinc-i4.h"
// This uses a macro in an indirect-included file, but shouldn't be a
// violation, since we hard-coded this as an exception in iwyu_macromap.js.
#define MACRO_CALLING_I4_FUNCTION I4_Function()
#define UNUSED_MACRO Unknown_Function()
// The types.
enum D1_Enum { D11, D12, D13 };
class D1_Class {
public:
D1_Class(int a) { a_ = a; }
D1_Class() { a_ = 1; }
int a() { return a_; }
D1_Enum b() const { return static_cast<D1_Enum>(a_); }
I1_Typedef c() const { return static_cast<I2_EnumForTypedefs>(a_); }
I1_Struct unused_c() const { return I1_Struct(); }
int d() { return rand(); }
~D1_Class() {
printf("%d/%d/%d\n", b(), c(), e_);
}
D1_Class& operator=(const D1_Class& that) {
this->a_ = that.a_;
return *this;
}
bool operator==(const D1_Class& that) const {
return this->a_ == that.a_;
}
static I1_Enum e_;
static I1_Enum f_;
private:
int a_;
};
I1_Enum D1_Class::e_ = I11;
I1_Enum D1_Class::f_ = I12;
class D1_Subclass : public I1_Class {
};
template<typename FOO>
class D1_TemplateClass {
public:
D1_TemplateClass(FOO a) { a_ = a; }
FOO a() { return a_; }
private:
FOO a_;
};
class D1_CopyClass {
public:
D1_CopyClass(int a) { a_ = a; }
int a() const { return a_; }
D1_Class d1;
int a_;
// This class uses default copy constructor and operator=
};
template<typename FOO, typename BAR=I1_Enum>
struct D1_TemplateStructWithDefaultParam {
FOO a;
BAR b;
};
typedef I1_Typedef_Class D1_I1_Typedef;
typedef D1_Class* D1_StructPtr;
typedef int (*D1_FunctionPtr)(int, D1_Enum);
D1_Enum D1_Function(D1_Class* c) {
return D11;
}
class D1_ForwardDeclareClass;
int D1Function(I1_Enum i=I11) {
return static_cast<int>(i);
}
D1_CopyClass D1CopyClassFn(I1_Enum i) {
return D1_CopyClass(static_cast<int>(i));
}
// The vars. Just a few.
D1_Enum d1_d1_enum;
I1_Class d1_i1_class;
#endif // INCLUDE_WHAT_YOU_USE_TESTS_CXX_BADINC_D1_H_