aboutsummaryrefslogtreecommitdiff
path: root/test/CXX
AgeCommit message (Collapse)Author
2012-10-19Fix directive parsing in VerifyDiagnosticConsumer so that it ensures that ↵Andy Gibbs
"expected" is at the start of the word and will no longer accept typos such as "junkexpected-*" as a valid "expected-*" directive. A very few test-cases had to be amended to adhere to the new rule. Patch reviewed by David Blaikie. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166279 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-18DR1442: In a range-based for statement, namespace 'std' is not an associatedRichard Smith
namespace. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166194 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-18Tests for DR1507.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166162 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-17Implement C++ 10.3p16 - overrides involving deleted functions must match.David Blaikie
Only deleted functions may override deleted functions and non-deleted functions may only override non-deleted functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166082 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-16Move test to a more appropriate place.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166078 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-16Fix pretty-printing for variables declared in a condition. Patch by ↵Eli Friedman
Grzegorz Jablonski. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166073 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-16DR1492: In a definition of a destructor, the exception specification must beRichard Smith
explicitly specified iff it was specified in the declaration. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166071 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-16Implement GCC's -Wint-to-pointer-cast.David Blaikie
This implementation doesn't warn on anything that GCC doesn't warn on with the exception of templates specializations (GCC doesn't warn, Clang does). The specific skipped cases (boolean, constant expressions, enums) are open for debate/adjustment if anyone wants to demonstrate that GCC is being overly conservative here. The only really obvious false positive I found was in the Clang regression suite's MPI test - apparently MPI uses specific flag values in pointer constants. (eg: #define FOO (void*)~0) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166039 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-12Fix -ast-print for uses of operator->.Eli Friedman
Patch by Grzegorz Jablonski. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165832 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-10Fix a crash-on-invalid when parsing a reference to an invalid auto declarationDavid Blaikie
auto x((unknown)); int& y = x; would crash because we were not flagging 'x' as an invalid declaration here. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165675 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-04Egriegious hack to support libstdc++4.6's broken <atomic> header, which definesRichard Smith
a non-inline namespace, then reopens it as inline to try to add its symbols to the surrounding namespace. In this one special case, permit the namespace to be reopened as inline, and patch up the name lookup tables to match. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165263 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-03Improve C++11 attribute parsing.Michael Han
- General C++11 attributes were previously parsed and ignored. Now they are parsed and stored in AST. - Add support to parse arguments of attributes that in 'gnu' namespace. - Differentiate unknown attributes and known attributes that can't be applied to statements when emitting diagnostic. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165082 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-28When processing an InitListExpr and skipping the initialization of an invalidRichard Smith
record, skip at least one element from the InitListExpr to avoid an infinite loop if we're initializing an array of unknown bound. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164851 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-26Teach Type::getAs<TemplateSpecializationType> that a TemplateSpecializationTypeRichard Smith
for a type alias template can appear as sugar at any level of desugaring, just like a TypedefType. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164655 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-21PR13890: Warn on abstract final classes.David Blaikie
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164359 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-20Make the wchar_t promotion test consistent across different hosts by ↵David Blaikie
specifying a target triple. This test behavior differs depending (at least) on whether sizeof(wchar_t) == sizeof(int) or not. When they are equal, the first redeclaration will fail because decltype(+L'x') is unsigned int instead of the expected int. This occurs on ARM. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164315 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-20Per C++11 [class.friend]p3, the 'friend' keyword must appear first in aRichard Smith
non-function friend declaration. Patch by Josh Magee! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164273 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-19Fix a small FIXME involving template partial ordering andEli Friedman
member function templates with an rvalue ref qualifier. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164267 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-19Fix function template partial ordering rules for static vs. non-staticEli Friedman
functions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164263 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-18Fix a small bug in the way we handle builtin candidates forEli Friedman
relational operators of enumeration type. From the gcc testsuite. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164171 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-13Fix incorrect comment.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163850 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-13Fix up after r163846. Sorry!Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163849 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-13Revert r163829. The world (or libstdc++, at least) is not ready.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163846 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-13Implement C++11 [conv.prom]p4: an enumeration with a fixed underlying type hasRichard Smith
integral promotions to both its underlying type and to its underlying type's promoted type. This matters now that boolean conversions aren't permitted in converted constant expressions (a la DR1407): an enumerator with a fixed underlying type of bool still can be. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163841 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-13Promote the warning about extra qualification on a declaration from aDouglas Gregor
warning to an error. C++ bans it, and both GCC and EDG diagnose it as an error. Microsoft allows it, so we still warn in Microsoft mode. Fixes <rdar://problem/11135644>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163831 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-13Remove speculative fix for C++ core issue 1407, since it was resolved as NAD.Richard Smith
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163829 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-12PR13811: Add a FunctionParmPackExpr node to handle references to functionRichard Smith
parameter packs where the reference is not being expanded but the pack has been. Previously, Clang would segfault in such cases. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163672 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-07PR9023: A template template parameter whose template parameter list contains anRichard Smith
unexpanded parameter pack is a pack expansion. Thus, as with a non-type template parameter which is a pack expansion, it needs to be expanded early into a fixed list of template parameters. Since the expanded list of template parameters is not itself a parameter pack, it is permitted to appear before the end of the template parameter list, so also remove that restriction (for both template template parameter pack expansions and non-type template parameter pack expansions). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163369 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06Clarified diagnostics for range-based for loops with invalid rangesSam Panzer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163350 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-24When computing the effective context for access control,John McCall
make sure we walk up the DC chain for the current context, rather than allowing ourselves to get switched over to the canonical DC chain. Fixes PR13642. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162616 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-24Instantiate class template specializations during ADL.John McCall
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162586 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-23When disambiguating an expression-statement from a declaraton-statement, if theRichard Smith
statement starts with an identifier for which name lookup will fail either way, look at later tokens to disambiguate in order to improve error recovery. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162464 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-21Better diagnostics for range-based for loops with bad range types.Sam Panzer
The old error message stating that 'begin' was an undeclared identifier is replaced with a new message explaining that the error is in the range expression, along with which of the begin() and end() functions was problematic if relevant. Additionally, if the range was a pointer type or defines operator*, attempt to dereference the range, and offer a FixIt if the modified range works. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162248 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-10Check access to friend declarations. There's a number of differentJohn McCall
things going on here that were problematic: - We were missing the actual access check, or rather, it was suppressed on account of being a redeclaration lookup. - The access check would naturally happen during delay, which isn't appropriate in this case. - We weren't actually emitting dependent diagnostics associated with class templates, which was unfortunate. - Access was being propagated incorrectly for friend method declarations that couldn't be matched at parse-time. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161652 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-06PR13499: Don't try to check whether 'override' has been validly applied untilRichard Smith
we know whether the function is virtual. But check it as soon as we do know; in some cases we don't need to wait for an instantiation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161316 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-31Explicitly defaulted constructors cannot be used for default initialization.Aaron Ballman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161088 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-30Update source location in test.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160964 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-27Final piece of core issue 1330: delay computing the exception specification ofRichard Smith
a defaulted special member function until the exception specification is needed (using the same criteria used for the delayed instantiation of exception specifications for function temploids). EST_Delayed is now EST_Unevaluated (using 1330's terminology), and, like EST_Uninstantiated, carries a pointer to the FunctionDecl which will be used to resolve the exception specification. This is enabled for all C++ modes: it's a little faster in the case where the exception specification isn't used, allows our C++11-in-C++98 extensions to work, and is still correct for C++98, since in that mode the computation of the exception specification can't fail. The diagnostics here aren't great (in particular, we should include implicit evaluation of exception specifications for defaulted special members in the template instantiation backtraces), but they're not much worse than before. Our approach to the problem of cycles between in-class initializers and the exception specification for a defaulted default constructor is modified a little by this change -- we now reject any odr-use of a defaulted default constructor if that constructor uses an in-class initializer and the use is in an in-class initialzer which is declared lexically earlier. This is a closer approximation to the current draft solution in core issue 1351, but isn't an exact match (but the current draft wording isn't reasonable, so that's to be expected). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160847 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-25PR12057: Allow variadic template pack expansions to cross lambda boundaries.Richard Smith
Rather than adding a ContainsUnexpandedParameterPack bit to essentially every AST node, we tunnel the bit directly up to the surrounding lambda expression when we reach a context where an unexpanded pack can not normally appear. Thus any statement or declaration within a lambda can now potentially contain an unexpanded parameter pack. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160705 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-18PR13381, part 2: when determining if a defaulted special member function shouldRichard Smith
be defined as deleted, take cv-qualifiers on class members into account when looking up the copy or move constructor or assignment operator which will be used for them. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160418 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-18PR13381: consider cv-qualifiers on a class member's type when determining whichRichard Smith
constructor will be used for moving that object, in the computation of its exception specification. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160417 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-18PR13386: When matching up parameters between a function template declarationRichard Smith
and a function template instantiation, if there's a parameter pack in the declaration and one at the same place in the instantiation, don't assume that the pack wasn't expanded -- it may have expanded to nothing. Instead, go ahead and check whether the parameter pack was expandable. We can do this as a side-effect of the work we'd need to do anyway, to find how many parameters were produced. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160416 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-17Don't treat overflow in floating-point conversions as a hard error in ↵Eli Friedman
constant evaluation. <rdar://problem/11874571>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160394 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-08PR13293: Defer deduction of an auto type with a dependent declarator, such ↵Richard Smith
as "auto (*f)(T t)". git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159908 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-07PR12670: Support for initializing an array of non-aggregate class type from anRichard Smith
initializer list. Patch by Olivier Goffart, with extra testcases by Meador Inge and Daniel Lunow. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159896 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-29From Philippe Canal:Axel Naumann
Update the two function overloads void TemplateSpecializationType::PrintTemplateArgumentList(raw_ostream &OS,.... to behave like std::string TemplateSpecializationType::PrintTemplateArgumentList(const TemplateArgument *Args,... hence making sure that clang consistently adds a space between two '>' at the end of nested template arguments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159412 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-26block literal irgen: several improvements on naming blockFariborz Jahanian
literal helper functions. All helper functions (global and locals) use block_invoke as their prefix. Local literal helper names are prefixed by their enclosing mangled function names. Blocks in non-local initializers (e.g. a global variable or a C++11 field) are prefixed by their mangled variable name. The descriminator number added to end of the name starts off with blank (for first block) and _<N> (for the N+2-th block). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159206 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-25PR12937: Explicitly deleting an explicit template specialization.David Blaikie
This works around a quirk in the way that explicit template specializations are handled in Clang. We generate an implicit declaration from the original template which the explicit specialization is considered to redeclare. This trips up the explicit delete logic. This change only works around that strange representation. At some point it'd be nice to remove those extra declarations to make the AST more accurately reflect the C++ semantics. Review by Doug Gregor. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159167 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-19Fix -Wc++11-narrowing warnings for narrowing negative values to larger unsignedRichard Smith
types to actually includes the value, rather than saying <uninitialized>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158745 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-19Improve the error message when a function overload candidate is rejectedKaelyn Uhrain
because it expects a reference and receives a non-l-value. For example, given: int foo(int &); template<int x> void b() { foo(x); } clang will now print "expects an l-value for 1st argument" instead of "no known conversion from 'int' to 'int &' for 1st argument". The change in wording (and associated code to detect the case) was prompted by comment #5 in PR3104, and should be the last bit of work needed for the bug. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158691 91177308-0d34-0410-b5e6-96231b3b80d8