summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* In blocks, only pretend that enum constants have enum type if necessary.Jordan Rose2012-07-021-1/+6
| | | | | | | | | | | | | | | | | | In C, enum constants have the type of the enum's underlying integer type, rather than the type of the enum. (This is not true in C++.) Thus, when a block's return type is inferred from an enum constant, it is incompatible with expressions that return the enum type. In r158899, I told block returns to pretend that enum constants have enum type, like in C++. Doug Gregor pointed out that this can break existing code. Now, we don't check the types of return statements until the end of the block. This lets us go back and add implicit casts in blocks with mixed enum constants and enum-typed expressions. <rdar://problem/11662489> (again) llvm-svn: 159591
* In Sema::ClassifyName, try to avoid nonsensical corrections toKaelyn Uhrain2012-06-291-0/+13
| | | | | | keywords when doing type correction. llvm-svn: 159464
* Add a fix-it hint note to -Wunique-enum to suggest that the last element getsRichard Trieu2012-06-291-0/+7
| | | | | | initialized with the next to last element to silence the warning. llvm-svn: 159458
* Make explicit specializations at class scope workNico Weber2012-06-251-4/+7
| | | | | | | for non-type template parameters in microsoft mode. PR12709. llvm-svn: 159147
* Perform typo correction for base class specifiers.Kaelyn Uhrain2012-06-221-5/+7
| | | | llvm-svn: 159046
* Documentation cleanup: making \param docs match the code.James Dennett2012-06-221-1/+1
| | | | llvm-svn: 158982
* Documentation cleanup:James Dennett2012-06-221-2/+2
| | | | | | | | | | | | | | | * Primarily fixed \param commands with names not matching any actual parameters of the documented functions. In many cases this consists just of fixing up the parameter name in the \param to match the code, in some it means deleting obsolete documentation and occasionally it means documenting the parameter that has replaced the older one that was documented, which sometimes means some simple reverse-engineering of the docs from the implementation; * Fixed \param ParamName [out] to the correct format with [out] before the parameter name; * Fixed some \brief summaries. llvm-svn: 158980
* Restructure how the driver communicates information about theJohn McCall2012-06-201-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | target Objective-C runtime down to the frontend: break this down into a single target runtime kind and version, and compute all the relevant information from that. This makes it relatively painless to add support for new runtimes to the compiler. Make the new -cc1 flag, -fobjc-runtime=blah-x.y.z, available at the driver level as a better and more general alternative to -fgnu-runtime and -fnext-runtime. This new concept of an Objective-C runtime also encompasses what we were previously separating out as the "Objective-C ABI", so fragile vs. non-fragile runtimes are now really modelled as different kinds of runtime, paving the way for better overall differentiation. As a sort of special case, continue to accept the -cc1 flag -fobjc-runtime-has-weak, as a sop to PLCompatibilityWeak. I won't go so far as to say "no functionality change", even ignoring the new driver flag, but subtle changes in driver semantics are almost certainly not intended. llvm-svn: 158793
* Extend the support for cl-std to include 1.2.Tanya Lattner2012-06-191-0/+17
| | | | | | | Add error checking for the static qualifier which is now allowed in certain situations for OpenCL 1.2. Use the CL version to turn on this feature. Added test case for 1.2 static storage class feature. llvm-svn: 158759
* Don't warn about address-to-member used as part of initialisation, ifJoerg Sonnenberger2012-06-171-1/+1
| | | | | | the member expression is in parentheses. llvm-svn: 158651
* Explicitly build __builtin_va_list.Meador Inge2012-06-161-2/+0
| | | | | | | The target specific __builtin_va_list types are now explicitly built instead of injecting strings into the preprocessor input. llvm-svn: 158592
* [AST/libclang] Fix the selector locations that are reported for aArgyrios Kyrtzidis2012-06-161-2/+0
| | | | | | | | | | | | | | | | | | | | | | method definition that has its '{' attached to the method name without a space. With a method like: -(id)meth{ ..... } the logic in ObjCMethodDecl that determined the selector locations got confused because it was initialized based on an end location for '{' but that end location changed to '}' after the method was finished. Fix this by having an immutable end location for the declarator and for getLocEnd() get the end location from the body itself. Fixes rdar://11659739. llvm-svn: 158583
* Recover when correcting an unknown type name to a keyword like "struct".Kaelyn Uhrain2012-06-151-12/+16
| | | | llvm-svn: 158573
* Move isCXXSimpleTypeSpecifier from Parser to Sema and tweak it for wider use.Kaelyn Uhrain2012-06-151-0/+36
| | | | llvm-svn: 158572
* If parsing a trailing-return-type fails, don't pretend we didn't have one atRichard Smith2012-06-121-1/+1
| | | | | | all. Suppresses follow-on errors mentioned in PR13074. llvm-svn: 158348
* PR13064: Store whether an in-class initializer uses direct or copyRichard Smith2012-06-101-7/+9
| | | | | | | initialization, and use that information to produce the right kind of initialization during template instantiation. llvm-svn: 158288
* Warn in ObjC++ when an 'auto' variable deduces type 'id'.Jordan Rose2012-06-081-0/+11
| | | | | | | | | | | | | | | | | | | | This could happen for cases like this: - (NSArray *)getAllNames:(NSArray *)images { NSMutableArray *results = [NSMutableArray array]; for (auto img in images) { [results addObject:img.name]; } return results; } Here the property access will fail because 'img' has type 'id', rather than, say, NSImage. This warning will not fire in templated code, since the 'id' could have come from a template parameter. llvm-svn: 158239
* Allow friend declarations of defaulted special member functions. OnlyRichard Smith2012-06-081-1/+1
| | | | | | definitions of such members are prohibited, not mere declarations. llvm-svn: 158186
* Teach the FixIt in DiagnoseInvalidRedeclaration how to replace the writtenKaelyn Uhrain2012-06-071-5/+9
| | | | | | | nested name specifiers in addition to the function's identifier when the correction has a different nested name specifier. llvm-svn: 158178
* Ignore corrections to functions with bodies when deciding whichKaelyn Uhrain2012-06-071-9/+27
| | | | | | correction to use for an invalid function redeclaration. llvm-svn: 158177
* Revert Decl's iterators back to pointer value_type rather than reference ↵David Blaikie2012-06-061-2/+2
| | | | | | | | | | | | | | value_type In addition, I've made the pointer and reference typedef 'void' rather than T* just so they can't get misused. I would've omitted them entirely but std::distance likes them to be there even if it doesn't use them. This rolls back r155808 and r155869. Review by Doug Gregor incorporating feedback from Chandler Carruth. llvm-svn: 158104
* objective-c: merge deprecated/unavailable attributes toFariborz Jahanian2012-06-051-5/+2
| | | | | | | the overriding deprecated/unavailable method. // rdar://11475360 llvm-svn: 158022
* Disable -Wunique-enum for anonymous enums.David Blaikie2012-05-301-2/+4
| | | | | | | | | | | | | This is a large class of false positives where anonymous enums are used to declare constants (see Clang's Diagnostics.h for example). A small number of true positives could probably be found in this bucket by still warning if the anonymous enum is used in a declarator (enum { ... } x;) but so far we don't believe this to be a source of significant benefit so I haven't bothered to preserve those cases. General offline review/acknowledgment by rtrieu. llvm-svn: 157713
* Add new -Wunique-enum which will warn on enums which all elements have theRichard Trieu2012-05-301-0/+43
| | | | | | | | | | | | same value and were initialized with literals. Clang will warn on code like this: enum A { FIRST = 1, SECOND = 1 }; llvm-svn: 157666
* Fix indentation.David Blaikie2012-05-261-3/+3
| | | | llvm-svn: 157510
* Centralize the handling of the "attribute declaration must precede definition"Rafael Espindola2012-05-181-23/+21
| | | | | | | warning. This also makes us warn on tags, which, ironically, is the only case gcc warns on. llvm-svn: 157039
* A selector match between two Objective-C methods does *not* guaranteeDouglas Gregor2012-05-171-2/+3
| | | | | | | | that the methods have the same number of parameters, although we certainly assumed this in many places. Objective-C can be insane sometimes. Fixes <rdar://problem/11460990>. llvm-svn: 157025
* Remove word 'block' from option and diagnostic I addedFariborz Jahanian2012-05-151-1/+1
| | | | | | in r156825. llvm-svn: 156831
* objective-c nonfragile abi: discourage ivar declarationsFariborz Jahanian2012-05-151-1/+5
| | | | | | | in @interface by issuing warning (off by default) under opt'ed in flag -Winterface-block-ivar. // rdar://10763173 llvm-svn: 156825
* objc: allow typedef'ing an id to a pointer to a c-struct only.Fariborz Jahanian2012-05-141-6/+16
| | | | | | // rdar://11356439 llvm-svn: 156788
* Refactor all theRafael Espindola2012-05-131-23/+20
| | | | | | | | | if (Inherited) Attr->setInherited(true); To a central location. llvm-svn: 156728
* Produce a warning for mismatched section attributes. Completest pr9356.Rafael Espindola2012-05-131-0/+3
| | | | llvm-svn: 156727
* Fix a recent regression with the merging of format attributes.Rafael Espindola2012-05-111-0/+4
| | | | llvm-svn: 156597
* Fix an old (2009) FIXME:Rafael Espindola2012-05-101-13/+34
| | | | | | | | | | | | | | | | | | | | | // FIXME: This needs to happen before we merge declarations. Then, // let attribute merging cope with attribute conflicts. This was already being done for variables, but for functions we were merging then first and then applying the attributes. To avoid duplicating merging logic, some of the helpers in SemaDeclAttr.cpp become methods that can handle merging two attributes in one decl or inheriting attributes from one decl to another. With this change we are now able to produce errors for variables with incompatible visibility attributes or warn about unused dllimports in variables. This changes the attribute list iteration back to being in reverse source code order, as that matches what decl merging does and avoids differentiating the two cases is the merge*Attr methods. llvm-svn: 156531
* objective-c. Fixes a 'fixit' where location ofFariborz Jahanian2012-05-091-1/+2
| | | | | | | '*' on objective-c class name was misplaced. // rdar://11311333 llvm-svn: 156517
* Update the SelfReferenceChecker. Refactored some of the visitor methods.Richard Trieu2012-05-091-31/+49
| | | | | | | Added support for conditional operators and tightened the exclusion of the unary operator from all operators to only the address of operator. llvm-svn: 156450
* Split mergeAvailabilityAttr out of handleAvailabilityAttr. This is importantRafael Espindola2012-05-061-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | for having a uniform logic for adding attributes to a decl. This in turn is needed to fix the FIXME: // FIXME: This needs to happen before we merge declarations. Then, // let attribute merging cope with attribute conflicts. ProcessDeclAttributes(S, NewFD, D, /*NonInheritable=*/false, /*Inheritable=*/true); The idea is that mergeAvailabilityAttr will become a method. Once attributes are processed before merging, it will be called from handleAvailabilityAttr to handle multiple attributes in one decl: void f(int) __attribute__((availability(ios,deprecated=3.0), availability(ios,introduced=2.0))); and from SemaDecl.cpp to handle multiple decls: void f(int) __attribute__((availability(ios,deprecated=3.0))); void f(int) __attribute__((availability(ios,introduced=2.0))); As a bonus, use the new structure to diagnose incompatible availability attributes added to different decls (see included testcases). llvm-svn: 156269
* Switch RequireLiteralType() off of PartialDiagnostic.Douglas Gregor2012-05-041-1/+1
| | | | llvm-svn: 156178
* Revert most of r154844, which was disabled in r155975. Keep around theRichard Smith2012-05-021-1/+1
| | | | | | | refactorings in that revision, and some of the subsequent bugfixes, which seem to be relevant even without delayed exception specification parsing. llvm-svn: 156031
* Try harder to recognize hidden tag type names in potential declarations insteadKaelyn Uhrain2012-05-021-44/+70
| | | | | | of giving unhelpful errors about undeclared identifers and missing semicolons. llvm-svn: 155965
* Add FixItHint for -Wnull-conversion to initialize with an appropriate literal.David Blaikie2012-04-301-6/+8
| | | | | | Reviewed by Doug Gregor. llvm-svn: 155839
* HandleDeclarator() returns NULL for semantic disasters. Deal with itDouglas Gregor2012-04-301-1/+1
| | | | | | | when we're in an Objective-C container context. Fixes <rdar://problem/11286701>. llvm-svn: 155836
* Remove the ref/value inconsistency in filter_decl_iterator.David Blaikie2012-04-301-5/+5
| | | | | | | | | | | | | filter_decl_iterator had a weird mismatch where both op* and op-> returned T* making it difficult to generalize this filtering behavior into a reusable library of any kind. This change errs on the side of value, making op-> return T* and op* return T&. (reviewed by Richard Smith) llvm-svn: 155808
* Imrpove the note text for when a non-type decl hides a tag typeKaelyn Uhrain2012-04-271-1/+1
| | | | llvm-svn: 155723
* Add note to help explain why a tag such as 'struct' is needed to referKaelyn Uhrain2012-04-261-0/+8
| | | | | | | to a given type, when the reason is that there is a non-type decl with the same name. llvm-svn: 155677
* Fix regression in r154844. If necessary, defer computing adjusted destructorRichard Smith2012-04-211-15/+0
| | | | | | | exception specifications in C++11 until after we've parsed the exception specifications for nested classes. llvm-svn: 155293
* PR12569: Instantiate exception specifications of explicit instantiationsRichard Smith2012-04-171-2/+5
| | | | | | and explicit specializations of function templates appropriately. llvm-svn: 154956
* Implement the last part of C++ [class.mem]p2, delaying the parsing ofDouglas Gregor2012-04-161-2/+8
| | | | | | | | | exception specifications on member functions until after the closing '}' for the containing class. This allows, for example, a member function to throw an instance of its own class. Fixes PR12564 and a fairly embarassing oversight in our C++98/03 support. llvm-svn: 154844
* Implement C++11 [expr.prim.general]p3, which permits the use of 'this'Douglas Gregor2012-04-161-1/+8
| | | | | | | | | | | | | | | | | | | | | | | in the declaration of a non-static member function after the (optional) cv-qualifier-seq, which in practice means in the exception specification and late-specified return type. The new scheme here used to manage 'this' outside of a member function scope is more general than the Scope-based mechanism previously used for non-static data member initializers and late-parsesd attributes, because it can also handle the cv-qualifiers on the member function. Note, however, that a separate pass is required for static member functions to determine whether 'this' was used, because we might not know that we have a static function until after declaration matching. Finally, this introduces name mangling for 'this' and for the implicit 'this', which is intended to match GCC's mangling. Independent verification for the new mangling test case would be appreciated. Fixes PR10036 and PR12450. llvm-svn: 154799
* PR12500: Improve the wording of the diagnostic for a redefinition of a nameRichard Smith2012-04-131-1/+1
| | | | | | in the wrong namespace scope. Patch by Jonathan Sauer! llvm-svn: 154656
OpenPOWER on IntegriCloud