Files
android_development/vndk/tools/header-checker/tests/input/example1.h
Jayant Chowdhary 860b41407e Add more comprehensive tests for abi diffing.
1) We do not involve the build system to create test reference dumps. Symbols
in tests, are faked through version scripts to avoid checking in prebuilt .so
test files.

2) Also add a script to create reference abi dumps.

3) Fix a comment in ast_processing.cpp

Test: Run tests/test.py, all tests run and pass on generic arm64, mips64
and x86_64 builds.

Change-Id: Id3a420c1ae093a05a79da4c29e85071f28d714d1
2017-08-24 23:41:01 -07:00

126 lines
2.4 KiB
C++

#ifndef EXAMPLE1_H_
#define EXAMPLE1_H_
#include "example2.h"
#if defined(__cplusplus)
extern "C" {
#endif
struct ForwardDeclaration;
int uses_forward_decl(struct ForwardDeclaration *);
struct Hello {
int foo;
int bar;
wchar_t d;
enum {A, B} enum_field;
enum {C, D} enum_field2;
struct {
int a;
int b;
struct {
int c;
};
};
};
#if defined(__cplusplus)
} // extern "C"
#endif
using namespace test2;
using namespace test3;
typedef float float_type;
typedef const float_type cfloat_type;
struct CPPHello : private HelloAgain, public ByeAgain<float_type> {
const int cpp_foo;
cfloat_type cpp_bar;
virtual int again() { return 0; }
CPPHello() : cpp_foo(20), cpp_bar(1.234) { }
enum Bla{BLA = 1};
int test_enum() {return CPPHello::BLA;}
};
void fooVariadic (int &, int *, ...);
int boo (const CPPHello, int *, float *) {
return CPPHello::BLA;
}
template<typename T>
struct StackNode {
public:
T value_;
StackNode<T>* next_;
public:
StackNode(T t, StackNode* next = nullptr)
: value_(static_cast<T&&>(t)),
next_(next) { }
};
template<typename T>
class Stack {
private:
StackNode<T>* head_;
public:
Stack() : head_(nullptr) { }
void push(T t) {
head_ = new StackNode<T>(static_cast<T&&>(t), head_);
}
T pop() {
StackNode<T>* cur = head_;
head_ = cur->next_;
T res = static_cast<T&&>(cur->value_);
delete cur;
return res;
}
};
// Replicated from libsysutils.
template<typename T>
class List
{
public:
/*
* One element in the list.
*/
class _Node {
public:
explicit _Node(const T& val) : mVal(val) {}
~_Node() {}
inline T& getRef() { return mVal; }
inline const T& getRef() const { return mVal; }
private:
void PrivateNode();
friend class List;
friend class _ListIterator;
T mVal;
_Node* mpPrev;
_Node* mpNext;
};
_Node *middle;
};
typedef List<float> float_list;
float_list float_list_test;
typedef List<int> int_list;
int_list int_list_test;
List<float>::_Node node(2);
int ListMangle(int_list *, StackNode<int> *);
template<typename IChild, typename IParent, typename BpChild, typename BpParent>
List<IChild> castInterface(List<IParent> parent, const char *childIndicator, bool emitError) {return List<IChild>();}
void format() {
castInterface<float, float, float , float>(List<float>(), "foo", true);
}
#endif // EXAMPLE1_H_