Richard Smith
84824edd0b
Allow non-defining declarations of class template partial specializations to
...
have a nested name specifier. Strictly speaking, forward declarations of class
template partial specializations are not permitted at all, but that seems like
an obvious wording defect, and if we allow them without a nested name specifier
we should also allow them with a nested name specifier.
llvm-svn: 255383
2015-12-11 22:39:52 +00:00
Richard Smith
6dc8ae10aa
[modules] When parsing the base specifiers of a parse-merged class, the current
...
context is the class itself but lookups should be performed starting with the
lookup parent of the class (class and base members don't shadow types from the
surrounding context because they have not been declared yet).
llvm-svn: 245236
2015-08-17 20:24:17 +00:00
Richard Smith
2bb3c34ed4
[modules] When loading a template specialization, re-canonicalize its template
...
arguments because the reloaded form might have become non-canonical across the
serialization/deserialization step (this particularly happens when the
canonical form of the type involves an expression).
llvm-svn: 244409
2015-08-09 01:05:31 +00:00
Richard Smith
8cbd895947
[modules] Make IndirectFieldDecl mergeable to avoid lookup ambiguity when the same anonymous union is defined across multiple modules.
...
llvm-svn: 243940
2015-08-04 02:05:09 +00:00
Richard Smith
826711d456
[modules] When performing redeclaration lookup for a using declaration, prefer
...
UsingShadowDecls over other declarations of the same entity in the lookup
results. This ensures that we build correct redeclaration chains for the
UsingShadowDecls (otherwise we could see assertions and other misbehavior in
modules builds, when merging combines multiple redeclaration chains for the
same entity from the same module into one chain).
llvm-svn: 243592
2015-07-29 23:38:25 +00:00
Richard Smith
b1d8ea4635
[modules] Fix merging support for forward-declared enums with fixed underlying types. A visible declaration is enough to make the type complete, but not enough to make the definition visible.
...
llvm-svn: 241743
2015-07-08 21:49:31 +00:00
Richard Smith
da6c234c39
[modules] Merging support for specializations of a function template. This very
...
rarely matters, but can affect whether two dependent types are canonically
equivalent.
llvm-svn: 241207
2015-07-01 23:19:58 +00:00
Richard Smith
5327b89001
[modules] Don't make out-of-line member specializations of an instantiated
...
class template specialization visible just because the class template
specialization's definition is visible.
llvm-svn: 241182
2015-07-01 19:32:54 +00:00
Richard Smith
04c6c1f3a5
[modules] Skip trailing attributes when skipping a class definition during parse-merging.
...
llvm-svn: 241180
2015-07-01 18:56:50 +00:00
Richard Smith
7655381aa1
[modules] Don't require the 'inline' specifier when merging an inline function;
...
any source of the inline nature is sufficient.
llvm-svn: 241146
2015-07-01 07:24:18 +00:00
Richard Smith
afe800c456
[modules] Fix typo in default argument merging.
...
llvm-svn: 239954
2015-06-17 22:13:23 +00:00
Richard Smith
5293379374
[modules] Fix merging of default template arguments onto friend templates.
...
Previously we'd complain about redefinition of default arguments when we
instantiated a class with a friend template that inherits its default argument,
because we propagate the default template arguemnt onto the friend when we
reload the AST.
llvm-svn: 239857
2015-06-16 21:57:05 +00:00
Richard Smith
f2b1eb9eb2
[modules] Better support for redefinitions of an entity from the same module.
...
Support this across module save/reload and extend the 'missing import'
diagnostics with a list of providing modules.
llvm-svn: 239750
2015-06-15 20:15:48 +00:00
Richard Smith
a1431077de
[modules] Apply name visibility rules to names found by ADL.
...
llvm-svn: 239578
2015-06-12 01:32:13 +00:00
Richard Smith
c785276b92
[modules] Fix crash with multiple levels of default template argument merging.
...
llvm-svn: 239575
2015-06-11 23:46:11 +00:00
Richard Smith
0f192e8940
[modules] Fix assert/crash when parsing and merging a definition of a class with a base-specifier inside a namespace.
...
llvm-svn: 239569
2015-06-11 22:48:25 +00:00
Richard Smith
00be6d0ff8
[modules] Fix a few places where merging wasn't performed if modules was disabled but local module visibilty was enabled.
...
llvm-svn: 239504
2015-06-11 03:05:39 +00:00
Richard Smith
fd8b64eea0
[modules] Support merging a parsed default argument with an imported hidden one for non-type and template template parameters too.
...
llvm-svn: 237815
2015-05-20 18:24:21 +00:00
Richard Smith
c7d48d1a16
[modules] Support merging a parsed default function/template argument with an imported but hidden one.
...
llvm-svn: 237814
2015-05-20 17:50:35 +00:00
Richard Smith
82e57fb1e8
[modules] Support for merging a parsed definition of a static data member of a class template into an imported but hidden definition.
...
llvm-svn: 237647
2015-05-19 00:49:29 +00:00
Richard Smith
c7e6ff02d5
[modules] Support for merging a parsed class template specialization definition into an imported but hidden definition.
...
llvm-svn: 237612
2015-05-18 20:36:47 +00:00
Richard Smith
d9ba224f66
[modules] Suport for merging a parsed enum definition into an existing imported but not visible definition.
...
llvm-svn: 236690
2015-05-07 03:54:19 +00:00
Richard Smith
d6aab59ad1
[modules] Allow a function template definition if we have a pre-existing but not visible definition of the same template.
...
llvm-svn: 233430
2015-03-27 21:57:41 +00:00
Richard Smith
9a71c99844
[modules] Allow a function to be redefined if the old definition is not visible.
...
llvm-svn: 233407
2015-03-27 20:16:58 +00:00
Richard Smith
a523022b53
[modules] Handle defining a tag with a typedef name for linkage purposes on top of an existing imported-but-not-visible definition.
...
llvm-svn: 233345
2015-03-27 01:37:43 +00:00
Richard Smith
be3980b73c
[modules] Handle defining a class template on top of an existing imported-but-not-visible definition.
...
llvm-svn: 233341
2015-03-27 00:41:57 +00:00
Richard Smith
65ebb4ac8a
[modules] If we reach a definition of a class for which we already have a
...
non-visible definition, skip the new definition and make the old one visible
instead of trying to parse it again and failing horribly. C++'s ODR allows
us to assume that the two definitions are identical.
llvm-svn: 233250
2015-03-26 04:09:53 +00:00