2292 Commits

Author SHA1 Message Date
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