41cb3d90c2114a7df7aa04f80c8be4b62994fb0d |
|
15-Jun-2013 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Fix handling of const_cast from prvalue to rvalue reference: such a cast is only permitted if the source object is of class type, and should materialize a temporary for the reference to bind to. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184017 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
8a66bf78becf05a24e8251379f3843d1fceb627f |
|
03-Jun-2013 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Refactor constant expression evaluation to associate the complete object of a materialized temporary with the corresponding MaterializeTemporaryExpr. This is groundwork for providing C++11's guaranteed static initialization for global references bound to lifetime-extended temporaries (if the initialization is a constant expression). In passing, fix a couple of bugs where some evaluation failures didn't trigger diagnostics, and a rejects-valid where potential constant expression testing would assume that it knew the dynamic type of *this and would reject programs which relied on it being some derived type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183093 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
840462670ba7a6bc26265a2306b35f2f0f01f51c |
|
21-Apr-2013 |
Richard Smith <richard-llvm@metafoo.co.uk> |
The 'constexpr implies const' rule for non-static member functions is gone in C++1y, so stop adding the 'const' there. Provide a compatibility warning for code relying on this in C++11, with a fix-it hint. Update our lazily-written tests to add the const, except for those ones which were testing our implementation of this rule. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179969 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
f727e1c6cc382c1b5fe23b38ba04df2d4a2f358a |
|
29-Jan-2013 |
Douglas Gregor <dgregor@apple.com> |
Don't crash while printing APValues that are lvalues casted to a decidedly non-reference, non-pointer type. Fixes <rdar://problem/13090123>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173747 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
26dc97cbeba8ced19972a259720a71aefa01ef43 |
|
17-Jul-2012 |
Eli Friedman <eli.friedman@gmail.com> |
Don't treat overflow in floating-point conversions as a hard error in constant evaluation. <rdar://problem/11874571>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160394 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
16581335fc32abcbc6ab14eda7af38cf759664b7 |
|
02-Mar-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Ensure that we instantiate static reference data members of class templates early, since their values can be used in constant expressions in C++11. For odr-use checking, the opposite change is required, since references are odr-used whether or not they satisfy the requirements for appearing in a constant expression. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151881 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
83587db1bda97f45d2b5a4189e584e2a18be511a |
|
15-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Implement DR1454. This allows all intermediate results in constant expressions to be core constant expressions (including pointers and references to temporaries), and makes constexpr calculations Turing-complete. A Turing machine simulator is included as a testcase. This opens up the possibilty of removing CCValue entirely, and removing some copies from the constant evaluator in the process, but that cleanup is not part of this change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150557 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
86c3ae46250cdcc57778c27826060779a92f3815 |
|
13-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Update constexpr implementation to match CWG's chosen approach for core issues 1358, 1360, 1452 and 1453. - Instantiations of constexpr functions are always constexpr. This removes the need for separate declaration/definition checking, which is now gone. - This makes it possible for a constexpr function to be virtual, if they are only dependently virtual. Virtual calls to such functions are not constant expressions. - Likewise, it's now possible for a literal type to have virtual base classes. A constexpr constructor for such a type cannot actually produce a constant expression, though, so add a special-case diagnostic for a constructor call to such a type rather than trying to evaluate it. - Classes with trivial default constructors (for which value initialization can produce a fully-initialized value) are considered literal types. - Classes with volatile members are not literal types. - constexpr constructors can be members of non-literal types. We do not yet use static initialization for global objects constructed in this way. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150359 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
864b1cf13b288c5099911e1265431ffdcac060a4 |
|
10-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Update to new resolution for DR1458. When taking the address of an object of incomplete class type which has an overloaded operator&, it's now just unspecified whether the overloaded operator or the builtin is used. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150234 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
2fd5983e0da447291a651a347c206aee37a1de5f |
|
08-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Implement DR1458: Taking the address of an object of incomplete class type is not a constant expression, because we can't tell whether the complete class type will have an overloaded operator&. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150066 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
925d8e7c0f18e03dc4bc634b3c6c1ec09373d993 |
|
08-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Implement the agreed resolution to DR1457: a signed left shift of a 1 bit into the sign bit doesn't have undefined behavior, but a signed left shift of a 1 bit out of the sign bit still does. As promised to Howard :) The suppression of the potential constant expression checking in system headers is also removed, since the problem it was working around is gone. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150059 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
9ec7197796a2730d54ae7f632553b5311b2ba3b5 |
|
05-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: Fix implementation of DR1311: check for volatile qualifiers in lvalue-to-rvalue conversions on the source type of the conversion, not the target type (which has them removed for non-class types). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149796 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
282e7e66748cc6dd14d6f7f2cb52e5373c531e61 |
|
04-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
In C++11 mode, when an integral constant expression is desired and we have a value of class type, look for a unique conversion operator converting to integral or unscoped enumeration type and use that. Implements [expr.const]p5. Sema::VerifyIntegerConstantExpression now performs the conversion and returns the converted result. Some important callers of Expr::isIntegralConstantExpr have been switched over to using it (including all of those required for C++11 conformance); this switch brings a side-benefit of improved diagnostics and, in several cases, simpler code. However, some language extensions and attributes have not been moved across and will not perform implicit conversions on constant expressions of literal class type where an ICE is required. In passing, fix static_assert to perform a contextual conversion to bool on its argument. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149776 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
f15fda02e9c8c82b4a716618f4010b9af8bff796 |
|
02-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: * support the gcc __builtin_constant_p() ? ... : ... folding hack in C++11 * check for unspecified values in pointer comparisons and pointer subtractions git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149578 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
15efc4d597a47e6ba5794d4fd8d561bf6947233c |
|
01-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: check for overflow in pointer subtraction. This is a mess. According to the C++11 standard, pointer subtraction only has undefined behavior if the difference of the array indices does not fit into a ptrdiff_t. However, common implementations effectively perform a char* subtraction first, and then divide the result by the element size, which can cause overflows in some cases. Those cases are not considered to be undefined behavior by this change; perhaps they should be. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149490 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
7b48a2986345480241f3b8209f71bb21b0530b4f |
|
01-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: overflow checking for integral and floating-point arithmetic. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149473 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
b04035a7b1a3c9b93cea72ae56dd2ea6e787bae9 |
|
01-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: require 'this' to point to an object in a constexpr method call. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149467 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
3df61308ddfbdba0897b762a129b5a38750c87d0 |
|
01-Feb-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: Treat INT_MIN % -1 as undefined behavior in C++11. Technically, it isn't, but this is just a (reported) defect in the wording. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149448 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
82f28583b8e81ae9b61635a0652f6a45623df16d |
|
31-Jan-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: the result of a relational operator between pointers to void is unspecified unless the pointers are equal; therefore, such a comparison is not a constant expression unless the pointers are equal. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149366 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
789f9b6be5df6e5151ac35e68416cdf550db1196 |
|
31-Jan-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: catch a collection of integral undefined behaviors: -INT_MIN and INT_MIN / -1 Shift by a negative or too large quantity Left shift of negative value Overflow in left shift git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149344 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
395f1c08ff720be7df6535a86df14b6d36a2d57a |
|
31-Jan-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: remove integral conversion overflow checking introduced in r149286. As Eli points out, this is implementation-defined, and the way we define it makes this fine. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149327 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
f72fccf533bca206af8e75d041c29db99e6a7f2c |
|
30-Jan-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: disallow signed integer overflow in integral conversions in constant expressions in C++11. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@149286 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
8ef7b203332b0c8d65876a1f5e6d1db4e6f40e4b |
|
19-Jan-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: converted constant expression handling for enumerator values, case values and non-type template arguments of integral and enumeration types. This change causes some legal C++98 code to no longer compile in C++11 mode, by enforcing the C++11 rule that narrowing integral conversions are not permitted in the final implicit conversion sequence for the above cases. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148439 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
244ee7b89a483fd3764637abdf95de2893b437d0 |
|
15-Jan-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Pedantic diagnostic correction: in C++, we have integral constant expressions, not integer constant expressions. In passing, fix the 'folding is an extension' diagnostic to not claim we're accepting the code, since that's not true in -pedantic-errors mode, and add this diagnostic to -Wgnu. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148209 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
61e616206413d1779c7545c7a8ad1ce1129ad9c1 |
|
12-Jan-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Allow constant-folding of references which were formed in a manner not permitted in a constant expression, for compatibility with g++. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148020 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
b4e85ed51905fc94378d7b4ff62b06e0d08042b7 |
|
06-Jan-2012 |
Richard Smith <richard-llvm@metafoo.co.uk> |
C++11 generalized constant expressions: implement checking and diagnostics for pointer-arithmetic-related undefined behavior and unspecified results. We continue to fold such values, but now notice they aren't constant expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147659 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
51201882382fb40c9456a06c7f93d6ddd4a57712 |
|
30-Dec-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Unrevert r147271, reverted in r147361. Also temporarily remove the assumption from IR gen that we can emit IR for every constant we can fold, since it isn't currently true in C++11, to fix PR11676. Original comment from r147271: constexpr: perform zero-initialization prior to / instead of performing a constructor call when appropriate. Thanks to Eli for spotting this. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147384 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
f8c2a33b6e47c494b83e68f02f4ee67ca8fd8e3b |
|
30-Dec-2011 |
Rafael Espindola <rafael.espindola@gmail.com> |
Revert r147271. This fixes PR11676. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147362 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
47d2145675099893d702be4bc06bd9f26d8ddd13 |
|
27-Dec-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: support for evaluation and codegen of typeid constants. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147290 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
eba05b2e396e1474f7bd6e8e8e1bd7752effef4d |
|
25-Dec-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: perform zero-initialization prior to / instead of performing a constructor call when appropriate. Thanks to Eli for spotting this. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147271 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
7098cbd601ad915aed22d4b5850da99359f25bf3 |
|
21-Dec-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr: diagnostic improvements for invalid lvalue-to-rvalue conversions in constant expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147035 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
099e7f647ccda915513f2b2ec53352dc756082d3 |
|
19-Dec-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
constexpr handling improvements. Produce detailed diagnostics when a 'constexpr' variable is initialized by a non-constant expression, and pass in the variable being declared so that earlier-initialized fields' values can be used. Rearrange VarDecl init evaluation to make this possible, and in so doing fix a long-standing issue in our C++ constant expression handling, where we would mishandle cases like: extern const int a; const int n = a; const int a = 5; int arr[n]; Here, n is not initialized by a constant expression, so can't be used in an ICE, even though the initialization expression would be an ICE if it appeared later in the TU. This requires computing whether the initializer is an ICE eagerly, and saving that information in PCH files. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146856 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
1e7fc3d31e17fbe314f86de96aac6e9a2f297167 |
|
16-Dec-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Reduce recursion limit on this test further to try to make the msys bot green. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146759 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
08d6e032a2a0a8656d12b3b7b93942987bb12eb7 |
|
16-Dec-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
C++11 constexpr: Add note stacks containing backtraces if constant evaluation fails within a call to a constexpr function. Add -fconstexpr-backtrace-limit argument to driver and frontend, to control the maximum number of notes so produced (default 10). Fix APValue printing to be able to pretty-print all APValue types, and move the testing for this functionality from a unittest to a -verify test now that it's visible in clang's output. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146749 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
0a36512b175103d60020aaa857363dca33f36558 |
|
14-Dec-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Halve the constexpr recursion depth in this test in an attempt to make the freebsd bots happy. In the longer term, we should have a mechanism for moving constexpr recursion off the call stack, to support the default limit of 512 suggested by the standard. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146596 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
c1c5f27c64dfc3332d53ad30e44d626e4f9afac3 |
|
13-Dec-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Add checks and diagnostics for many of the cases which C++11 considers to not be constant expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146479 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
762bb9d0ad20320b9f97a841dce57ba5e8e48b07 |
|
14-Oct-2011 |
Richard Smith <richard-llvm@metafoo.co.uk> |
Update all tests other than Driver/std.cpp to use -std=c++11 rather than -std=c++0x. Patch by Ahmed Charles! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141900 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|
63fe6814f339df30b8463b39995947cbdf920e48 |
|
24-May-2011 |
Douglas Gregor <dgregor@apple.com> |
Implement the initial part of C++0x [expr.const]p2, which specifies that the unevaluated subexpressions of &&, ||, and ? : are not considered when determining whether the expression is a constant expression. Also, turn the "used in its own initializer" warning into a runtime-behavior warning, so that it doesn't fire when a variable is used as part of an unevaluated subexpression of its own initializer. Fixes PR9999. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131968 91177308-0d34-0410-b5e6-96231b3b80d8
/external/clang/test/CXX/expr/expr.const/p2-0x.cpp
|