Daniel Dunbar
829e988899
Change CodeGen of global decls to key off of the name (instead of
...
having multiple bindings from all the possible decls which
conceptually map to the same global).
- This eliminates CodeGen depending on the LLVM module for name
lookup.
- This also eliminates the need for ReplaceMapValuesWith (hurrah).
- This handles lookups for FunctionDecls correctly in the presence of
aliases, this was previously broken.
- WIP: Can still clean up & unify variable and function emission.
llvm-svn: 54382
2008-08-05 23:31:02 +00:00
Daniel Dunbar
eca183bad2
Add test case for PR2001.
...
llvm-svn: 54352
2008-08-05 16:15:29 +00:00
Daniel Dunbar
d548c79eaf
Fix const-init test case
...
- Use -verify and added expected warnings for EXTWARN change.
llvm-svn: 54342
2008-08-05 06:30:41 +00:00
Daniel Dunbar
5aa55d51ca
Bug fix, CodeGen of (void*) - (void*) was broken.
...
- <rdar://problem/6122967>
llvm-svn: 54338
2008-08-05 00:47:03 +00:00
Daniel Dunbar
88402ce8d0
Add CodeGen support for indirect goto.
...
- Follows emission scheme used by llvm-gcc, i.e. invent an id for
each label whose address is taken and replace each indirect goto by
a switch to each possible target.
- Currently we emit a switch for each indirect goto instead of
merging them as llvm-gcc does.
llvm-svn: 54318
2008-08-04 16:51:22 +00:00
Daniel Dunbar
74aa7e1eae
Support constructor and destructor attributes in CodeGen
...
- There is an miscompilation issue remaining due to a poor
interaction between the delayed emission of static functions and
the emission of constructors, but that already existed prior to
this change.
llvm-svn: 54258
2008-08-01 00:01:51 +00:00
Chris Lattner
330f0f2567
Fix a regression I introduced in r54107:
...
http://llvm.org/viewvc/llvm-project?view=rev&revision=54107
llvm-svn: 54242
2008-07-31 04:58:58 +00:00
Daniel Dunbar
b39b1cd7c3
Fix implicit initialization of structures.
...
<rdar://problem/6113085>
llvm-svn: 54237
2008-07-30 21:00:24 +00:00
Daniel Dunbar
e49df9b58f
Change CodeGenModule GlobalDeclMap to directly reference globals
...
instead of mapping the decl to a bitcast of the global to the correct
type.
- GetAddrOf{Function,GlobalVar} introduce the bitcast on every use now.
- This solves a problem where a dangling pointer could be introduced
by the RAUW done when replacing a forward or tentative
definition. See testcase for more details.
- Fixes <rdar://problem/6108358>
llvm-svn: 54211
2008-07-30 16:32:24 +00:00
Daniel Dunbar
837fd272f8
Fix codegen of chained declarations
...
- Killed useless CodeGenModule::EmitGlobalVarDeclarator, instead just
recurse on any ScopedDecl.
- Fix for <rdar://problem/6093838>
llvm-svn: 54162
2008-07-29 17:47:36 +00:00
Chris Lattner
4591fd0aac
Fix rdar://6103124, the only dummy blocks are ones without names. Named blocks
...
are important part of control flow structures.
llvm-svn: 54078
2008-07-25 23:40:10 +00:00
Daniel Dunbar
b5586dad97
Fix long double test case
...
- Had wrong sizeof(long double) encoded into test case
- Results now agree with llvm-gcc
llvm-svn: 54059
2008-07-25 20:54:30 +00:00
Daniel Dunbar
0e5845c13a
Rework codegen of case ranges
...
- Fix multiple issues with the way case ranges were emitted, see test
cases details about the specific issues.
- The root issue was not being careful about how basic blocks were
emitted which led to them being chained together incorrectly,
resulting in improper control flow.
- Fixes <rdar://problem/6098585>
llvm-svn: 54006
2008-07-25 01:11:38 +00:00
Chris Lattner
d258325c2b
Fix a codegen crash on:
...
int foo(void) {
float x[2];
return x;
}
rdar://6093986
llvm-svn: 53946
2008-07-23 06:31:27 +00:00
Daniel Dunbar
327acd7a6c
Implement bzero, memset, memmove builtins.
...
This subsumes Nico Weber's patch and implements bzero in terms
of llvm.memset to match llvm-gcc.
llvm-svn: 53888
2008-07-22 00:26:45 +00:00
Daniel Dunbar
c2f67966f4
Add __builtin_powi[fl] support
...
llvm-svn: 53866
2008-07-21 18:44:41 +00:00
Daniel Dunbar
d93abc3bb0
Implement ffs, parity, and popcount builtins.
...
+ test case
llvm-svn: 53851
2008-07-21 17:19:41 +00:00
Daniel Dunbar
155ed24359
Prevent clang from emitting output when input has errors
...
+ test case
<rdar://problem/6080040>
http://llvm.org/bugs/show_bug.cgi?id=2280
llvm-svn: 53756
2008-07-18 16:38:05 +00:00
Chris Lattner
e6c693d932
Fix a bug where we didn't promote 'const float' (or typedefs) to
...
double in some places.
llvm-svn: 52846
2008-06-27 22:48:56 +00:00
Chris Lattner
4b413ea3bf
fix a bug handling type attributes in the declspec. declspec processing
...
used to mutate the attribute list for declspecs when the type was
converted, breaking the case where one declspec was shared by multiple
declarators.
This fixes rdar://6032532.
llvm-svn: 52769
2008-06-26 06:27:57 +00:00
Chris Lattner
64d8d074a8
fix this testcase after Mon Ping's intrinsic rename.
...
llvm-svn: 52754
2008-06-26 04:06:27 +00:00
Chris Lattner
5a92bab4f0
"This moves built-in Objective-C types up the scope chains to where they can be replaced by versions included from the runtime library's headers."
...
This makes it ok to use @"foo" without a declaration for NSConstantString.
Patch by David Chisnall!
llvm-svn: 52593
2008-06-21 20:20:39 +00:00
Eli Friedman
fd4c32164c
Make this test actually pass, in addition to the previous patch
...
which made it work.
llvm-svn: 52382
2008-06-17 05:36:46 +00:00
Eli Friedman
327944b343
Basic support for volatile loads and stores. Stores the volatile
...
qualifier in the lvalue, and changes lvalue loads/stores to honor
the volatile flag. Places which need some further attention are marked
with FIXMEs.
Patch by Cédric Venet.
llvm-svn: 52264
2008-06-13 23:01:12 +00:00
Argyrios Kyrtzidis
caec17eab9
Fix broken test.
...
llvm-svn: 52232
2008-06-12 12:44:52 +00:00
Argyrios Kyrtzidis
351763e156
Multiple tests in a single test file must be linked with '&&'.
...
Otherwise, failing tests other than the last one will not be reported.
llvm-svn: 52231
2008-06-12 12:40:02 +00:00
Argyrios Kyrtzidis
34fe86cd9c
Fix the setup of CodeGen/bitfield.c test.
...
Due to the broken setup it was passing the test while it should have failed.
llvm-svn: 52181
2008-06-10 15:48:26 +00:00
Eli Friedman
d5b11a3adc
Don't include complex.h or tgmath.h for this test; they aren't needed,
...
and including tgmath.h causes the test to fail for no good reason.
llvm-svn: 52167
2008-06-10 05:09:36 +00:00
Eli Friedman
e6e0f23a29
Add code to make test/CodeGen/struct-init.c work correctly without the
...
pointer cast hack currently in isIntegerConstantExpr
(in lib/AST/Expr.cpp). Also removes an odd test that even gcc doesn't accept.
The reason the pointer cast hack is relevant here is that it makes Sema
end up misinterpreting the relevant expression as a null pointer constant.
The reason for this patch is that I plan to remove the pointer cast hack
sometime soon because it causes strange issues, especially in its
current form; see my recent email to cfe-dev
"[PATCH] add constant expression evaluation to the AST and fix PR2413".
llvm-svn: 52120
2008-06-09 05:05:07 +00:00
Nuno Lopes
b6f7953818
implement the alias attirbute (in both Sema and Codegen)
...
llvm-svn: 52092
2008-06-08 15:45:52 +00:00
Eli Friedman
c98a7add43
Don't crash emitting an initializer for a static local with union type.
...
This fix just makes sure to construct the global with the appropriate
type, and fixes up the one user this affects to compensate.
llvm-svn: 52084
2008-06-08 01:23:18 +00:00
Eli Friedman
3ce7b20590
Fix crash with conversion to an address-space-qualified pointer. Bug
...
reported on cfe-dev by Cédric Venet.
Note that I seriously doubt that this perticular construct is useful,
though: it's a pointer in an alternate address space pointing into
unqualified address space.
llvm-svn: 52076
2008-06-07 17:27:51 +00:00
Eli Friedman
fd1e32b1f3
Reorganize this loop a bit so it doesn't crash for empty unions. Fixes
...
PR2419.
llvm-svn: 52060
2008-06-06 20:12:37 +00:00
Nuno Lopes
9b07b7b099
implement constant expr. sub ptr ptr
...
llvm-svn: 52049
2008-06-06 16:41:08 +00:00
Eli Friedman
2425cd8158
For setting attributes, don't assume there are ParamVarDecls available,
...
because trying to access non-existent ParamVarDecls can crash.
Testcase from the original source for PR2414.
llvm-svn: 51960
2008-06-04 19:41:28 +00:00
Nuno Lopes
7bd6e58ddc
fix crash when codegening 'cond ? lhs : call-to-void-func()'
...
llvm-svn: 51958
2008-06-04 19:15:45 +00:00
Eli Friedman
8547e1d129
Don't assume that the type of a FunctionDecl is a FunctionType; that
...
assumption isn't accurate in the presence of typedefs.
llvm-svn: 51951
2008-06-04 17:58:41 +00:00
Nuno Lopes
3fe4651e2e
fix decl attributes cleaning
...
this plugs the leak of attributes and also fixes a crash in the test
llvm-svn: 51862
2008-06-01 22:53:53 +00:00
Eli Friedman
10c2417570
Make sure _Bool globals have the correct type.
...
llvm-svn: 51838
2008-06-01 15:31:44 +00:00
Eli Friedman
252e5f1b29
Calculate alignment for local variables.
...
llvm-svn: 51826
2008-05-31 21:20:41 +00:00
Eli Friedman
6859a1b961
PR1893: Fix up the type of tentative definitions of incomplete array
...
types so that they end up the correct size.
llvm-svn: 51787
2008-05-30 20:39:54 +00:00
Eli Friedman
34994cbcbf
Fix and enable generating general union initializers. Essentially, what
...
this does is reconstruct the type for structs and arrays if the type
wouldn't be compatible otherwise.
The assertion about packing in the struct type reconstruction code
sucks, but I don't see any obvious way to fix it. Maybe we need a general
utility method to take a list of types and alignments and try to construct an
unpacked type if possible?
llvm-svn: 51785
2008-05-30 19:58:50 +00:00
Eli Friedman
f7fe41656c
Fix constant vector init for initializer lists with an incomplete list
...
of elements.
llvm-svn: 51769
2008-05-30 12:02:14 +00:00
Eli Friedman
617ba48fd5
Always check that the definition of a function has the correct type.
...
This fixes a crash on the included testcase (found in NetHack).
llvm-svn: 51767
2008-05-30 11:13:18 +00:00
Eli Friedman
43a6d51494
More complete/correct implementation of the comparison operators for
...
constant expressions.
llvm-svn: 51682
2008-05-29 15:17:49 +00:00
Eli Friedman
3c28524632
Fix an extremely subtle bug with pointer comparisons: they have to be
...
unsigned because it's possible (at least in theory) to have
have both positive and negative pointers pointing to the same object.
llvm-svn: 51681
2008-05-29 15:09:15 +00:00
Eli Friedman
133e8040ca
Rearrange EmitLValueForField a bit to work properly for _Bool bitfields
...
in unions (we don't want to do the union-specific bitcast for
bit-fields).
llvm-svn: 51678
2008-05-29 11:33:25 +00:00
Eli Friedman
045bf4ff82
Add codegen support for a few more kinds of initializer constant
...
expressions.
llvm-svn: 51677
2008-05-29 11:22:45 +00:00
Eli Friedman
174d9c26f1
Add CodeGen support for alignment on globals, both for unusual natural
...
alignment and alignment attributes.
llvm-svn: 51676
2008-05-29 11:10:27 +00:00
Eli Friedman
d72a9624a1
Tentative declarations are supposed to have common linkage, not weak.
...
This change makes clang generate the same thing as llvm-gcc.
llvm-svn: 51674
2008-05-29 11:03:17 +00:00
Eli Friedman
5a6d0ede91
Always use packed structs. This isn't really very nice, but there's
...
nothing fundamentally wrong with it. Emitting unpacked structs where
possible is more work for almost no practical benefit. We'll probably
want to fix it at some point anyway, but it's low priority.
The issue with long double in particular is that LLVM thinks an X86 long
double is 10 bytes, while clang considers it for all purposes to be
either 12 or 16 bytes, depending on the platform, even in a packed
struct.
llvm-svn: 51673
2008-05-29 10:58:49 +00:00
Devang Patel
1c56ace4df
Check first member alignment and uses packed struct if required.
...
llvm-svn: 51619
2008-05-27 22:45:40 +00:00
Devang Patel
d608074e09
Fix test case
...
llvm-svn: 51618
2008-05-27 22:44:22 +00:00
Eli Friedman
21911e89d5
A few more cases for aggregate values.
...
llvm-svn: 51596
2008-05-27 15:51:49 +00:00
Eli Friedman
5e2281ede8
Implementation of __builtin_ctlz.
...
llvm-svn: 51595
2008-05-27 15:32:46 +00:00
Eli Friedman
aee9e54dca
Don't swap function decls, and add them to the scope as they are
...
encountered. Mixing up the decls is unintuitive, and confuses the AST
destruction code. Fixes PR2360.
Note that there is a need to look up the characteristics and
declarations of a function associated with a particular name or decl,
but the original swapping code doesn't solve it properly.
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2008-May/001644.html is one
suggestion for how to fix that.
llvm-svn: 51584
2008-05-27 05:07:37 +00:00
Eli Friedman
078c963a31
Add a more reliable check for whether a static declaration has already
...
been used. In preparation for the fix to PR2360, but also a minor bug
in its own right.
llvm-svn: 51583
2008-05-27 04:58:01 +00:00
Eli Friedman
bdef5df44e
Generalize the float type generation code, and specifically fix the
...
codegen of X86 long double.
llvm-svn: 51578
2008-05-27 04:20:05 +00:00
Eli Friedman
43f6b67135
A small testcase; no patch, since it was a bug in a patch I never
...
committed.
llvm-svn: 51370
2008-05-21 13:21:01 +00:00
Eli Friedman
f77daf5e58
Fix test (it was incorrectly succeeding).
...
llvm-svn: 51310
2008-05-20 09:04:19 +00:00
Eli Friedman
53e38bd6b6
Add codegen support for stack address intrinsics.
...
llvm-svn: 51309
2008-05-20 08:59:34 +00:00
Eli Friedman
4b0e2a30e0
Implement codegen for comma operator for structs.
...
llvm-svn: 51304
2008-05-20 07:56:31 +00:00
Eli Friedman
a3a4068949
Implement CodeGen for __builtin_memcpy.
...
llvm-svn: 51282
2008-05-19 23:27:48 +00:00
Eli Friedman
541268086a
Remove illegal test.
...
llvm-svn: 51267
2008-05-19 20:17:34 +00:00
Eli Friedman
f23b6fa41f
Fix the emission of expressions like char a[10] = "asdf"; previously,
...
they were causing bad code to be emitted. There are two fixes here: one
makes sure we emit a string that is long enough, and one makes sure we
properly handle string initialization in init lists.
llvm-svn: 51259
2008-05-19 17:51:16 +00:00
Eli Friedman
f2442dcc8d
Fix support for _Bool bitfields. The issue is that the bitfield width
...
used for _Bool is not the same as the primitive width (which for _Bool
is 1 bit). The load and store changes add some casts to make the
types consistent. The EmitLValue changes make sure that the pointer is
of an appropriate type for loading the bitfield.
This isn't perfect, but it's an improvement, and getting everything
right depends on actually laying out structs in an ABI-compliant way.
llvm-svn: 51224
2008-05-17 20:03:47 +00:00
Eli Friedman
cb92a3f03b
Patch for PR2334, and a similar ObjC bug.
...
llvm-svn: 51193
2008-05-16 17:37:11 +00:00
Eli Friedman
a1b4ed8003
Implementation of __builtin_shufflevector, a portable builtin capable of
...
expressing the full flexibility of the LLVM shufflevector instruction.
The expected immediate usage is in *mmintrin.h, so that they don't
depend on the mess of gcc-inherited (and not completely implemented)
shuffle builtins.
llvm-svn: 51113
2008-05-14 19:38:39 +00:00
Eli Friedman
9fd8b68568
Add codegen support for block-level compound literals.
...
llvm-svn: 51081
2008-05-13 23:18:27 +00:00
Eli Friedman
6a7087e455
Emit basic block for switch body; fixes PR2307.
...
llvm-svn: 50968
2008-05-12 16:08:04 +00:00
Eli Friedman
6e31321043
Don't try to take the address of a bitfield; fixes PR2310.
...
llvm-svn: 50966
2008-05-12 15:06:05 +00:00
Mon P Wang
b84407d6ec
Added support to generate some atomic operators (add, sub, and, or etc..)
...
llvm-svn: 50919
2008-05-09 22:40:52 +00:00
Devang Patel
ac25fc6f2e
Begin handling union bitfields.
...
Note, this is just beginning.
llvm-svn: 50835
2008-05-07 22:28:29 +00:00
Devang Patel
243d5cd283
Fix PR2101 - Codegen crash during bitfield initialization.
...
llvm-svn: 50769
2008-05-06 19:57:59 +00:00
Chris Lattner
033352b036
add a testcase
...
llvm-svn: 50608
2008-05-04 00:56:25 +00:00
Chris Lattner
73669defed
remove the 'unused static' diagnostic from codegen. This should be
...
reimplemented in Sema someday. This is tracked in PR2236. Until then
disabling it removes some bogus diagnostics (see 2236).
llvm-svn: 50263
2008-04-25 15:47:13 +00:00
Nate Begeman
1c906206b8
Fix PR2236
...
Add test
Implement feedback from Chris re: PR1998
llvm-svn: 50001
2008-04-20 20:38:08 +00:00
Nate Begeman
ce4d7fce6b
OCUVector -> ExtVector, shorthand for extended vector, per feedback from Chris.
...
llvm-svn: 49942
2008-04-18 23:10:10 +00:00
Chris Lattner
d71f83a8cb
this started failing because a GEP was constant folded,
...
improve the robustness of the test.
llvm-svn: 49618
2008-04-13 19:54:28 +00:00
Chris Lattner
aa9c7aed0f
Add support for C++ default arguments, and rework Parse-Sema
...
interaction for function parameters, fixing PR2046.
Patch by Doug Gregor!
llvm-svn: 49369
2008-04-08 04:40:51 +00:00
Chris Lattner
579a05d767
Fix PR2049, updating Eli's patch that fixes to mainline. This produces incorrect
...
code, but the codegen doesn't crash. I'll file a bugzilla for the AST being wrong.
llvm-svn: 49226
2008-04-04 18:42:16 +00:00
Chris Lattner
f3bc75afcf
Since isComplexType() no longer returns true for _Complex integers, the code
...
generator needs to call isAnyComplexType(). This fixes PR1960.
llvm-svn: 49220
2008-04-04 16:54:41 +00:00
Chris Lattner
e799eb5daa
Fix PR2081 (problems codegen'ing some recursive structures) patch
...
by Lauro Venancio!
llvm-svn: 49144
2008-04-03 05:50:42 +00:00
Chris Lattner
a21ad8058a
Fix several bugs in array -> pointer decomposition.
...
First, we got several CVR propagation cases wrong, which Eli pointed
out in PR2039.
Second, we didn't propagate address space qualifiers correctly, leading
to incorrect lowering of code in CodeGen/address-space.c.
Third, we didn't uniformly propagate the specifier in the array to the
pointer ("int[restrict 4]" -> "int *restrict").
This adds an ASTContext::getArrayDecayedType member that handles the
non-trivial logic for this seemingly simple operation.
llvm-svn: 49078
2008-04-02 05:18:44 +00:00
Chris Lattner
0fdc379475
The operand to the visibility attribute is required to be a quoted string, not a bare identifier.
...
llvm-svn: 47893
2008-03-04 18:08:48 +00:00
Gabor Greif
e2e5c3f394
The attribute nothrow maps to llvm attribute nounwind. Fix testcase.
...
llvm-svn: 47841
2008-03-03 14:53:09 +00:00
Chris Lattner
65079bd9be
fix codegen support for functions that are nothrow and noreturn.
...
llvm-svn: 47838
2008-03-03 03:45:26 +00:00
Chris Lattner
8496639787
Add a bunch of attributes, patch by Nuno Lopes.
...
llvm-svn: 47837
2008-03-03 03:28:21 +00:00
Lauro Ramos Venancio
01a72ff5d3
Implement codegen for the following static var init.
...
void g() {
static char a[10];
static char *b = a;
}
Now we can compile wget!
llvm-svn: 47627
2008-02-26 21:41:45 +00:00
Lauro Ramos Venancio
8af648ac55
Fix a bug in ConvertAsmString function.
...
llvm-svn: 47618
2008-02-26 19:19:58 +00:00
Lauro Ramos Venancio
c9fbd7301a
Convert x86 target specific inline asm constraints to LLVM.
...
llvm-svn: 47609
2008-02-26 18:33:46 +00:00
Eli Friedman
c62dd9d345
Some const initializer tests for stuff I just committed.
...
llvm-svn: 47442
2008-02-21 18:07:36 +00:00
Chris Lattner
3b418d8446
implement codegen support for sizeof(void), fixing PR2080.
...
llvm-svn: 47429
2008-02-21 05:45:29 +00:00
Lauro Ramos Venancio
e2162c6549
Simplify aggregate initilizer implementation. Use the CodeGenModule::EmitConstantExpr method when
...
possible.
Fix mediabench/mpeg2/mpeg2dec test.
llvm-svn: 47336
2008-02-19 19:27:31 +00:00
Lauro Ramos Venancio
c58fc4052e
A global without initializer must be emitted as weak.
...
Fix Olden/bh test.
llvm-svn: 47292
2008-02-19 00:04:15 +00:00
Lauro Ramos Venancio
dec89733a7
Implement multi-dimension array initalizer.
...
Fix McCat/08-main test.
llvm-svn: 47286
2008-02-18 22:44:02 +00:00
Chris Lattner
df53e20f2d
implement codegen support for aggregates casted to void.
...
llvm-svn: 47226
2008-02-16 23:55:16 +00:00
Lauro Ramos Venancio
bada8d4b5b
Implement extern block var.
...
llvm-svn: 47223
2008-02-16 22:30:38 +00:00
Eli Friedman
de4496bb9e
Basic codegen test for conditional with void*.
...
llvm-svn: 46940
2008-02-10 23:18:23 +00:00
Lauro Ramos Venancio
d74057fa87
Fix a bitfield regression. Reported by Anders Carlsson.
...
llvm-svn: 46889
2008-02-08 19:46:46 +00:00
Lauro Ramos Venancio
9eff02d9f8
Simplify bitfield codegen.
...
Fix codegen of struct { short a[3]; int b:15; }.
llvm-svn: 46859
2008-02-07 19:29:53 +00:00
Lauro Ramos Venancio
0f166de892
Fix codegen of
...
struct {
char a[3];
unsigned char b:1;
};
Fix PR1990.
llvm-svn: 46856
2008-02-07 18:18:58 +00:00
Chris Lattner
871e0ceffb
explicitly document that return statement argument does not necessarily follow the result type of the function. Add testcase.
...
llvm-svn: 46823
2008-02-06 21:20:34 +00:00
Eli Friedman
220ee41011
Fix the codegen of structs with flexible array members.
...
llvm-svn: 46806
2008-02-06 05:33:51 +00:00
Chris Lattner
a5e4d30942
Finish off the refactoring of type handling stuff. Now we recompile every
...
tag decl after it has been completed
llvm-svn: 46798
2008-02-06 04:51:19 +00:00
Chris Lattner
b5eda6253b
pull .ll and .bc writing out of the ASTConsumer destructors into some top
...
level code in clang. This is a cleanup, but does implement "-o" for
-emit-llvm. One effect of this is that "clang foo.c -emit-llvm" will now
emit into foo.ll instead of stdout. Use "clang foo.c -emit-llvm -o -" or
"clang < foo.c -emit-llvm" to get the old behavior.
llvm-svn: 46791
2008-02-06 01:42:25 +00:00
Chris Lattner
b1537ebdd4
rewrite some of the type refinement code to eliminate dangling pointers
...
simplify the code and generally make it more robust.
llvm-svn: 46745
2008-02-05 08:06:13 +00:00
Chris Lattner
b977b6a59b
Relax an assertion, fixing PR1968
...
llvm-svn: 46742
2008-02-05 06:37:34 +00:00
Devang Patel
a703a67384
Cleanup InitListExpr code generation code.
...
Handle padding fields while initializing struct (fix PR 1962)
llvm-svn: 46736
2008-02-05 02:39:50 +00:00
Christopher Lamb
da8e5d979e
Add ending newline to test.
...
llvm-svn: 46692
2008-02-04 02:35:11 +00:00
Christopher Lamb
025b5fb883
Add experimental support for address space qualified types. Address space
...
qualifiers use the __attribute__((address_space(id))) syntax.
llvm-svn: 46691
2008-02-04 02:31:56 +00:00
Anders Carlsson
6fa0813186
Add RUN line.
...
llvm-svn: 46663
2008-02-02 04:49:12 +00:00
Chris Lattner
bfc2d8acd9
testcase for previous patch.
...
llvm-svn: 46662
2008-02-02 04:45:42 +00:00
Anders Carlsson
53fef5d9d6
Add trailing newline.
...
llvm-svn: 46652
2008-02-01 23:27:51 +00:00
Anders Carlsson
0b05d041f2
Only OCU vectors can be splatted.
...
llvm-svn: 46651
2008-02-01 23:17:55 +00:00
Chris Lattner
a94035bbb8
Fix PR1921 by promoting negative indices to intptrty.
...
llvm-svn: 46599
2008-01-31 04:12:50 +00:00
Lauro Ramos Venancio
86b99c1b79
getLLVMFieldNo can't be called before emitting the base value.
...
llvm-svn: 46576
2008-01-30 21:23:20 +00:00
Lauro Ramos Venancio
f5291d2871
A pointer to an opaque type is an "opaque type definition".
...
llvm-svn: 46575
2008-01-30 21:21:08 +00:00
Eli Friedman
1bc0fed9a5
Fix codegen for conditionals with incommpatible pointer types. Code
...
that causes this isn't really correct, but if we're going to accept
this, it should come up with a consistent AST.
llvm-svn: 46557
2008-01-30 17:02:03 +00:00
Chris Lattner
05ba4cbe17
fix a problem reported by Eli, caused by not keeping bool as i1
...
when in a register.
llvm-svn: 46552
2008-01-30 07:01:17 +00:00
Devang Patel
45a65d2ee1
Handle incomplete struct initializer.
...
llvm-svn: 46534
2008-01-29 23:23:18 +00:00
Eli Friedman
7031d734ed
Fix a bug where CodeGen would attempt to erase an instruction that was
...
already used.
llvm-svn: 46519
2008-01-29 18:13:51 +00:00
Anders Carlsson
ce0740e1f5
Handle binary or in constant expressions.
...
llvm-svn: 46482
2008-01-29 01:33:32 +00:00
Anders Carlsson
0674a7417f
Correctly handle constants that refer to enums.
...
llvm-svn: 46481
2008-01-29 01:28:48 +00:00
Anders Carlsson
6f2a10e8c9
Correctly handle scalars in braces.
...
llvm-svn: 46480
2008-01-29 01:15:48 +00:00
Nate Begeman
43eec490fb
Support checking and codegen of constant vector globals
...
llvm-svn: 46343
2008-01-25 05:34:48 +00:00
Lauro Ramos Venancio
09af71c2a6
Implement bitfield write.
...
llvm-svn: 46258
2008-01-22 22:36:45 +00:00
Lauro Ramos Venancio
2ddcb25a3b
Implement bitfield read.
...
llvm-svn: 46257
2008-01-22 20:17:04 +00:00
Lauro Ramos Venancio
37bae3e8aa
Simplify the bitfield codegen.
...
llvm-svn: 46230
2008-01-21 22:54:57 +00:00
Anders Carlsson
60bfc161a0
Assert that the type of the cast is equal to the _unqualified_ type of the subexpression. Fixes a problem spotted by Nuno Lopes.
...
llvm-svn: 46158
2008-01-18 02:25:57 +00:00
Chris Lattner
a65e1f3b31
Move promoteExprToType from being a static method in SemaExpr.cpp to being
...
a method named ImpCastExprToType in Sema.
Use this method to insert implicit casts for case statements from their
operand type to the condition type of the switch. This fixes a crash on
test/CodeGen/statements.c, reported by Eli Friedman.
llvm-svn: 46083
2008-01-16 19:17:22 +00:00
Anders Carlsson
1ba25ca171
Add codegen upport for implicit casts to aggregate exprs.
...
llvm-svn: 45954
2008-01-14 06:28:57 +00:00
Chris Lattner
41a1ef0dfe
implement proper support for _Bool in memory, which is usually i8, not i1.
...
This fixes a crash reported by Seo Sanghyeon
llvm-svn: 45778
2008-01-09 18:47:25 +00:00
Chris Lattner
20455f204f
Fix a crash reported by Seo Sanghyeon.
...
llvm-svn: 45530
2008-01-03 06:36:51 +00:00
Chris Lattner
7977cca8e8
Fix PR1895: a crash on an ugly gcc extension.
...
llvm-svn: 45505
2008-01-02 21:54:09 +00:00
Nate Begeman
330aaa79e0
Allow implicit casts during arithmetic for OCUVector operations
...
Add codegen support and test for said casts.
llvm-svn: 45443
2007-12-30 02:59:45 +00:00
Christopher Lamb
d91c3d4926
Enable CodeGen for member expressions based on call expressions returning aggregate types. This enables expressions like 'foo().member.submember'.
...
llvm-svn: 45395
2007-12-29 05:02:41 +00:00
Chris Lattner
807979824e
use -emit-llvm-bc
...
llvm-svn: 45372
2007-12-27 20:35:58 +00:00
Chris Lattner
40ad6cd854
no need to verify this, no errors/warnings are expected.
...
llvm-svn: 45371
2007-12-27 20:31:56 +00:00
Seo Sanghyeon
acb00f4a73
Remove broken assert from CodeGen. Better check is done in Sema.
...
llvm-svn: 45358
2007-12-26 05:21:37 +00:00
Seo Sanghyeon
6f1b274976
String literal in aggregate expression
...
llvm-svn: 45330
2007-12-23 03:11:58 +00:00
Devang Patel
505b4f1fd4
Convert opaque type when struct definition is seen.
...
llvm-svn: 45287
2007-12-21 19:35:28 +00:00
Chris Lattner
37bd2ecb11
local static vars are globals also. This fixes a testcase
...
reported by Seo.
llvm-svn: 45156
2007-12-18 08:16:44 +00:00
Seo Sanghyeon
d4d8c3c717
Array subscription in aggregate expression
...
llvm-svn: 45023
2007-12-14 02:04:12 +00:00
Seo Sanghyeon
3abb6d8435
Implement dereference operator in aggregate expression
...
llvm-svn: 45020
2007-12-14 01:09:11 +00:00
Chris Lattner
c6208a72f7
Fix a codegen crash on test/CodeGen/cast.c, reported by Keith.
...
llvm-svn: 44908
2007-12-12 04:13:20 +00:00
Devang Patel
b37b12d102
Match union field type when member expression is u->x
...
llvm-svn: 44879
2007-12-11 21:33:16 +00:00
Chris Lattner
11fbda2b5a
Reimplement support for strings that initialize global inits now that
...
the types are right in sema. Thanks Steve.
llvm-svn: 44834
2007-12-11 01:38:45 +00:00
Devang Patel
ab6aadb34a
Add support to share llvm fields for bit-fields.
...
For example, struct { char a; short b:2; };
llvm-svn: 44830
2007-12-11 00:49:18 +00:00
Steve Naroff
f727faf2ed
Explicitly set the string literal type from "char *" to "constant array of char".
...
At this point, I am fairly certain the front-end is correct. Unfortunately, the back-end is still unhappy.
That said, I've commented out the two lines in globalinit.c that are causing problems.
Chris, please have a look...thanks!
llvm-svn: 44823
2007-12-11 00:00:01 +00:00
Chris Lattner
433fb26707
add support for implicit cast from array to pointer that is not the element
...
type.
llvm-svn: 44809
2007-12-10 19:50:32 +00:00
Chris Lattner
e665077f9a
disable case that makes this fail.
...
llvm-svn: 44807
2007-12-10 19:44:50 +00:00
Devang Patel
bb5c0d8960
Use getABITypeSizeInBits() instead of getTypeSizeInBits() during struct layout.
...
llvm-svn: 44798
2007-12-10 18:25:34 +00:00
Chris Lattner
686628e052
extend or truncate the initializer for a string initializer to match its type.
...
llvm-svn: 44751
2007-12-10 00:00:56 +00:00
Chris Lattner
c25c42f3ca
Implement codegen support for:
...
char text[8] = "string";
Big fixme remains.
llvm-svn: 44750
2007-12-09 23:49:42 +00:00
Chris Lattner
283d094b75
implement support for functions that initialize globals.
...
llvm-svn: 44730
2007-12-09 00:36:01 +00:00
Devang Patel
65a2288eef
More struct bitfields layout work. Now handle,
...
struct STestB1 {char a; char b:2; } stb1;
struct STestB2 {char a; char b:5; char c:4} stb2;
llvm-svn: 44664
2007-12-06 19:16:05 +00:00
Seo Sanghyeon
3d072bea09
Ignore typedefs in pointer arithmetic codegen.
...
llvm-svn: 44529
2007-12-03 06:23:43 +00:00
Seo Sanghyeon
828429fea9
Fix isStructureType and isUnionType to ignore typedefs, as stated
...
in the header. Patch by Cédric Venet.
llvm-svn: 44519
2007-12-02 16:57:27 +00:00
Christopher Lamb
0cbd8723f3
Treat discarding array initializer elements as an extwarn (so -pedantic-errors flags it). Allow CodeGen to truncate the initializer if needed.
...
llvm-svn: 44518
2007-12-02 08:49:54 +00:00
Christopher Lamb
39aeb4069b
Commit test for CL 44440.
...
llvm-svn: 44514
2007-12-02 07:47:19 +00:00
Chris Lattner
e4f0feb534
Fix buggy test
...
llvm-svn: 44513
2007-12-02 07:46:00 +00:00
Chris Lattner
d8d18d561e
add codegen support for global inits that require array decay.
...
llvm-svn: 44511
2007-12-02 07:30:13 +00:00
Chris Lattner
5bcdf24a50
Handle global variable definitions which change the type of a definition, such as:
...
extern int x[];
void foo() { x[0] = 1; }
int x[10];
void bar() { x[0] = 1; }
llvm-svn: 44509
2007-12-02 07:09:19 +00:00
Chris Lattner
41af8182d8
implement codegen for functions whose function body type don't match
...
their prototype.
llvm-svn: 44506
2007-12-02 06:27:33 +00:00
Oliver Hunt
aefc8fd415
Support initalisers for more than just int-typed static variables.
...
We now use the CodeGenModule logic for generating the constant
initialiser expression, so happily further initialiser fixes should
automatically work for statics as well.
llvm-svn: 44495
2007-12-02 00:11:25 +00:00
Chris Lattner
9e137aad78
fix a couple switch codegen problems Oliver reported.
...
llvm-svn: 44484
2007-12-01 05:27:33 +00:00
Chris Lattner
1386de8757
fix a bug handling typedefs in member expr codegen. Patch
...
by Seo Sanghyeon
llvm-svn: 44455
2007-11-30 18:02:19 +00:00
Chris Lattner
b6a7b582ee
Fix a codegen crash on void ?: reported by Oliver
...
llvm-svn: 44454
2007-11-30 17:56:23 +00:00
Chris Lattner
aa0b570dfb
Support fully general case expressions, patch by Sanghyeon Seo!
...
llvm-svn: 44453
2007-11-30 17:44:57 +00:00
Oliver Hunt
93c4ce650c
Fix typo in writable string test
...
llvm-svn: 44398
2007-11-28 06:52:03 +00:00
Oliver Hunt
a951571941
Adding code gen tests for writable and shared string literals.
...
llvm-svn: 44397
2007-11-28 06:27:12 +00:00
Chris Lattner
2ab40a6207
Fix sema support for the gnu ?: expression with a
...
missing middle expression, and fix a codegen bug where
we didn't correctly promote the condition to the right
result type. This fixes PR1824.
llvm-svn: 44322
2007-11-26 01:40:58 +00:00
Chris Lattner
a3ee6fa84f
this works.
...
llvm-svn: 44321
2007-11-26 01:39:17 +00:00
Chris Lattner
136449a6d7
improve codegen for global variable initializers, implementing
...
test/CodeGen/global-with-initialiser.c
Patch by Oliver Hunt!
llvm-svn: 44290
2007-11-23 22:07:55 +00:00
Anders Carlsson
9c1011c090
Put back the flags field in the constant CF string type.
...
llvm-svn: 44222
2007-11-19 00:25:30 +00:00
Anders Carlsson
bfd60eedd7
Generate code for member exprs.
...
llvm-svn: 43641
2007-11-02 16:59:10 +00:00
Devang Patel
ad175428c6
start adding pading fields.
...
llvm-svn: 43590
2007-11-01 00:07:12 +00:00
Anders Carlsson
e89b84ab29
Fix a typo that prevented pointer-to-int conversions from working.
...
llvm-svn: 43588
2007-10-31 23:18:02 +00:00
Anders Carlsson
0370eb2034
Handle function calls that return aggregate expressions.
...
llvm-svn: 43581
2007-10-31 22:04:46 +00:00
Devang Patel
cc4c2930ae
New test to verify llvm struct layout.
...
llvm-svn: 43577
2007-10-31 21:02:10 +00:00
Chris Lattner
595db86c9d
__real__ and __imag__ can be lvalues. Add support to ast and codegen for them.
...
llvm-svn: 43525
2007-10-30 22:53:42 +00:00
Devang Patel
ed93c3c3b3
Codegen union member references.
...
llvm-svn: 43390
2007-10-26 19:42:18 +00:00
Devang Patel
7718d7a2eb
Handle non LValue base expressions.
...
llvm-svn: 43387
2007-10-26 18:15:21 +00:00
Devang Patel
ffdb07c939
Code gen static initializer.
...
llvm-svn: 43386
2007-10-26 17:50:58 +00:00
Devang Patel
8717417b3b
Codegen array initializers.
...
llvm-svn: 43385
2007-10-26 17:44:44 +00:00
Devang Patel
19c2b9a66f
Codegen global array initializers.
...
llvm-svn: 43383
2007-10-26 16:31:40 +00:00
Devang Patel
b989c9e65c
Fix "strbuf += stufflen;" crash.
...
llvm-svn: 43365
2007-10-25 22:19:13 +00:00
Devang Patel
d68df20620
Handle
...
foo()->a = 42;
llvm-svn: 43315
2007-10-24 22:26:28 +00:00
Devang Patel
b67e596d86
Handle non-constant initializers.
...
llvm-svn: 43301
2007-10-24 18:05:48 +00:00
Devang Patel
61eaea88f8
Fix typo.
...
llvm-svn: 43269
2007-10-23 23:29:51 +00:00
Devang Patel
65c4afb940
Handle nested structs.
...
typdef struct A { int i; struct A *next; } A
llvm-svn: 43268
2007-10-23 23:26:46 +00:00
Devang Patel
30efa2eec9
Handle simple struct member expr.
...
llvm-svn: 43258
2007-10-23 20:28:39 +00:00
Devang Patel
152f18f671
Recognize while(1) and avoid extra blocks.
...
llvm-svn: 42811
2007-10-09 20:51:27 +00:00
Devang Patel
f8a76755df
new test
...
llvm-svn: 42810
2007-10-09 20:37:41 +00:00
Devang Patel
1166312e8b
Code gen case statement ranges.
...
llvm-svn: 42766
2007-10-08 20:57:48 +00:00
Devang Patel
64a9ca7c58
Support case statement ranges.
...
llvm-svn: 42648
2007-10-05 20:54:07 +00:00
Devang Patel
da5d6bbc40
switch statement code gen.
...
llvm-svn: 42616
2007-10-04 23:45:31 +00:00
Chris Lattner
8a241f9359
Teach Type::is[un]SignedIntegerType about enum decls. This allows the code generator
...
to emit signed comparisons when needed for enum decl references. This implements
test/CodeGen/enum.c. I think enums should be good now.
llvm-svn: 41572
2007-08-29 17:48:46 +00:00
Chris Lattner
23bf38b8c5
add some more testcases now that sema is happier :)
...
llvm-svn: 41492
2007-08-27 16:37:44 +00:00
Chris Lattner
61f6077814
testcase that doesn't work quite yet
...
llvm-svn: 41478
2007-08-27 05:23:45 +00:00
Chris Lattner
02aac86549
new testcases
...
llvm-svn: 41465
2007-08-26 22:41:57 +00:00
Chris Lattner
1bc6fac5c6
new testcase
...
llvm-svn: 41406
2007-08-25 21:57:08 +00:00
Chris Lattner
9f0ad96b3e
implement codegen for real/imag. TODO: imag of non-complex.
...
llvm-svn: 41376
2007-08-24 21:20:17 +00:00
Chris Lattner
3d966d6556
Teach emit-llvm for scalars to properly handle compound assignment
...
operators in all their glory :)
llvm-svn: 41373
2007-08-24 21:00:35 +00:00
Chris Lattner
afd455c0cf
make this harder
...
llvm-svn: 41346
2007-08-23 23:49:47 +00:00
Chris Lattner
725c6a4279
this test is passing, though it is generating bogus code at the moment.
...
llvm-svn: 41314
2007-08-23 05:47:53 +00:00
Chris Lattner
76ba849ed3
Fix array->pointer decay. This unbreaks test/CodeGen/array.c
...
llvm-svn: 41202
2007-08-20 22:37:10 +00:00
Chris Lattner
afada9b077
xfail this for now.
...
llvm-svn: 41015
2007-08-11 00:05:07 +00:00
Chris Lattner
e9a91ae4ea
make this harder
...
llvm-svn: 40994
2007-08-10 17:02:59 +00:00
Chris Lattner
b20b94de3a
testcase for vector element access stuff.
...
llvm-svn: 40783
2007-08-03 16:42:43 +00:00
Gabor Greif
e97cd7e65c
add FIXME and un-XFAIL test
...
llvm-svn: 39858
2007-07-14 20:05:18 +00:00
Gabor Greif
03a0073b36
fix type of main, use !=
...
llvm-svn: 39842
2007-07-13 23:40:27 +00:00
Gabor Greif
d4606aa36e
implement _Complex * == and !=
...
llvm-svn: 39841
2007-07-13 23:33:18 +00:00
Gabor Greif
f7b1f667d4
a simple _Complex testcase
...
llvm-svn: 39836
2007-07-13 22:15:44 +00:00
Chris Lattner
91dacfec85
Check in these testcases.
...
llvm-svn: 39829
2007-07-13 20:18:44 +00:00