SemaCXX: Support templates in availability attributes
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 26 Feb 2016 19:27:00 +0000 (19:27 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Fri, 26 Feb 2016 19:27:00 +0000 (19:27 +0000)
commitec599a906b7388f6ebdd3d00d6904473b69ec288
tree6eac50103586441591f2527e034c4f4fd958ed53
parent2993854bb464c08f060e1f704f4c0b6dbc9ccda8
SemaCXX: Support templates in availability attributes

If the availability context is `FunctionTemplateDecl`, we should look
through it to the `FunctionDecl`.  This prevents a diagnostic in the
following case:

    class C __attribute__((unavailable));
    template <class T> void foo(C&) __attribute__((unavailable));

This adds tests for availability in templates in many other cases, but
that was the only case that failed before this patch.

I added a feature `__has_feature(attribute_availability_in_templates)`
so users can test for this.

rdar://problem/24561029

llvm-svn: 262050
clang/lib/AST/DeclBase.cpp
clang/lib/Lex/PPMacroExpansion.cpp
clang/test/SemaCXX/attr-unavailable.cpp