diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-01-08 21:30:32 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-01-08 21:30:32 +0000 |
commit | 8c4222adbc0fd22928e751be6a75328fc9283a72 (patch) | |
tree | b75dee33f5dfd507889f9142f80d37b362cab2d3 /lib/Sema/SemaDeclAttr.cpp | |
parent | 0777cf5fcb8ca53bdc7e6455e9068742fbcc14db (diff) |
Don't crash when trying to apply the availability attribute to a block.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171899 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclAttr.cpp')
-rw-r--r-- | lib/Sema/SemaDeclAttr.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index b62a4e86b1..75268b8cc5 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -2131,6 +2131,12 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, S.Diag(PlatformLoc, diag::warn_availability_unknown_platform) << Platform; + NamedDecl *ND = dyn_cast<NamedDecl>(D); + if (!ND) { + S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName(); + return; + } + AvailabilityChange Introduced = Attr.getAvailabilityIntroduced(); AvailabilityChange Deprecated = Attr.getAvailabilityDeprecated(); AvailabilityChange Obsoleted = Attr.getAvailabilityObsoleted(); @@ -2149,7 +2155,6 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, IsUnavailable, Str); if (NewAttr) { D->addAttr(NewAttr); - NamedDecl *ND = cast<NamedDecl>(D); ND->ClearLVCache(); } } |