Robert Clipsham
cf08cc2844
Automated merge with http://hg.dsource.org/projects/ldc
2009-06-01 19:02:20 +01:00
Robert Clipsham
91ddf6140a
More tweaks.
2009-06-01 18:58:21 +01:00
Frits van Bommel
2fe8f2cd74
Improve ABI conformance on x86 by passing the sret parameter in EAX if there's
...
no `this`.
2009-05-31 12:43:59 +02:00
Kelly Wilson
008d81afb0
Fix "garbage at end of line" errors on mingw...shouldn't affect linux/macosx
2009-05-31 09:10:33 -06:00
Christian Kamm
78aa98fdfb
Error on invalid array cast. See DMD3041.
2009-05-31 15:07:04 +02:00
Frits van Bommel
3718bd23fb
Add nest attribute to this parameters on x86-64. This is a free extra
...
parameter register :).
2009-05-31 10:41:20 +02:00
Frits van Bommel
c8b10643f9
Add some missing returns.
2009-05-30 23:48:22 +02:00
Kelly Wilson
3eb4a4d389
merging
2009-05-30 14:36:00 -06:00
Kelly Wilson
71477fcb8c
Forgot one windows underscore for asm output
2009-05-30 14:35:03 -06:00
Robert Clipsham
c5be82c5ae
LDC 2 compiles again.
2009-05-30 17:23:32 +01:00
Frits van Bommel
da593c99dc
Remove code duplication for vtable loads and improve instruction naming to make
...
bitcode with virtual calls easier to read.
2009-05-30 13:04:49 +02:00
Christian Kamm
a05ed9a171
Fix #309 : allow -of with multiple source files if -singleobj is given.
2009-05-30 12:58:04 +02:00
Christian Kamm
e03a897bad
Make sure complex -> integral casts are not used when casting to bool.
...
Error instead of assert on unimplemented cast.
2009-05-28 21:45:14 +02:00
Christian Kamm
803156b035
Allow complex -> integral casts.
2009-05-28 20:26:26 +02:00
Frits van Bommel
a24a2201f1
Teach -dgc2stack to preserve the call graph. This should allow for more
...
efficient execution by the pass manager.
2009-05-28 02:14:01 +02:00
Frits van Bommel
6619190ba5
* Add -functionattrs to default pass list so -dgc2stack is more effective
...
when callees aren't inlined. This should also improve various standard LLVM
optimizations.
* Comment out some verbose logging.
2009-05-28 00:07:21 +02:00
Christian Kamm
7fd43e8bf7
Error instead of assert on delegate literals as constant expressions.
...
Make function literal linkage internal inside functions and external otherwise.
2009-05-27 19:20:18 +02:00
Frits van Bommel
e7b3f5415f
Make "aa[key]" use the same runtime call as "key in aa". The runtime calls
...
these were using were different, but with equivalent definitions.
With `ldc -O3`, the following functions now all compile to the exact same code:
{{{
int[int] y;
void foo(int x) {
if (x in y) {
auto z = x in y;
sink(*z);
}
}
void bar(int x) {
if (x in y) {
sink(y[x]);
}
}
void baz(int x) {
if (auto p = x in y) {
sink(*p);
}
}
}}}
2009-05-25 12:50:40 +02:00
Frits van Bommel
1791d7b8b4
Fix a behavioral change accidentally introduced by the move to the LLVM
...
commandline system: `-output-(bc|ll|s)` used to disable generation of an object
file unless explicitly requested with `-output-o`. Now they do so again.
2009-05-23 20:57:22 +02:00
Christian Kamm
52329f071e
Fix regression dstress.nocompile.finally_07. The EnclosingTryFinally handler
...
should not be set when emitting the landing pad's finally code.
2009-05-23 09:02:36 +02:00
Christian Kamm
5b799deeb4
Fix #308 by giving finally code emitted by EnclosingTryFinally a different landing pad.
2009-05-23 00:23:39 +02:00
Frits van Bommel
adfc5b3ee9
Fix scope(exit) foreach (ref v; arr) foo(v);
2009-05-22 21:38:01 +02:00
Frits van Bommel
59f9b35cea
Count the sret register as well when keeping track of how many integer registers
...
are available for extern(C) functions on x86-64.
Interestingly, llvm-g++ seems to have a very similar bug: http://llvm.org/pr4242
(So this breaks ABI-compatibility with llvm-gcc for this corner case, but gains
it with gcc...)
To clarify, this is about code like this:
{{{
struct S { void*[3] data; }
struct T { void*[2] data; }
// The T should be passed in memory, and p in the last int register.
extern(C) S fail(int, int, int, int, T t, void* p) {
S s;
s.data[0] = t.data[0];
s.data[1] = t.data[1];
s.data[2] = p;
return s;
}
}}}
which should generate code functionally equivalent to this:
{{{
extern(C) S* succeed(S* s, int, int, int, int, T t, void* p) {
s.data[0] = t.data[0];
s.data[1] = t.data[1];
s.data[2] = p;
return s;
}
}}}
(with the same definitions for S and T)
2009-05-22 13:17:06 +02:00
Christian Kamm
86e1457dde
Automated merge with http://hg.dsource.org/projects/ldc
2009-05-22 10:18:04 +02:00
Christian Kamm
c433604243
Fix bug #307 by doing what DMD does: add the arrayop to
...
sc->module->importedFrom instead of sc->module. That way array ops in template
instantiations will be semantic3'ed.
2009-05-22 10:17:47 +02:00
Frits van Bommel
2739cd108c
Let TargetABI::passByValue() know when a parameter is byref (either explicitly
...
or because it's a static array) by giving it the pointer type instead of the
type itself.
This fixes Derelict compilation on x86-64, where the ABI wasn't expecting a
static array to be passed in at all.
2009-05-22 00:19:54 +02:00
Frits van Bommel
2f150ddd62
Oops, didn't mean to change debug info linkage.
2009-05-21 15:26:46 +02:00
Frits van Bommel
a520661667
Now that templates instantiations are no longer emitted for all modules that
...
even blink at them they seem to break due to being linkonce (if compiled with
any optimization level > 0), so let's give them weak linkage instead.
The difference is that unreferenced linkonce symbols can be deleted, while
weak symbols need to be preserved.
2009-05-21 15:23:28 +02:00
Christian Kamm
f675d36cfb
Tentative fix for semantic3 on imported modules and unnecessary template
...
function definition issue. Please test!
Also change linkage of __interfaceInfos to external (same as __Class, __vtbl,
__init). The other change might make this superfluous.
2009-05-21 10:56:04 +02:00
Christian Kamm
8e56fe69a4
Merged xfBuild patch for dependency tree generation. See #286 .
2009-05-20 21:13:41 +02:00
Frits van Bommel
95c35225bb
Don't print the entire declaration of the alliassee when ->toChars() is
...
called on an `AliasDeclaration`; just printing the name will do. This fixes
#305 , which otherwise tries to generate
{{{
class E {
void A() {
alias /* recurse into E->toCBuffer() */ m;
}
}
}}}
by way of an infinite recursion (causing a segfault when the stack runs out).
2009-05-20 16:20:59 +02:00
Frits van Bommel
3164ceba17
Remove some overly verbose logging.
2009-05-19 20:46:33 +02:00
Kelly Wilson
16a2512808
remove extra 'test' instructions and fix 'test' properly
2009-05-19 12:28:44 -06:00
Kelly Wilson
8941b6960c
fix missing 'test' mnemonic and add several variations
2009-05-19 11:58:54 -06:00
Tomas Lindquist Olsen
f733680251
Try to cut down reallocations when building string literals.
2009-05-18 16:01:22 +02:00
Tomas Lindquist Olsen
be25445461
Added simple check for ClassInfo change introduced in DMD 1.045, it must have 12 fields.
2009-05-17 23:15:04 +02:00
Frits van Bommel
827880e467
Don't try to strip metadata if we don't generate any
2009-05-17 22:40:02 +02:00
Tomas Lindquist Olsen
0b8413b4bc
Fixed class -> integer casts.
2009-05-17 22:02:03 +02:00
Tomas Lindquist Olsen
2690f3cfd8
Add debug info for all class fields, including those from super classes...
2009-05-17 17:55:53 +02:00
Tomas Lindquist Olsen
e2ba08388f
Added new FreeBSD and Solaris predefined version identifiers.
2009-05-17 17:10:26 +02:00
Tomas Lindquist Olsen
b64ad3299e
Use RTTIBuilder to build !ModuleInfo, still needs some work.
2009-05-17 17:04:47 +02:00
Tomas Lindquist Olsen
3e4ade93ba
Updated comment in RTTIBuilder.h
2009-05-17 16:31:23 +02:00
Tomas Lindquist Olsen
b1fa43ce24
Increased RTTIBuilder buffer to 14 constants, to be big enough for !ClassInfo as well as !TypeInfo
2009-05-17 16:29:49 +02:00
Tomas Lindquist Olsen
dc4b7e8118
Update !ClassInfo generation to use !RTTIBuilder, slight update of !RTTIBuilder .
2009-05-17 16:27:01 +02:00
Tomas Lindquist Olsen
b6daf3d545
Renamed !TypeInfoBuilder to !RTTIBuilder.
2009-05-17 15:20:58 +02:00
Tomas Lindquist Olsen
0414a5acbb
Fixed filename in array bounds check for mixed in imported template function. Fixes ticket #295 .
2009-05-17 14:56:29 +02:00
Tomas Lindquist Olsen
9be5694168
Added error messages when failed to open files for .bc and .ll output, instead of just trying to write to the stream, pretty similar to the #281 problem.
2009-05-17 14:40:09 +02:00
Tomas Lindquist Olsen
0a77bd9fa6
Add error message when failed to open output stream for native asm output. Fixes ticket #281 .
2009-05-17 14:20:27 +02:00
Frits van Bommel
b52ee2de13
Use %La to hex-format a real instead of pretending it's an integer.
2009-05-17 11:06:14 +02:00
Frits van Bommel
a75ddbf803
Specify a large integer constant more portably.
2009-05-17 10:33:21 +02:00