From: Rafael Espindola Date: Tue, 8 Jan 2013 04:04:30 +0000 (+0000) Subject: Clear the LV cache when merging the availability attribute. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d63b19ea855a66df8c58764604d48497c48829d9;p=clang Clear the LV cache when merging the availability attribute. The availability implies default visibility, so it can change the computed visibility. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171840 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 84b0d3f36b..3b37890f21 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -1790,12 +1790,16 @@ DeclHasAttr(const Decl *D, const Attr *A) { bool Sema::mergeDeclAttribute(Decl *D, InheritableAttr *Attr) { InheritableAttr *NewAttr = NULL; - if (AvailabilityAttr *AA = dyn_cast(Attr)) + if (AvailabilityAttr *AA = dyn_cast(Attr)) { NewAttr = mergeAvailabilityAttr(D, AA->getRange(), AA->getPlatform(), AA->getIntroduced(), AA->getDeprecated(), AA->getObsoleted(), AA->getUnavailable(), AA->getMessage()); - else if (VisibilityAttr *VA = dyn_cast(Attr)) { + if (NewAttr) { + NamedDecl *ND = cast(D); + ND->ClearLVCache(); + } + } else if (VisibilityAttr *VA = dyn_cast(Attr)) { NewAttr = mergeVisibilityAttr(D, VA->getRange(), VA->getVisibility()); if (NewAttr) { NamedDecl *ND = cast(D); diff --git a/test/Sema/attr-availability.c b/test/Sema/attr-availability.c index e0c541e8d8..1d4b0efed6 100644 --- a/test/Sema/attr-availability.c +++ b/test/Sema/attr-availability.c @@ -43,3 +43,6 @@ void f7(int) __attribute__((availability(ios,deprecated=4.0))); // expected-warn #if !__has_feature(attribute_availability_with_message) # error "Missing __has_feature" #endif + +extern int x __attribute__((availability(macosx,introduced=10.5))); +extern int x;