summaryrefslogtreecommitdiffstats
path: root/clang/lib
Commit message (Collapse)AuthorAgeFilesLines
...
* Convert the expression trait evaluation to a static function andChandler Carruth2011-05-011-20/+19
| | | | | | | | | a switch with any default case. This both warns when an enumerator is missing and asserts if a value sneaks through despite the warning. While in there fix a bunch of coding style issues with this code. llvm-svn: 130648
* Remove the default case from the unary type trait evaluation function,Chandler Carruth2011-05-011-2/+1
| | | | | | | adding an unreachable annotation. Remarkably this one was already enumarting every trait. llvm-svn: 130647
* Remove a few more bogus returns when the switch covers all theChandler Carruth2011-05-011-4/+3
| | | | | | | | | enumerators. Also remove a default that led to llvm_unreachable to make another switch warn if any enumerators fail to be covered. llvm-svn: 130646
* Remove another default and a *completely* bogus return from a switchChandler Carruth2011-05-011-2/+2
| | | | | | | | over type traits. Add the missing trait from this switch that Clang's warning uncovered. llvm-svn: 130645
* Mark that this function ends in a covering switch statement with everyChandler Carruth2011-05-011-0/+2
| | | | | | | | case returning a value. Silences a GCC warning. llvm-svn: 130644
* Remove the type traits UTT_IsLvalueExpr and UTT_IsRvalueExpr.Chandler Carruth2011-05-013-9/+0
| | | | | | | | | | | As might be surmised from their names, these aren't type traits, they're expression traits. Amazingly enough, they're expression traits that we have, and fully implement. These "type" traits are even parsed from the same tokens as the expression traits. Luckily, the parser only tried the expression trait parsing for these tokens, so this was all just a pile of dead code. llvm-svn: 130643
* Fully implement delegating constructors!Alexis Hunt2011-05-016-11/+78
| | | | | | | | | | As far as I know, this implementation is complete but might be missing a few optimizations. Exceptions and virtual bases are handled correctly. Because I'm an optimist, the web page has appropriately been updated. If I'm wrong, feel free to downgrade its support categories. llvm-svn: 130642
* More cleanup of the type traits implementation.Chandler Carruth2011-05-011-81/+110
| | | | | | | | | | | | | | | | | | | | 1) Moved the completeness checking routine above the evaluation routine so the reader sees that we do in fact check for complete types when necessary. 2) Remove the FIXME comment about not doing this. 3) Make the arguments to the evaluate function agree in order with those to the completeness checking function. 4) Completely specify the enumerators for the completeness checking function rather than relying on a default. 5) Remove a check for the Borland language to only require complete types in a few places. Borland's own documentation doesn't agree with this: some of the previously unspecified traits *do* require a complete type, some don't. 6) Correctly split the traits which do not require complete types from those that do, clarifying comments and citations to the standard or other documentation where relevant. llvm-svn: 130641
* Order the type traits according to the standard's listing of unary typeChandler Carruth2011-05-011-54/+79
| | | | | | | | | traits where possible. For the rest, group them and add some documentation regarding their origins. No functionality change intended. llvm-svn: 130639
* Begin cleaning up type trait expression implementations and settling onChandler Carruth2011-05-011-21/+21
| | | | | | a single pattern for implementing each. llvm-svn: 130638
* Improve the documentation for the two ObjCDeclQualifiers so that IJohn McCall2011-05-011-15/+1
| | | | | | stop considering whether I can compress them. :) llvm-svn: 130633
* Compress some bits. Only matters for MSVC, or if we everJohn McCall2011-05-012-11/+11
| | | | | | | devirtualize Decl (because bits can't get laid out in base classes if the base is POD). llvm-svn: 130632
* Switch the interface name for both TemplateTypeParmType andChandler Carruth2011-05-013-4/+4
| | | | | | | | | | | SubstTemplateTypeParmType to be 'getIdentifier' instead of 'getName' as it returns an identifier. This makes them more consistent with the NamedDecl interface. Also, switch back to using this interface to acquire the indentifier in TypePrinter.cpp. I missed this in r130628. llvm-svn: 130629
* Re-applies the patch first applied way back in r106099, withChandler Carruth2011-05-0113-34/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | | | accompanying fixes to make it work today. The core of this patch is to provide a link from a TemplateTypeParmType back to the TemplateTypeParmDecl node which declared it. This in turn provides much more precise information about the type, where it came from, and how it functions for AST consumers. To make the patch work almost a year after its first attempt, it needed serialization support, and it now retains the old getName() interface. Finally, it requires us to not attempt to instantiate the type in an unsupported friend decl -- specifically those coming from template friend decls but which refer to a specific type through a dependent name. A cleaner representation of the last item would be to build FriendTemplateDecl nodes for these, storing their template parameters etc, and to perform proper instantation of them like any other template declaration. They can still be flagged as unsupported for the purpose of access checking, etc. This passed an asserts-enabled bootstrap for me, and the reduced test case mentioned in the original review thread no longer causes issues, likely fixed at somewhere amidst the 24k revisions that have elapsed. llvm-svn: 130628
* Remove unused function.Benjamin Kramer2011-04-301-14/+0
| | | | llvm-svn: 130622
* Remove noisy semicolons.Benjamin Kramer2011-04-302-2/+2
| | | | llvm-svn: 130621
* PR9792: Make sure to use the right definition of wchar_t when the defaultEli Friedman2011-04-301-1/+1
| | | | | | wchar_t is an unsigned type. llvm-svn: 130620
* Some small improvements to the builtin (-ffreestanding) stdint.h; inEli Friedman2011-04-301-12/+14
| | | | | | particular, make sure to handle WCHAR_MIN correctly. llvm-svn: 130618
* Implement -fno-dwarf2-cfi-asm.Rafael Espindola2011-04-303-0/+11
| | | | llvm-svn: 130616
* When comparing parameters of reference-to-qualified type duringDouglas Gregor2011-04-302-2/+17
| | | | | | | | | partial ordering of function templates, use a simple superset relationship rather than the convertibility-implying isMoreQualifiedThan/compatibilyIncludes relationship. Fixes partial ordering between references and address-space-qualified references. llvm-svn: 130612
* Replace a literal 8 with Context->getCharWidth() inKen Dyck2011-04-301-1/+1
| | | | | | SynthesizeByrefCopyDestroyHelper(). No change in functionality intended. llvm-svn: 130608
* Make type-traits reflect that Clang's vectors act like scalar types.Chandler Carruth2011-04-301-4/+8
| | | | llvm-svn: 130606
* Switch the type-trait like APIs on the AST to only check for incompleteChandler Carruth2011-04-301-5/+28
| | | | | | | | | | | types after looking through arrays. Arrays with an unknown bound seem to be specifically allowed in the library type traits in C++0x, and GCC's builtin __is_trivial returns 'true' for the type 'int[]'. Now Clang agrees with GCC about __is_trivial here. Also hardens these methods against dependent types by just returning false. llvm-svn: 130605
* Extract a function to impose the completeness requirement on unary typeChandler Carruth2011-04-301-23/+76
| | | | | | | | | | | | | | | | | | | | | | trait arguments. Reflow the logic to use early exit instead of a complex condition expression. Switch to a switch for acting on different type traits and add a bunch of the recently implemented type traits here. This fixes one of the regressions with the new __is_standard_layout trait to again require a complete type. It also fixes some latent bugs in other traits that never did impose this despite the standard requiring it. However, all these bugs were hidden for non-borland systems where the default is to require a complete type. It's unclear to me what the best approach here is: providing an explicit lists for the ones requiring complete types only w/ Borland and using a default for the rest, or forcing this switch to enumerate the traits and make it clear which way each one goes. I'm still working on cleaning up the tests so that they actually catch this, a much more comprehensive update to the tests will come once I've worked through the bugs I'm finding via inspection. llvm-svn: 130604
* Rename the last '[hH]asStandardLayout' entites to '[iI]sStandardLayout'Chandler Carruth2011-04-304-18/+18
| | | | | | | based on Doug's preferences when we discussed this in IRC. This brings the wording more in line with the standard. llvm-svn: 130603
* Hoist all of the type-specific trait logic for __is_standard_layout intoChandler Carruth2011-04-302-30/+31
| | | | | | | | | | | | a Type method isStandardLayoutType, to keep our user API matching the type trait builtins as closely as possible. Also, implement it in terms of other Type APIs rather than in terms of other type traits. This models the implementation on that of isLiteralType and isTrivialType. There remain some common problems with these traits still, so this is a bit of a WIP. However, we can now fix all of these traits at the same time and in a consistent manner. llvm-svn: 130602
* Completely re-implement the core logic behind the __is_standard_layoutChandler Carruth2011-04-305-91/+112
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | type trait. The previous implementation suffered from several problems: 1) It implemented all of the logic in RecordType by walking over every base and field in a CXXRecordDecl and validating the constraints of the standard. This made for very straightforward code, but is extremely inefficient. It also is conceptually wrong, the logic tied to the C++ definition of standard-layout classes should be in CXXRecordDecl, not RecordType. 2) To address the performance problems with #1, a cache bit was added to CXXRecordDecl, and at the completion of every C++ class, the RecordType was queried to determine if it was a standard layout class, and that state was cached. Two things went very very wrong with this. First, the caching version of the query *was never called*. Even within the recursive steps of the walk over all fields and bases the caching variant was not called, making each query a full *recursive* walk. Second, despite the cache not being used, it was computed for every class declared, even when the trait was never used in the program. This probably significantly regressed compile time performance for edge-case files. 3) An ASTContext was required merely to query the type trait because querying it performed the actual computations. 4) The caching bit wasn't managed correctly (uninitialized). The new implementation follows the system for all the other traits on C++ classes by encoding all the state needed in the definition data and building up the trait incrementally as each base and member are added to the definition of the class. The idiosyncracies of the specification of standard-layout classes requires more state than I would like; currently 5 bits. I could eliminate one of the bits easily at the expense of both clarity and resilience of the code. I might be able to eliminate one of the other bits by computing its state in terms of other state bits in the definition. I've already done that in one place where there was a fairly simple way to achieve it. It's possible some of the bits could be moved out of the definition data and into some other structure which isn't serialized if the serialized bloat is a problem. That would preclude serialization of a partial class declaration, but that's likely already precluded. Comments on any of these issues welcome. llvm-svn: 130601
* Initialize HasStandardLayout.Benjamin Kramer2011-04-301-1/+1
| | | | llvm-svn: 130600
* Move the SelfInit checker to the 'cocoa.experimental' package.Ted Kremenek2011-04-301-4/+4
| | | | llvm-svn: 130598
* Driver/Darwin: Don't link -lgcc_s.1 when compiling as iOS for the simulator,Daniel Dunbar2011-04-301-1/+4
| | | | | | | that library has never been in the SDK. Fortunately, it shouldn't be necessary, since that library was also removed in 10.6. llvm-svn: 130595
* Driver/Darwin: When using -mios-simulator-version-min, explicitly pass this onDaniel Dunbar2011-04-301-2/+14
| | | | | | | | to the linker. - Only do this explicitly with the argument for now, the linker will need to explicitly add support for this. llvm-svn: 130594
* Driver/Darwin: Reject invalid arch combinations withDaniel Dunbar2011-04-301-0/+7
| | | | | | -mios-simulator-version-min. llvm-svn: 130593
* Driver/Darwin: Change Darwin toolchain to explicitly track is-ios-sim bit, andDaniel Dunbar2011-04-302-12/+24
| | | | | | update -mios-simulator-version-min to set it. llvm-svn: 130592
* Driver/Darwin: Sketch initial support for a -mios-simulator-version-min= flagDaniel Dunbar2011-04-302-26/+51
| | | | | | and associated deployment target environment variable. llvm-svn: 130591
* Add lib/Tooling to the Makefile build.Nico Weber2011-04-302-1/+17
| | | | llvm-svn: 130581
* Removed redundant case statementsChad Rosier2011-04-301-2/+0
| | | | llvm-svn: 130564
* Tie constructor defintion with its declaration using AT_specification.Devang Patel2011-04-291-4/+9
| | | | llvm-svn: 130561
* Add -Oz option and use it to set the inline threshold to 25.Bob Wilson2011-04-293-8/+7
| | | | | | Radar 9333566. Patch by Chad Rosier! llvm-svn: 130554
* removes a meaningless comment.Fariborz Jahanian2011-04-291-3/+1
| | | | llvm-svn: 130550
* block variables on lhs need be ir-gen'ed after theFariborz Jahanian2011-04-291-1/+18
| | | | | | | | rhs when its 'forwarding' pointer may be modified in rhs evaluation as result of call to Block_copy. // rdar://9309454 llvm-svn: 130545
* Serialize/deserialize the HasStandardLayout bit when writing/reading PCHs.Anders Carlsson2011-04-292-0/+2
| | | | llvm-svn: 130525
* Driver/cc1as: Forward -mllvm arguments when compiling assembly files.Daniel Dunbar2011-04-291-0/+1
| | | | llvm-svn: 130516
* Remove comments about __int8 and friends from the mangler. Turns out we don'tCharles Davis2011-04-291-7/+0
| | | | | | | actually have to implement them, since in modern versions of MSVC they're aliases to the standard C types. llvm-svn: 130509
* White-list yet more type trait names, since they're used asDouglas Gregor2011-04-291-10/+20
| | | | | | identifiers in libc++. llvm-svn: 130508
* Don't crash if the AST doesn't have a sensible ObjC id type.David Chisnall2011-04-291-4/+6
| | | | llvm-svn: 130500
* Relax the non-POD memset warning to use the less restrictive C++11Chandler Carruth2011-04-292-12/+71
| | | | | | | | | | | definition of POD. Specifically, this allows certain non-aggregate types due to their data members being private. The representation of C++11 POD testing is pretty gross. Any suggestions for improvements there are welcome. Especially the name 'isCXX11PODType()' seems truly unfortunate. llvm-svn: 130492
* r130381 follow up: accept __uuidof expression for template argument reference.Francois Pichet2011-04-291-2/+6
| | | | llvm-svn: 130491
* Add a decl update when a static data member of a class template is ↵Sebastian Redl2011-04-295-4/+34
| | | | | | instantiated in a different PCH than its containing class. Otherwise we get double definition errors. Fixes a Boost.MPL problem that affects Boost.Accumulators and probably a lot more of Boost. llvm-svn: 130488
* Don't assume that the AST methods will only be invoked on C++ types.Chandler Carruth2011-04-291-23/+26
| | | | | | | | | | Teaches isLiteralType and isTrivialType to behave plausibly and most importantly not crash on normal RecordDecls. Sadly I have no real way to test this. I stumbled onto it by mis-implementing a warning. llvm-svn: 130483
* libstdc++ 4.2 also uses __is_same as a struct name, which conflicts with our ↵Douglas Gregor2011-04-291-1/+2
| | | | | | new type trait __is_same llvm-svn: 130468
OpenPOWER on IntegriCloud