summaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CGExprConstant.cpp
AgeCommit message (Collapse)Author
2008-12-12add codegen support for __func__ and friends, producing the sameChris Lattner
output that GCC does. rdar://6440297 llvm-svn: 60922
2008-12-11Unifies the name-lookup mechanisms used in various parts of the ASTDouglas Gregor
and separates lexical name lookup from qualified name lookup. In particular: * Make DeclContext the central data structure for storing and looking up declarations within existing declarations, e.g., members of structs/unions/classes, enumerators in C++0x enums, members of C++ namespaces, and (later) members of Objective-C interfaces/implementations. DeclContext uses a lazily-constructed data structure optimized for fast lookup (array for small contexts, hash table for larger contexts). * Implement C++ qualified name lookup in terms of lookup into DeclContext. * Implement C++ unqualified name lookup in terms of qualified+unqualified name lookup (since unqualified lookup is not purely lexical in C++!) * Limit the use of the chains of declarations stored in IdentifierInfo to those names declared lexically. * Eliminate CXXFieldDecl, collapsing its behavior into FieldDecl. (FieldDecl is now a ScopedDecl). * Make RecordDecl into a DeclContext and eliminates its Members/NumMembers fields (since one can just iterate through the DeclContext to get the fields). llvm-svn: 60878
2008-12-01Change more code over to using the new Expr::EvaluateAnders Carlsson
llvm-svn: 60323
2008-11-25Remove the #ifdeffed out code.Anders Carlsson
llvm-svn: 60032
2008-11-22Use tryEvaluate for constant exprs.Anders Carlsson
llvm-svn: 59857
2008-11-17A few corrections to the expr constant work. Not enabled at the Eli Friedman
moment. llvm-svn: 59435
2008-11-17More expr constant work. (Off by default).Anders Carlsson
llvm-svn: 59433
2008-11-16rename Expr::tryEvaluate to Expr::Evaluate.Chris Lattner
llvm-svn: 59426
2008-11-16More constant expr work.Anders Carlsson
llvm-svn: 59405
2008-11-15Check in code that uses tryEvaluate for emitting constant exprs (not used yet).Anders Carlsson
llvm-svn: 59375
2008-11-15Use IgnoreParenCasts. No functionality change.Anders Carlsson
llvm-svn: 59371
2008-11-11Introduce a single AST node SizeOfAlignOfExpr for all sizeof and alignof ↵Sebastian Redl
expressions, both of values and types. llvm-svn: 59057
2008-10-26make codegen reject initializes with designators, like this:Chris Lattner
t.c:1:13: error: cannot codegen this designators yet int a[10] = {2, 4, [8]=9, 10}; ^~~~~~~~~~~~~~~~~ llvm-svn: 58220
2008-10-21Preliminary support for function overloadingDouglas Gregor
llvm-svn: 57909
2008-10-12silence release-assert warnings.Chris Lattner
llvm-svn: 57392
2008-10-06Make sema and codegen allow __builtin___CFStringMakeConstantString as a validChris Lattner
constant lvalue. Implement this in codegen by moving the code out of CGBuiltin into EmitConstantExpr. llvm-svn: 57163
2008-10-06instead of making codegen try to know about all of the builtins to generateChris Lattner
constants for them, just use the constant evaluator to do the job. This also fixes crashes on 'unknown constant builtins'. llvm-svn: 57155
2008-08-25Handle emitting __builtin_huge_valf as a constant expr.Anders Carlsson
llvm-svn: 55299
2008-08-23Add CodeGen support for CXXZeroInitValueExpr.Argyrios Kyrtzidis
llvm-svn: 55249
2008-08-18Add ExplicitCastExpr to replace the current CastExpr, and have ↵Argyrios Kyrtzidis
ImplicitCastExpr and ExplicitCastExpr derive from a common base class (CastExpr): Expr -> CastExpr -> ExplicitCastExpr -> ImplicitCastExpr llvm-svn: 54955
2008-08-16Add CodeGen support for AddrLabelExpr in initializers.Daniel Dunbar
llvm-svn: 54837
2008-08-16Change WarnUnsupported to ErrorUnsupported (in name and in practice).Daniel Dunbar
- We are beyond the point where this shows up often and when it does generating miscompiled files is bad. llvm-svn: 54836
2008-08-13Add GetAddrOfConstantCString methodDaniel Dunbar
- Returns addr of constant for argument + '\0'. - I couldn't think of a better name. - Move appropriate users of GetAddrOfConstantString to this. Rename getStringForStringLiteral to GetStringForStringLiteral. Add GetAddrOfConstantStringFromLiteral - This combines GetAddrOfConstantString and GetStringForStringLiteral. This method can be, but is not yet, more efficient. Change GetAddrOfConstantString to not add terminating '\0' - <rdar://problem/6140956> llvm-svn: 54768
2008-08-13Change ObjCRuntime GenerateProtocol[Ref] methods to takeDaniel Dunbar
ObjCProtocolDecl directly. Implement CodeGen support for forward protocol decls (no-ops are so nice to implement). Also moved CGObjCRuntime.h out of CodeGenModule.h llvm-svn: 54709
2008-08-12Add ObjC constant string support for NeXT.Daniel Dunbar
Changed CGObjCRuntime::GenerateConstantString interface to take std::string instead of char* and size. Change ObjC functions which call on GenerateConstantString to bitcast result to appropriate type. llvm-svn: 54659
2008-08-11Change CodeGenModule to only create ObjC runtime for ObjC filesDaniel Dunbar
- Changed CodeGenModule::getObjCRuntime to return reference. - Added CodeGenModule::hasObjCRuntime predicate. llvm-svn: 54645
2008-08-11More #include cleaningDaniel Dunbar
- Remove internal uses of AST.h llvm-svn: 54628
2008-08-10Back out r54608 (inline string literals were getting an extra '\0')Daniel Dunbar
temporarily, I assumed GetAddrForConstantString literal was being used consistently but it doesn't look like it is. Factored out a CodeGenModule::getStringForStringLiteral which handles extracting a std::string for the bytes of a StringLiteral, padded to match the type. Update EmitLValue to use getStringForStringLiteral, this was previously not padding strings correctly. Good thing we only emit strings in 4 different places! llvm-svn: 54621
2008-08-10Fix crash during initialization of a bitfield which followed a zeroDaniel Dunbar
length element. Fix some 80-col violations. llvm-svn: 54610
2008-08-04Finally fix PR2189. This makes a fairly invasive but important change toChris Lattner
move getAsArrayType into ASTContext instead of being a method on type. This is required because getAsArrayType(const AT), where AT is a typedef for "int[10]" needs to return ArrayType(const int, 10). Fixing this greatly simplifies getArrayDecayedType, which is a good sign. llvm-svn: 54317
2008-07-29Rework codegen emission of globalsDaniel Dunbar
- No (intended) functionality change. - Primary purpose is to clearly separate (lazy) construction of globals that are a forward declaration or tentative definition from those that are the final definition. - Lazy construction is now encapsulated in GetAddrOf{Function,GlobalVar} while final definitions are constructed in EmitGlobal{Function,Var}Definition. - External interface for dealing with globals is now limited to EmitGlobal and GetAddrOf{Function,GlobalVar}. - Also updated helper functions dealing with statics, annotations, and ctors to be private. llvm-svn: 54179
2008-07-26Fix a bug in my previous patch, CGF is not valid for constants outside a ↵Chris Lattner
function llvm-svn: 54108
2008-07-26remove uses of QualType::getCanonicalType() from codegen for PR2189Chris Lattner
llvm-svn: 54107
2008-07-17Fix for codegen crash on multibit bool bitfield initializationDaniel Dunbar
<rdar://problem/6078606> llvm-svn: 53737
2008-06-21"this patch adds code generation hooks for Objective-C constant strings. It ↵Chris Lattner
also modifies Sema so that Objective-C constant strings are treated as untyped objects if the interface for the constant string class can not be found. This is consistent with Apple GCC. I thought it was consistent with GNU GCC, since this was causing failures when trying to compile GNUstep with (GNU) GCC, but it appears that this is not the case when attempting to produce a simple test case to demonstrate it. Possibly there is a way of making the error go away, but I haven't found out what it is yet." Patch by David Chisnall! llvm-svn: 52599
2008-06-07Fix crash with conversion to an address-space-qualified pointer. Bug Eli Friedman
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-06Reorganize this loop a bit so it doesn't crash for empty unions. Fixes Eli Friedman
PR2419. llvm-svn: 52060
2008-06-06implement constant expr. sub ptr ptrNuno Lopes
llvm-svn: 52049
2008-06-01Make sure _Bool globals have the correct type.Eli Friedman
llvm-svn: 51838
2008-05-30Fix and enable generating general union initializers. Essentially, what Eli Friedman
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-30Fix constant vector init for initializer lists with an incomplete list Eli Friedman
of elements. llvm-svn: 51769
2008-05-30Some additions to constant initializer generation code. Adds Eli Friedman
bit-field initialization; ugly code, X86-only, but it works, at least for basic stuff. Separates/adds union initialization; currently disabled, though, because the struct/array code needs modifications to support elements of the wrong type. Fixes PR2381 and PR2309 with the bit-field initialization. And NetHack compiles and appears to work with a few tweaks (to work around the lack of transparent_union support, and clang being a bit strict about conflicting declarations). llvm-svn: 51763
2008-05-29More complete/correct implementation of the comparison operators for Eli Friedman
constant expressions. llvm-svn: 51682
2008-05-29Add codegen support for a few more kinds of initializer constant Eli Friedman
expressions. llvm-svn: 51677
2008-05-20Restructure constant structure init codegen so that it's possible to Eli Friedman
implement bitfield codegen (although I don't envy the person who implements it). This also prevents a crash on code like that from PR2309 (it's still broken, but it fails more gracefully). llvm-svn: 51285
2008-05-20Remove code that shouldn't have any effect anymore.Eli Friedman
llvm-svn: 51284
2008-04-20use simplified ConstantFP:get method.Chris Lattner
llvm-svn: 49979
2008-04-15Remove FileVarDecl and BlockVarDecl. They are replaced by ↵Steve Naroff
VarDecl::isBlockVarDecl() and VarDecl::isFileVarDecl(). This is a fairly mechanical/large change. As a result, I avoided making any changes/simplifications that weren't directly related. I did break two Analysis tests. I also have a couple FIXME's in UninitializedValues.cpp. Ted, can you take a look? If the bug isn't obvious, I am happy to dig in and fix it (since I broke it). llvm-svn: 49748
2008-04-08Add support for C++ default arguments, and rework Parse-Sema Chris Lattner
interaction for function parameters, fixing PR2046. Patch by Doug Gregor! llvm-svn: 49369
2008-03-15Make a major restructuring of the clang tree: introduce a top-levelChris Lattner
lib dir and move all the libraries into it. This follows the main llvm tree, and allows the libraries to be built in parallel. The top level now enforces that all the libs are built before Driver, but we don't care what order the libs are built in. This speeds up parallel builds, particularly incremental ones. llvm-svn: 48402