aboutsummaryrefslogtreecommitdiff
path: root/lib/AST
AgeCommit message (Collapse)Author
2011-12-16If there is a definition of an ObjCInterfaceDecl, make it the Decl returned ↵Douglas Gregor
from the corresponding ObjCInterfaceType git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146740 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-16Fix chaining of ObjCInterfaceDecl redeclarationsDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146722 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-15Keep track of all declarations of an Objective-C class (both forwardDouglas Gregor
declarations and definitions) as ObjCInterfaceDecls within the same redeclaration chain. This new representation matches what we do for C/C++ variables/functions/classes/templates/etc., and makes it possible to answer the query "where are all of the declarations of this class?" git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146679 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-15Extend ObjCInterfaceDecl::DefinitionData to contain a pointer to theDouglas Gregor
definition, and implement ObjCInterfaceDecl::getDefinition() efficiently based on that. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146669 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-15Introduce the core infrastructure needed to model a completeDouglas Gregor
redeclaration chain for Objective-C classes, including: - Using the first declaration as the canonical declaration. - Using the definition as the primary DeclContext - Making sure that all declarations have a pointer to the definition data, and the definition knows that it is the definition. - Serialization support for when a definition gets added to a declaration that comes from an AST file. However, note that we're not taking advantage of much of this code yet, because we're still re-using ObjCInterfaceDecls. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146667 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-15Move the definition-specific data of ObjCInterfaceDecl into aDouglas Gregor
separately-allocated DefinitionData structure, which we manage the same way as CXXRecordDecl::DefinitionData. This prepares the way for making ObjCInterfaceDecls redeclarable, to more accurately model forward declarations of Objective-C classes and eliminate the mutation of ObjCInterfaceDecl that causes us serious trouble in the AST reader. Note that ObjCInterfaceDecl's accessors are fairly robust against being applied to forward declarations, because Clang (and Sema in particular) doesn't perform RequireCompleteType/hasDefinition() checks everywhere it has to. Each of these overly-robust cases is marked with a FIXME, which we can tackle over time. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146644 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-15Replace all comparisons between ObjCInterfaceDecl pointers with callsDouglas Gregor
to declaresSameEntity(), as a baby step toward tracking forward declarations of Objective-C classes precisely. Part of <rdar://problem/10583531>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146618 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-14Eliminate the vistigial ObjCClassDecl::ObjCClassRef, and inline itsDouglas Gregor
members into ObjCClassDecl, saving ourselves one pointer per forward declaration. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146564 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-13Added an assertion about overflow in sizeof evaluation. This does not solve ↵Abramo Bagnara
the underlying structural issue that is waiting for a proper solution. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146482 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-13Add checks and diagnostics for many of the cases which C++11 considers to notRichard Smith
be constant expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146479 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-12Fixes a bug in calculation of field offsets of ms_structFariborz Jahanian
fields by just following what comment says. // rdar://10513599 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146414 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-12Clean up diagnostic wording for disallowed casts in C++11 constant expressions.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146395 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-12Implement C++11 constant expression cast restrictions.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146371 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-12Fix some not-yet-used diagnostic code in a template, which gcc spotted and clangRichard Smith
did not! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146366 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-12Prepare constant expression infrastructure for the generation of richerRichard Smith
diagnostics. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146365 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-10Add a fast path to the constant evaluator for integer literals. This speeds upRichard Smith
compilation of some translation units of SPEC's 445.gobmk by ~4%, and does not seem to cause a measurable slowdown in other cases. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146306 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-10Add ability to supply additional message to availability macros,Fariborz Jahanian
// rdar://10095131 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146304 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-09C++11 constant expressions: Don't use CheckICE in C++11; instead, determineRichard Smith
whether an expression is a (core) constant expression as a side-effect of evaluation. This takes us from accepting far too few expressions as ICEs to accepting slightly too many -- fixes for the remaining cases are coming next. The diagnostics produced when an expression is found to be non-constant are currently quite poor (with generic wording but reasonable source locations), and will be improved in subsequent commits. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146289 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-09Teach isConstantInitializer that numeric literals are constants, rather thanRichard Smith
having it evaluate them. No change in functionality, but a speed up of about 5% on some translation units in SPEC 445.gobmk. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146248 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-09In ExprEvaluatorBase::VisitOpaqueValueExpr() add a sanity check to avoidArgyrios Kyrtzidis
infinite recursion due to bad OpaqueValueExpr. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146237 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-09Replace the implementation of __builtin_constant_p (which was based on the GCCRichard Smith
documentation) with one based on what GCC's __builtin_constant_p is actually intended to do (discovered by asking a friendly GCC developer). In particular, an expression which folds to a pointer is now only considered to be a "constant" by this builtin if it refers to the first character in a string literal. This fixes a rather subtle wrong-code issue when building with glibc. Given: const char cs[4] = "abcd"; int f(const char *p) { return strncmp(p, cs, 4); } ... the macro magic for strncmp produces a (potentially crashing) call to strlen(cs), because it expands to an expression starting with: __builtin_constant_p(cs) && strlen(cs) < 4 ? /* ... */ Under the secret true meaning of __builtin_constant_p, this is guaranteed to be safe! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146236 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-09Save category name loc in ObjCCategoryImplDecl, patch by Jason Haslam!Argyrios Kyrtzidis
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146213 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-07When folding the size of a global scope VLA to a constant, require the arrayRichard Smith
bound to not have side effects(!). Add constant-folding support for expressions of void type, to ensure that we can still fold ((void)0, 1) as an array bound. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146000 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-06Move vector bitcast handling in constant expressions from the expressionRichard Smith
evaluator into constant initializer handling / IRGen. The practical consequence of this is that the bitcast now lives in the constant's definition, rather than in its uses. The code in the constant expression evaluator was producing vectors of the wrong type and size (and possibly of the wrong value for a big-endian int-to-vector bitcast). We were getting away with this only because we don't yet support constant-folding of any expressions which inspect vector values. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145981 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-05Make isWeakDecl available as a method on ValueDecl.Lang Hames
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145845 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-03Fix mangling substitutions for address-space-qualified classDouglas Gregor
types. Patch from Dmitri Rubinstein! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145776 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-03Implement support for the __is_final type trait, to determine whetherDouglas Gregor
a class is marked 'final', from Alberto Ganesh Barbati! Fixes PR11462. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145775 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-03Keep track of all of the import declarations that are parsed orDouglas Gregor
implicitly generated in a translation unit. Modules will need this information to identify the actual imports that occurred. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145734 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-02When we treat an #include or #import as a module import, create anDouglas Gregor
implicit ImportDecl in the translation unit to record the presence of the import. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145727 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-02Introduce a module import declaration, so that we properly represent, e.g.,Douglas Gregor
__import_module__ std.vector; in the AST. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145725 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-02Fix bitfield handling for record layout with #pragma pack. ↵Eli Friedman
<rdar://problem/10494810> and PR9560. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145673 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-01Add Microsoft mangling of constructors and destructors. Patch by Dmitry!Michael J. Spencer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145581 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-01ParmVarDecls have no linkage. Previously we would report that parametersArgyrios Kyrtzidis
in type signatures have external linkage. Fixes rdar://10058317. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145551 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-01Further tweak -Wurneachable-code and templates by allowing the warning to run onTed Kremenek
explicit template specializations (which represent actual functions somebody wrote). Along the way, refactor some other code which similarly cares about whether or not they are looking at a template instantiation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145547 91177308-0d34-0410-b5e6-96231b3b80d8
2011-12-01Fix MSVC class layout for empty classes. Patch by Dmitry Sokolov.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145544 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-30Per an offline conversation with John McCall, have StmtPrinter actually ↵Ted Kremenek
print out the source expression for OpaqueValueExpr. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145524 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-30Add bigger method type encodings to protocol objects. <rdar://problem/10492418>Bob Wilson
The new metadata are method @encode strings with additional data. 1. Each Objective-C object is marked with its class name and protocol names. The same is done for property @encode already. 2. Each block object is marked with its function prototype's @encoding. For example, a method parameter that is a block object that itself returns void and takes an int would look like: @?<v@?i> These new method @encode strings are stored in a single array pointed to by structs protocol_t and objc_protocol_ext. Patch provided by Greg Parker! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145469 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-27In Sema::MaybeBindToTemporary, create a CXXBindTemporaryExpr for anPeter Collingbourne
array of objects with non-trivial destructors. PR11365. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145203 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-27Reference initialization with initializer lists.Sebastian Redl
This supports single-element initializer lists for references according to DR1288, as well as creating temporaries and binding to them for other initializer lists. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145186 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-22Provide better source info for template specializations with non-type arguments.Matt Beaumont-Gay
This fixes a crasher in tools like Include-What-You-Use which examine such arguments. Patch from Dean Sturtevant at Google! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145077 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-21Add driver arguments -ftemplate-depth=N and -fconstexpr-depth=N, with the sameRichard Smith
semantics and defaults as the corresponding g++ arguments. The historical g++ argument -ftemplate-depth-N is kept for compatibility, but modern g++ versions no longer document that option. Add -cc1 argument -fconstexpr-depth N to implement the corresponding functionality. The -ftemplate-depth=N part of this fixes PR9890. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145045 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-19Add support for pretty-printing attributes, from Richard Membarth!Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145002 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-18Change ASTConsumer::HandleTopLevelDecl to return true for the parser to continueArgyrios Kyrtzidis
parsing or false to abort parsing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144943 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-17Added a clause to the ASTImporter allowing it toSean Callanan
import TranslationUnitDecls. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144934 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-17Constant expression evaluation: add support for evaluation of member pointersRichard Smith
and base-to-derived casts, and add proper handling of temporaries. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144926 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-16PR11391: Don't try to evaluate the LHS of a _Complex assignment as an rvalue.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144799 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-16Fix PR11385: A pointer constant expression which has been cast via an integer isRichard Smith
not safely derived. Don't allow lvalue-to-rvalue conversions on the result of dereferencing such a pointer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144783 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-15Use Decl's isImplicit field to indicate whether an ObjCInterfaceDecl is ↵Argyrios Kyrtzidis
'ImplicitInterfaceDecl', no need to store it in another field. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144624 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-14ARC: make assignment to 'self' within class methods illegal. Fixes ↵Ted Kremenek
<rdar://problem/10416568>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144572 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-14Change the checks in the type aka printing. A confusing case where the stringRichard Trieu
of the first type is the same as the aka string of the second type, but both types are different. Update the logic to print an aka for the first type to show that they are different. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144558 91177308-0d34-0410-b5e6-96231b3b80d8