blob: 2e36c7d02be86feae5ba01880eaa99b824ce510c [file] [log] [blame]
/*
REQUIRED_ARGS: -HC -c -o-
PERMUTE_ARGS:
TEST_OUTPUT:
---
// Automatically generated by Digital Mars D Compiler
#pragma once
#include <assert.h>
#include <math.h>
#include <stddef.h>
#include <stdint.h>
#ifdef CUSTOM_D_ARRAY_TYPE
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
#else
/// Represents a D [] array
template<typename T>
struct _d_dynamicArray final
{
size_t length;
T *ptr;
_d_dynamicArray() : length(0), ptr(NULL) { }
_d_dynamicArray(size_t length_in, T *ptr_in)
: length(length_in), ptr(ptr_in) { }
T& operator[](const size_t idx) {
assert(idx < length);
return ptr[idx];
}
const T& operator[](const size_t idx) const {
assert(idx < length);
return ptr[idx];
}
};
#endif
struct S final
{
int8_t a;
int32_t b;
int64_t c;
_d_dynamicArray< int32_t > arr;
private:
~S();
public:
S() :
a(),
b(),
c(),
arr()
{
}
S(int8_t a, int32_t b = 0, int64_t c = 0LL, _d_dynamicArray< int32_t > arr = {}) :
a(a),
b(b),
c(c),
arr(arr)
{}
};
struct S2 final
{
int32_t a;
int32_t b;
int64_t c;
S d;
S2(int32_t a);
S2(char ) = delete;
S2() :
a(42),
b(),
c()
{
}
};
struct S3 final
{
int32_t a;
int32_t b;
int64_t c;
S3() :
a(42),
b(),
c()
{
}
};
struct S4 final
{
int32_t a;
int64_t b;
int32_t c;
int8_t d;
S4() :
a(),
b(),
c(),
d()
{
}
S4(int32_t a, int64_t b = 0LL, int32_t c = 0, int8_t d = 0) :
a(a),
b(b),
c(c),
d(d)
{}
};
#pragma pack(push, 1)
struct Aligned final
{
int8_t a;
int32_t b;
int64_t c;
Aligned(int32_t a);
Aligned() :
a(),
b(),
c()
{
}
};
#pragma pack(pop)
struct Null final
{
void* field;
Null() :
field(nullptr)
{
}
Null(void* field) :
field(field)
{}
};
struct A final
{
int32_t a;
S s;
void baz(int32_t x = 42);
struct
{
int32_t x;
int32_t y;
};
union
{
int32_t u1;
char u2[4$?:32=u|64=LLU$];
};
struct Inner final
{
int32_t x;
Inner() :
x()
{
}
Inner(int32_t x) :
x(x)
{}
};
typedef Inner I;
class C;
A() :
a(),
s(),
x(),
y()
{
}
A(int32_t a, S s = S(), int32_t x = 0, int32_t y = 0) :
a(a),
s(s),
x(x),
y(y)
{}
};
union U
{
int32_t i;
char c;
};
struct Array final
{
uint32_t length;
private:
_d_dynamicArray< char > data;
char smallarray[1$?:32=u|64=LLU$];
public:
Array() :
length(),
data()
{
}
Array(uint32_t length, _d_dynamicArray< char > data = {}) :
length(length),
data(data)
{}
};
struct Params final
{
bool obj;
Array ddocfiles;
Params() :
obj(true),
ddocfiles()
{
}
Params(bool obj, Array ddocfiles = Array()) :
obj(obj),
ddocfiles(ddocfiles)
{}
};
---
*/
/*
StructDeclaration has the following issues:
* align different than 1 does nothing; we should support align(n), where `n` in [1, 2, 4, 8, 16]
* align(n): inside struct definition doesn’t add alignment, but breaks generation of default ctors
*/
extern (C++) struct S
{
byte a;
int b;
long c;
int[] arr;
extern(D) ~this() {}
}
extern (C++) struct S2
{
int a = 42;
int b;
long c;
S d = void;
this(int a) {}
extern(D) this(int, int, long) {}
@disable this(char);
}
extern (C) struct S3
{
int a = 42;
int b;
long c;
this(int a) {}
}
extern (C) struct S4
{
int a;
long b;
int c;
byte d;
}
extern (C++) align(1) struct Aligned
{
//align(1):
byte a;
int b;
long c;
this(int a) {}
}
extern (C++) struct Null
{
void* field = null;
}
extern (C++) struct A
{
int a;
S s;
extern (D) void foo();
extern (C) void bar() {}
extern (C++) void baz(int x = 42) {}
struct
{
int x;
int y;
}
union
{
int u1;
char[4] u2;
}
struct Inner
{
int x;
}
alias I = Inner;
extern(C++) class C;
}
extern(C++) union U
{
int i;
char c;
}
extern (C++) struct Array
{
uint length;
private:
char[] data;
char[1] smallarray;
}
extern (C++) struct Params
{
bool obj = true;
Array ddocfiles;
}