annotate ir/irstruct.cpp @ 1638:0de4525a9ed6

Apply workaround for #395 by klickverbot.
author Christian Kamm <kamm incasoftware de>
date Mon, 08 Mar 2010 20:06:08 +0100
parents 8d086d552909
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
1 #include "gen/llvm.h"
737
041c1596d217 Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 435
diff changeset
2
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
3 #include "mtype.h"
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
4 #include "aggregate.h"
737
041c1596d217 Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 435
diff changeset
5 #include "declaration.h"
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
6 #include "init.h"
737
041c1596d217 Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 435
diff changeset
7
157
5c17f81fc1c1 [svn r173] moved IR state previously stored in Type into IrType and a Type->IrType map; fixes #7
ChristianK
parents: 137
diff changeset
8 #include "gen/irstate.h"
737
041c1596d217 Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 435
diff changeset
9 #include "gen/tollvm.h"
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
10 #include "gen/logger.h"
800
d14e4594c7d7 Changed aggregate field initializers to be created lazily, fixes problem with static void arrays in aggregates.
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 797
diff changeset
11 #include "gen/llvmhelpers.h"
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
12 #include "gen/utils.h"
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
13
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
14 #include "ir/irstruct.h"
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
15 #include "ir/irtypeclass.h"
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
16
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
17 #include <algorithm>
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
18
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
19 //////////////////////////////////////////////////////////////////////////////
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
20
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
21 IrStruct::IrStruct(AggregateDeclaration* aggr)
1270
dd135ff697fa Fixed class default initializers and type generation. Bug #260 is fixed.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1262
diff changeset
22 : diCompositeType(NULL),
1571
8d086d552909 IntegerType is now contextifed.
Benjamin Kramer <benny.kra@gmail.com>
parents: 1569
diff changeset
23 init_pa(llvm::OpaqueType::get(gIR->context()))
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
24 {
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
25 aggrdecl = aggr;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
26
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
27 type = aggr->type;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
28
1231
212ec2d9d176 Fixed some minitest regressions.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
29 packed = (type->ty == Tstruct)
212ec2d9d176 Fixed some minitest regressions.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
30 ? type->alignsize() == 1
212ec2d9d176 Fixed some minitest regressions.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1228
diff changeset
31 : false;
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
32
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
33 // above still need to be looked at
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
34
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
35 init = NULL;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
36 constInit = NULL;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
37
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
38 vtbl = NULL;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
39 constVtbl = NULL;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
40 classInfo = NULL;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
41 constClassInfo = NULL;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
42
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
43 classInterfacesArray = NULL;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
44 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
45
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
46 //////////////////////////////////////////////////////////////////////////////
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
47
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
48 LLGlobalVariable * IrStruct::getInitSymbol()
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
49 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
50 if (init)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
51 return init;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
52
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
53 // create the initZ symbol
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
54 std::string initname("_D");
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
55 initname.append(aggrdecl->mangle());
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
56 initname.append("6__initZ");
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
57
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
58 llvm::GlobalValue::LinkageTypes _linkage = DtoExternalLinkage(aggrdecl);
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
59
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
60 init = new llvm::GlobalVariable(
1529
ad7f2f1862d6 Adjust LDC to work with the LLVMContext LLVM changes.
Christian Kamm <kamm incasoftware de>
parents: 1366
diff changeset
61 *gIR->module, init_pa.get(), true, _linkage, NULL, initname);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
62
1365
65505c9d70f5 Added explicit alignment for aggregate __initZ symbols, this is needed for some union types, or the default initializer symbol might be misaligned.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1351
diff changeset
63 // set alignment
1366
81121ac19f61 Fixed previous aggregate initZ alignment.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1365
diff changeset
64 init->setAlignment(type->alignsize());
1365
65505c9d70f5 Added explicit alignment for aggregate __initZ symbols, this is needed for some union types, or the default initializer symbol might be misaligned.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1351
diff changeset
65
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
66 return init;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
67 }
137
ce7b81fb957f [svn r141] fixed more problems with classinfo
lindquist
parents: 136
diff changeset
68
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
69 //////////////////////////////////////////////////////////////////////////////
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
70
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
71 llvm::Constant * IrStruct::getDefaultInit()
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
72 {
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
73 if (constInit)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
74 return constInit;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
75
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
76 if (type->ty == Tstruct)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
77 {
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
78 constInit = createStructDefaultInitializer();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
79 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
80 else
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
81 {
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
82 constInit = createClassDefaultInitializer();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
83 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
84
1270
dd135ff697fa Fixed class default initializers and type generation. Bug #260 is fixed.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1262
diff changeset
85 llvm::OpaqueType* o = llvm::cast<llvm::OpaqueType>(init_pa.get());
dd135ff697fa Fixed class default initializers and type generation. Bug #260 is fixed.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1262
diff changeset
86 o->refineAbstractTypeTo(constInit->getType());
dd135ff697fa Fixed class default initializers and type generation. Bug #260 is fixed.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1262
diff changeset
87
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
88 return constInit;
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
89 }
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
90
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
91 //////////////////////////////////////////////////////////////////////////////
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
92 //////////////////////////////////////////////////////////////////////////////
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
93 //////////////////////////////////////////////////////////////////////////////
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
94
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
95 // helper function that returns the static default initializer of a variable
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
96 LLConstant* get_default_initializer(VarDeclaration* vd, Initializer* init)
136
0e28624814e8 [svn r140] did a lot of the work towards being able to pass multiple modules on the command line. not complete yet though
lindquist
parents:
diff changeset
97 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
98 if (init)
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
99 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
100 return DtoConstInitializer(init->loc, vd->type, init);
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
101 }
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
102 else if (vd->init)
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
103 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
104 return DtoConstInitializer(vd->init->loc, vd->type, vd->init);
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
105 }
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
106 else
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
107 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
108 return DtoConstExpInit(vd->loc, vd->type, vd->type->defaultInit(vd->loc));
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
109 }
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
110 }
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
111
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
112 // helper function that adds zero bytes to a vector of constants
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
113 size_t add_zeros(std::vector<llvm::Constant*>& constants, size_t diff)
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
114 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
115 size_t n = constants.size();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
116 while (diff)
737
041c1596d217 Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 435
diff changeset
117 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
118 if (global.params.is64bit && diff % 8 == 0)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
119 {
1571
8d086d552909 IntegerType is now contextifed.
Benjamin Kramer <benny.kra@gmail.com>
parents: 1569
diff changeset
120 constants.push_back(LLConstant::getNullValue(llvm::Type::getInt64Ty(gIR->context())));
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
121 diff -= 8;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
122 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
123 else if (diff % 4 == 0)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
124 {
1571
8d086d552909 IntegerType is now contextifed.
Benjamin Kramer <benny.kra@gmail.com>
parents: 1569
diff changeset
125 constants.push_back(LLConstant::getNullValue(llvm::Type::getInt32Ty(gIR->context())));
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
126 diff -= 4;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
127 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
128 else if (diff % 2 == 0)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
129 {
1571
8d086d552909 IntegerType is now contextifed.
Benjamin Kramer <benny.kra@gmail.com>
parents: 1569
diff changeset
130 constants.push_back(LLConstant::getNullValue(llvm::Type::getInt16Ty(gIR->context())));
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
131 diff -= 2;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
132 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
133 else
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
134 {
1571
8d086d552909 IntegerType is now contextifed.
Benjamin Kramer <benny.kra@gmail.com>
parents: 1569
diff changeset
135 constants.push_back(LLConstant::getNullValue(llvm::Type::getInt8Ty(gIR->context())));
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
136 diff -= 1;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
137 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
138 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
139 return constants.size() - n;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
140 }
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
141
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
142 // Matches the way the type is built in IrTypeStruct
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
143 // maybe look at unifying the interface.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
144
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
145 LLConstant * IrStruct::createStructDefaultInitializer()
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
146 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
147 IF_LOG Logger::println("Building default initializer for %s", aggrdecl->toPrettyChars());
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
148 LOG_SCOPE;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
149
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
150 assert(type->ty == Tstruct && "cannot build struct default initializer for non struct type");
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
151
1262
ec1d9dc1d32a Fixed struct default initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1254
diff changeset
152 IrTypeStruct* ts = type->irtype->isStruct();
ec1d9dc1d32a Fixed struct default initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1254
diff changeset
153 assert(ts);
ec1d9dc1d32a Fixed struct default initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1254
diff changeset
154
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
155 // start at offset zero
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
156 size_t offset = 0;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
157
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
158 // vector of constants
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
159 std::vector<llvm::Constant*> constants;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
160
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
161 // go through fields
1262
ec1d9dc1d32a Fixed struct default initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1254
diff changeset
162 IrTypeAggr::iterator it;
ec1d9dc1d32a Fixed struct default initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1254
diff changeset
163 for (it = ts->def_begin(); it != ts->def_end(); ++it)
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
164 {
1262
ec1d9dc1d32a Fixed struct default initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1254
diff changeset
165 VarDeclaration* vd = *it;
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
166
1270
dd135ff697fa Fixed class default initializers and type generation. Bug #260 is fixed.
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1262
diff changeset
167 assert(vd->offset >= offset && "default fields not sorted by offset");
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
168
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
169 IF_LOG Logger::println("using field: %s %s (+%u)", vd->type->toChars(), vd->toChars(), vd->offset);
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
170
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
171 // get next aligned offset for this field
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
172 size_t alignedoffset = offset;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
173 if (!packed)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
174 {
1351
8d501abecd24 Initial (but disabled) fix for ticket #294 , the actual part that fixes the bug is in a #if 0 block as I'm afraid it will cause regressions. I'm most likely not going to be around tonight, and maybe not tomorrow as well, so I'm pushing it in case someone wants to run some serious testing/investigate the problem noted in llvmhelpers.cpp : realignOffset .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1270
diff changeset
175 alignedoffset = realignOffset(alignedoffset, vd->type);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
176 }
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
177
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
178 // insert explicit padding?
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
179 if (alignedoffset < vd->offset)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
180 {
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
181 add_zeros(constants, vd->offset - alignedoffset);
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
182 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
183
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
184 // add initializer
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
185 constants.push_back(get_default_initializer(vd, NULL));
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
186
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
187 // advance offset to right past this field
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
188 offset = vd->offset + vd->type->size();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
189 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
190
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
191 // tail padding?
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
192 if (offset < aggrdecl->structsize)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
193 {
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
194 add_zeros(constants, aggrdecl->structsize - offset);
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
195 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
196
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
197 // build constant struct
1569
755abafbf25d Push the context through StructType::get.
Benjamin Kramer <benny.kra@gmail.com>
parents: 1560
diff changeset
198 llvm::Constant* definit = LLConstantStruct::get(gIR->context(), constants, packed);
1245
465a77c904d4 Fixed all issues preventing Tango 0.99.8 to compile with `sh build-tango.sh --verbose ldc'.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1240
diff changeset
199 #if 0
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
200 IF_LOG Logger::cout() << "final default initializer: " << *definit << std::endl;
1245
465a77c904d4 Fixed all issues preventing Tango 0.99.8 to compile with `sh build-tango.sh --verbose ldc'.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1240
diff changeset
201 #endif
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
202
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
203 return definit;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
204 }
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
205
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
206 //////////////////////////////////////////////////////////////////////////////
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
207 //////////////////////////////////////////////////////////////////////////////
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
208 //////////////////////////////////////////////////////////////////////////////
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
209
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
210 // yet another rewrite of the notorious StructInitializer.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
211
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
212 typedef std::pair<VarDeclaration*, llvm::Constant*> VCPair;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
213
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
214 bool struct_init_data_sort(const VCPair& a, const VCPair& b)
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
215 {
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
216 return (a.first && b.first)
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
217 ? a.first->offset < b.first->offset
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
218 : false;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
219 }
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
220
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
221 // this time a bit more inspired by the DMD code.
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
222
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
223 LLConstant * IrStruct::createStructInitializer(StructInitializer * si)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
224 {
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
225 IF_LOG Logger::println("Building StructInitializer of type %s", si->ad->toPrettyChars());
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
226 LOG_SCOPE;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
227
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
228 // sanity check
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
229 assert(si->ad == aggrdecl && "struct type mismatch");
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
230 assert(si->vars.dim == si->value.dim && "inconsistent StructInitializer");
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
231
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
232 // array of things to build
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
233 llvm::SmallVector<VCPair, 16> data(aggrdecl->fields.dim);
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
234
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
235 // start by creating a map from initializer indices to field indices.
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
236 // I have no fucking clue why dmd represents it like this :/
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
237 size_t n = si->vars.dim;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
238 LLSmallVector<int, 16> datamap(n, 0);
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
239 for (size_t i = 0; i < n; i++)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
240 {
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
241 for (size_t j = 0; 1; j++)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
242 {
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
243 assert(j < aggrdecl->fields.dim);
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
244 if (aggrdecl->fields.data[j] == si->vars.data[i])
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
245 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
246 datamap[i] = j;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
247 break;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
248 }
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
249 }
737
041c1596d217 Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 435
diff changeset
250 }
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
251
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
252 // fill in explicit initializers
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
253 n = si->vars.dim;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
254 for (size_t i = 0; i < n; i++)
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
255 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
256 VarDeclaration* vd = (VarDeclaration*)si->vars.data[i];
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
257 Initializer* ini = (Initializer*)si->value.data[i];
1254
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
258 Loc loc = ini ? ini->loc : si->loc;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
259
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
260 size_t idx = datamap[i];
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
261
1254
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
262 // check for duplicate initialization
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
263 if (data[idx].first != NULL)
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
264 {
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
265 Loc l = ini ? ini->loc : si->loc;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
266 error(l, "duplicate initialization of %s", vd->toChars());
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
267 continue;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
268 }
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
269
1254
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
270 // check for overlapping initialization
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
271 for (size_t j = 0; j < i; j++)
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
272 {
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
273 size_t idx2 = datamap[j];
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
274 assert(data[idx2].first);
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
275
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
276 VarDeclarationIter it(aggrdecl->fields, idx2);
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
277
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
278 unsigned f_begin = it->offset;
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
279 unsigned f_end = f_begin + it->type->size();
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
280
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
281 if (vd->offset >= f_end || (vd->offset + vd->type->size()) <= f_begin)
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
282 continue;
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
283
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
284 error(loc, "initializer for %s overlaps previous initialization of %s", vd->toChars(), it->toChars());
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
285 }
747fdd9245d7 Added checks for overlapping union initializers, as shown in bug #259 .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1253
diff changeset
286
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
287 IF_LOG Logger::println("Explicit initializer: %s @+%u", vd->toChars(), vd->offset);
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
288 LOG_SCOPE;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
289
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
290 data[idx].first = vd;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
291 data[idx].second = get_default_initializer(vd, ini);
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
292 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
293
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
294 // fill in implicit initializers
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
295 n = data.size();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
296 for (size_t i = 0; i < n; i++)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
297 {
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
298 VarDeclaration* vd = data[i].first;
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
299 if (vd)
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
300 continue;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
301
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
302 vd = (VarDeclaration*)aggrdecl->fields.data[i];
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
303
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
304 unsigned vd_begin = vd->offset;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
305 unsigned vd_end = vd_begin + vd->type->size();
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
306
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
307 // make sure it doesn't overlap any explicit initializers.
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
308 VarDeclarationIter it(aggrdecl->fields);
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
309 bool overlaps = false;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
310 size_t j = 0;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
311 for (; it.more(); it.next(), j++)
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
312 {
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
313 if (i == j || !data[j].first)
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
314 continue;
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
315
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
316 unsigned f_begin = it->offset;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
317 unsigned f_end = f_begin + it->type->size();
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
318
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
319 if (vd_begin >= f_end || vd_end <= f_begin)
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
320 continue;
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
321
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
322 overlaps = true;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
323 break;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
324 }
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
325 // add if no overlap found
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
326 if (!overlaps)
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
327 {
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
328 IF_LOG Logger::println("Implicit initializer: %s @+%u", vd->toChars(), vd->offset);
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
329 LOG_SCOPE;
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
330
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
331 data[i].first = vd;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
332 data[i].second = get_default_initializer(vd, NULL);
797
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
333 }
340acf1535d0 Removed KDevelop3 project files, CMake can generate them just fine!
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 737
diff changeset
334 }
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
335
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
336 // stop if there were errors
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
337 if (global.errors)
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
338 {
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
339 fatal();
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
340 }
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
341
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
342 // sort data array by offset
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
343 std::sort(data.begin(), data.end(), struct_init_data_sort);
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
344
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
345 // build array of constants and make sure explicit zero padding is inserted when necessary.
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
346 size_t offset = 0;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
347 std::vector<llvm::Constant*> constants;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
348 constants.reserve(n);
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
349
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
350 for (size_t i = 0; i < n; i++)
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
351 {
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
352 VarDeclaration* vd = data[i].first;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
353 if (vd == NULL)
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
354 continue;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
355
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
356 // get next aligned offset for this field
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
357 size_t alignedoffset = offset;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
358 if (!packed)
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
359 {
1351
8d501abecd24 Initial (but disabled) fix for ticket #294 , the actual part that fixes the bug is in a #if 0 block as I'm afraid it will cause regressions. I'm most likely not going to be around tonight, and maybe not tomorrow as well, so I'm pushing it in case someone wants to run some serious testing/investigate the problem noted in llvmhelpers.cpp : realignOffset .
Tomas Lindquist Olsen <tomas.l.olsen gmail com>
parents: 1270
diff changeset
360 alignedoffset = realignOffset(alignedoffset, vd->type);
1240
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
361 }
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
362
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
363 // insert explicit padding?
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
364 if (alignedoffset < vd->offset)
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
365 {
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
366 size_t diff = vd->offset - alignedoffset;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
367 IF_LOG Logger::println("adding %zu bytes zero padding", diff);
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
368 add_zeros(constants, diff);
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
369 }
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
370
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
371 IF_LOG Logger::println("adding field %s", vd->toChars());
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
372
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
373 constants.push_back(data[i].second);
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
374 offset = vd->offset + vd->type->size();
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
375 }
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
376
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
377 // tail padding?
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
378 if (offset < aggrdecl->structsize)
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
379 {
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
380 size_t diff = aggrdecl->structsize - offset;
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
381 IF_LOG Logger::println("adding %zu bytes zero padding", diff);
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
382 add_zeros(constants, diff);
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
383 }
f295e51d2dd0 Fixed static struct initializers.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 1231
diff changeset
384
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
385 // build constant
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
386 assert(!constants.empty());
1569
755abafbf25d Push the context through StructType::get.
Benjamin Kramer <benny.kra@gmail.com>
parents: 1560
diff changeset
387 llvm::Constant* c = LLConstantStruct::get(gIR->context(), &constants[0], constants.size(), packed);
1228
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
388 IF_LOG Logger::cout() << "final struct initializer: " << *c << std::endl;
79758fd2f48a Added Doxygen file.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 946
diff changeset
389 return c;
737
041c1596d217 Removed warnings on ignored aligns. Only do aligment on packed structs, align(1) struct Packed { ... }
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 435
diff changeset
390 }