summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDecl.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Implement __declspec(selectany) under -fms-extensionsReid Kleckner2013-05-201-0/+9
| | | | | | | | | | | | | | | | selectany only applies to externally visible global variables. It has the effect of making the data weak_odr. The MSDN docs suggest that unused definitions can only be dropped at linktime, so Clang uses weak instead of linkonce. MSVC optimizes away references to constant selectany data, so it must assume that there is only one definition, hence weak_odr. Reviewers: espindola Differential Revision: http://llvm-reviews.chandlerc.com/D814 llvm-svn: 182266
* Check a pointer is not null before attempting to use it. This prevents aRichard Trieu2013-05-161-2/+4
| | | | | | crash on an explicit specialization of a member function in a class scope. llvm-svn: 181971
* Cleanup handling of UniqueExternalLinkage.Rafael Espindola2013-05-131-11/+11
| | | | | | | | | | | | | This patch renames getLinkage to getLinkageInternal. Only code that needs to handle UniqueExternalLinkage specially should call this. Linkage, as defined in the c++ standard, is provided by getFormalLinkage. It maps UniqueExternalLinkage to ExternalLinkage. Most places in the compiler actually want isExternallyVisible, which handles UniqueExternalLinkage as internal. llvm-svn: 181677
* Avoid patching storage class for block scope thread_local variables.Enea Zaffanella2013-05-101-16/+17
| | | | llvm-svn: 181627
* C++1y auto return type: when a function contains no 'return' statements at all,Richard Smith2013-05-101-13/+18
| | | | | | | substitute 'void' into the return type rather than replacing it with 'void', so that we maintain the 'auto' type sugar. llvm-svn: 181584
* Try to recognise hidden tag type names in potential declarations, in ObjC ↵Argyrios Kyrtzidis2013-05-071-12/+10
| | | | | | | | code as well. rdar://13829073 llvm-svn: 181345
* Replace 'MultiExprArg()' with 'None'Dmitri Gribenko2013-05-051-3/+3
| | | | llvm-svn: 181166
* Make all 'is in extern "C"' tests use the lexical context.Rafael Espindola2013-05-051-5/+3
| | | | | | | I was not able to find a case (other than the fix in r181163) where this makes a difference, but it is a more obviously correct API to have. llvm-svn: 181165
* Use lexical contexts when checking for conflicting language linkages.Rafael Espindola2013-05-051-2/+2
| | | | | | | This fixes pr14958. I will audit other calls to isExternCContext to see if there are any similar bugs left. llvm-svn: 181163
* Replace ArrayRef<T>() with None, now that we have an implicit ArrayRef ↵Dmitri Gribenko2013-05-051-3/+1
| | | | | | | | constructor from None Patch by Robert Wilhelm. llvm-svn: 181139
* In VarDecl nodes, store the thread storage class specifier as written.Enea Zaffanella2013-05-041-3/+1
| | | | llvm-svn: 181113
* Implement most of N3638 (return type deduction for normal functions).Richard Smith2013-05-041-7/+49
| | | | | | | Missing (somewhat ironically) is support for the new deduction rules in lambda functions, plus PCH support for return type patching. llvm-svn: 181108
* Say 'decltype(auto)' not 'auto' as appropriate in mismatched-deduction ↵Richard Smith2013-05-041-0/+1
| | | | | | diagnostic. llvm-svn: 181103
* PR15906: The body of a lambda is not an evaluated subexpression; don't visit ↵Richard Smith2013-05-031-1/+1
| | | | | | it when visiting such subexpressions. llvm-svn: 181046
* ArrayRef'ize InitializationSequence constructor and ↵Dmitri Gribenko2013-05-031-10/+8
| | | | | | | | InitializationSequence::Diagnose() Patch by Robert Wilhelm. llvm-svn: 181022
* Add const qualifier to Sema::getTypeName's parameter `II`Dmitri Gribenko2013-05-031-1/+1
| | | | | | Patch by Ismail Pazarbasi. llvm-svn: 181011
* Use attribute argument information to determine when to parse attribute ↵Douglas Gregor2013-05-021-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | arguments as expressions. This change partly addresses a heinous problem we have with the parsing of attribute arguments that are a lone identifier. Previously, we would end up parsing the 'align' attribute of this as an expression "(Align)": template<unsigned Size, unsigned Align> class my_aligned_storage { __attribute__((align((Align)))) char storage[Size]; }; while this would parse as a "parameter name" 'Align': template<unsigned Size, unsigned Align> class my_aligned_storage { __attribute__((align(Align))) char storage[Size]; }; The code that handles the alignment attribute would completely ignore the parameter name, so the while the first of these would do what's expected, the second would silently be equivalent to template<unsigned Size, unsigned Align> class my_aligned_storage { __attribute__((align)) char storage[Size]; }; i.e., use the maximal alignment rather than the specified alignment. Address this by sniffing the "Args" provided in the TableGen description of attributes. If the first argument is "obviously" something that should be treated as an expression (rather than an identifier to be matched later), parse it as an expression. Fixes <rdar://problem/13700933>. llvm-svn: 180973
* Revert r180970; it's causing breakage.Douglas Gregor2013-05-021-2/+2
| | | | llvm-svn: 180972
* Use attribute argument information to determine when to parse attribute ↵Douglas Gregor2013-05-021-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | arguments as expressions. This change partly addresses a heinous problem we have with the parsing of attribute arguments that are a lone identifier. Previously, we would end up parsing the 'align' attribute of this as an expression "(Align)": template<unsigned Size, unsigned Align> class my_aligned_storage { __attribute__((align((Align)))) char storage[Size]; }; while this would parse as a "parameter name" 'Align': template<unsigned Size, unsigned Align> class my_aligned_storage { __attribute__((align(Align))) char storage[Size]; }; The code that handles the alignment attribute would completely ignore the parameter name, so the while the first of these would do what's expected, the second would silently be equivalent to template<unsigned Size, unsigned Align> class my_aligned_storage { __attribute__((align)) char storage[Size]; }; i.e., use the maximal alignment rather than the specified alignment. Address this by sniffing the "Args" provided in the TableGen description of attributes. If the first argument is "obviously" something that should be treated as an expression (rather than an identifier to be matched later), parse it as an expression. Fixes <rdar://problem/13700933>. llvm-svn: 180970
* When deducing an 'auto' type, don't modify the type-as-written.Richard Smith2013-04-301-7/+7
| | | | llvm-svn: 180808
* Don't treat a non-deduced 'auto' type as being type-dependent. Instead, thereRichard Smith2013-04-301-54/+68
| | | | | | | | are now two distinct canonical 'AutoType's: one is the undeduced 'auto' placeholder type, and the other is a deduced-but-dependent type. All deduced-to-a-non-dependent-type cases are still non-canonical. llvm-svn: 180789
* ArrayRef'ize Sema::ActOnEnumBody. No functionality change.Dmitri Gribenko2013-04-271-9/+9
| | | | | | Patch by Robert Wilhelm. llvm-svn: 180682
* Implement C++1y decltype(auto).Richard Smith2013-04-261-3/+2
| | | | llvm-svn: 180610
* Don't mark 'extern "C" void f(void)' as having extern storage class.Rafael Espindola2013-04-251-10/+16
| | | | | | | | | | Instead, we check for one line extern "C" context in linkage computation and when deciding if a variable is a definition. This hopefully completes the transition to having "as written" semantics for hasExternalStorage. llvm-svn: 180258
* C++1y constexpr extensions, round 1: Allow most forms of declaration andRichard Smith2013-04-221-1/+1
| | | | | | | | statement in constexpr functions. Everything which doesn't require variable mutation is also allowed as an extension in C++11. 'void' becomes a literal type to support constexpr functions which return 'void'. llvm-svn: 180022
* The 'constexpr implies const' rule for non-static member functions is gone inRichard Smith2013-04-211-2/+17
| | | | | | | | | 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. llvm-svn: 179969
* Suppress unused warning on static inline function template specializations.Rafael Espindola2013-04-161-1/+4
| | | | | | Patch by Halfdan Ingvarsson! llvm-svn: 179598
* Remove hasExternalLinkageUncached.Rafael Espindola2013-04-151-16/+9
| | | | | | | | It was being used correctly, but it is a very dangerous API to have around. Instead, move the logic from the filtering to when we are deciding if we should link two decls. llvm-svn: 179523
* Local thread_local variables are implicitly 'static'. (This doesn't apply to ↵Richard Smith2013-04-151-2/+11
| | | | | | _Thread_local nor __thread.) llvm-svn: 179517
* Properly check for a constant initializer for a thread-local variable.Richard Smith2013-04-151-1/+2
| | | | llvm-svn: 179516
* Diagnose if a __thread or _Thread_local variable has a non-constant initializerRichard Smith2013-04-141-0/+22
| | | | | | or non-trivial destructor. llvm-svn: 179491
* Handle incompatible redeclarations of library builtins better.John McCall2013-04-141-11/+21
| | | | | | | | | Invalid redeclarations of valid explicit declarations shouldn't take the same path as redeclarations of implicit declarations, and invalid local extern declarations shouldn't foul things up for everybody else. llvm-svn: 179482
* Annotate flavor of TLS variable (statically or dynamically initialized) onto ↵Richard Smith2013-04-131-10/+20
| | | | | | the AST. llvm-svn: 179447
* Don't replace an existing decl in the scope chains with itsJohn McCall2013-04-131-28/+0
| | | | | | | | | local-extern redeclaration; type refinements, default arguments, etc. must all be locally scoped. rdar://13535367 llvm-svn: 179430
* Parsing support for thread_local and _Thread_local. We give them the sameRichard Smith2013-04-121-16/+25
| | | | | | semantics as __thread for now. llvm-svn: 179424
* Sema: Don't crash when trying to emit a warning for a duplicate value in an ↵Benjamin Kramer2013-04-071-1/+1
| | | | | | | | | invalid enum. Fixes PR15693. A null check on a pointer returned from cast<> is a very dubious construct, do we have a checker for this somewhere? llvm-svn: 178975
* Rework how ObjC method inherit deprecated/availability.Ted Kremenek2013-04-061-1/+4
| | | | | | | | | | | | | | | | | | | | | New rule: - Method decls in @implementation are considered "redeclarations" and inherit deprecated/availability from the @interface. - All other cases are consider overrides, which do not inherit deprecated/availability. For example: (a) @interface redeclares a method in an adopted protocol. (b) A subclass redeclares a method in a superclass. (c) A protocol redeclares a method from another protocol it adopts. The idea is that API authors should have the ability to easily move availability/deprecated up and down a class/protocol hierarchy. A redeclaration means that the availability/deprecation is a blank slate. Fixes <rdar://problem/13574571> llvm-svn: 178937
* Add an error to check that all program scope variables are in the constant ↵Tanya Lattner2013-04-051-0/+10
| | | | | | address space in OpenCL. llvm-svn: 178906
* Revert 178811 until I fix the unit tests.Tanya Lattner2013-04-041-10/+0
| | | | llvm-svn: 178813
* Add an error to check that all program scope variables are in the constant ↵Tanya Lattner2013-04-041-0/+10
| | | | | | address space in OpenCL. llvm-svn: 178811
* Don't patch the storage class of static data members.Rafael Espindola2013-04-041-4/+5
| | | | | | | | | | This removes a bit of patching that survived r178663. Without it we can produce better a better error message for const int a = 5; static const int a; llvm-svn: 178795
* Use isExternalLinkage instead of hasExternalLinkage.Rafael Espindola2013-04-041-1/+1
| | | | | | | | | | | | | | | | Having these not be the same makes an easy to misuse API. We should audit the uses and probably rename to something like foo->hasExternalLinkage(): The c++ standard one. That is UniqueExternalLinkage or ExternalLinkage. foo->hasUniqueExternalLinkage(): Is UniqueExternalLinkage. foo->hasCogeGenExternalLinkage(): Is ExternalLinkage. llvm-svn: 178768
* Fix a recent linkage regression.Rafael Espindola2013-04-041-1/+1
| | | | | | | | Now that we don't have a semantic storage class, use the linkage. Thanks to Bruce Stephens for reporting this. llvm-svn: 178766
* Add hasExternalLinkageUncached back with the test that Richard provided, butRafael Espindola2013-04-041-1/+13
| | | | | | keep the call at the current location. llvm-svn: 178741
* Avoid computing the linkage instead of avoiding caching it.Rafael Espindola2013-04-041-14/+1
| | | | | | | | | | | | | | This mostly reverts 178733, but keeps the tests. I don't claim to understand how hidden sub modules work or when we need to see them (is that documented?), but this has the same semantics and avoids adding hasExternalLinkageUncached which has the same foot gun potential as the old hasExternalLinkage. Last but not least, not computing linkage when it is not needed is more efficient. llvm-svn: 178739
* Fix linkage related crash.Rafael Espindola2013-04-041-2/+2
| | | | | | | | This test was exactly the opposite of what it should be. We should check if there old decl has linkage (where it makes sense) and if the new decl has the extern keyword. llvm-svn: 178735
* Fix 41 of the 61 tests which fail with modules enabled: we were computing andRichard Smith2013-04-041-2/+12
| | | | | | | | | caching the linkage for a declaration before we set up its redeclaration chain, when determining whether a declaration could be a redeclaration of something from an unimported submodule. We actually want to look at the declaration as if it were not a redeclaration here, so compute the linkage but don't cache it. llvm-svn: 178733
* Complain about attempts to befriend declarations via a usingJohn McCall2013-04-031-0/+9
| | | | | | declaration. Patch by Stephen Lin! llvm-svn: 178698
* Add 178663 back.Rafael Espindola2013-04-031-94/+30
| | | | | | | | | | | http://lab.llvm.org:8011/builders/clang-x86_64-darwin10-gdb went back green before it processed the reverted 178663, so it could not have been the culprit. Revert "Revert 178663." This reverts commit 4f8a3eb2ce5d4ba422483439e20c8cbb4d953a41. llvm-svn: 178682
* Revert 178663.Rafael Espindola2013-04-031-30/+94
| | | | | | | | | | Looks like it broke http://lab.llvm.org:8011/builders/clang-x86_64-darwin10-gdb Revert "Don't compute a patched/semantic storage class." This reverts commit 8f187f62cb0487d31bc4afdfcd47e11fe9a51d05. llvm-svn: 178681
OpenPOWER on IntegriCloud