]> granicus.if.org Git - clang/commitdiff
Refactor all the
authorRafael Espindola <rafael.espindola@gmail.com>
Sun, 13 May 2012 03:25:18 +0000 (03:25 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sun, 13 May 2012 03:25:18 +0000 (03:25 +0000)
  if (Inherited)
    Attr->setInherited(true);

To a central location.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156728 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Sema/Sema.h
lib/Sema/SemaDecl.cpp
lib/Sema/SemaDeclAttr.cpp
lib/Sema/TargetAttributesSema.cpp

index 3e03befba9f244c5df7db7d779ff868dd7573ede..a231b8625b7aa5990a8b87a55106a8178e163d80 100644 (file)
@@ -1562,18 +1562,20 @@ public:
   bool isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New);
 
   /// Attribute merging methods. Return true if a new attribute was added.
-  bool mergeAvailabilityAttr(Decl *D, SourceRange Range, bool Inherited,
-                             IdentifierInfo *Platform, VersionTuple Introduced,
-                             VersionTuple Deprecated, VersionTuple Obsoleted,
-                             bool IsUnavailable, StringRef Message);
-  bool mergeVisibilityAttr(Decl *D, SourceRange Range,
-                           bool Inherited, VisibilityAttr::VisibilityType Vis);
-  bool mergeDLLImportAttr(Decl *D, SourceRange Range, bool Inherited);
-  bool mergeDLLExportAttr(Decl *D, SourceRange Range, bool Inherited);
-  bool mergeFormatAttr(Decl *D, SourceRange Range, bool Inherited,
-                       StringRef Format, int FormatIdx, int FirstArg);
-  bool mergeSectionAttr(Decl *D, SourceRange Range, bool Inherited,
-                        StringRef Name);
+  AvailabilityAttr *mergeAvailabilityAttr(Decl *D, SourceRange Range,
+                                          IdentifierInfo *Platform,
+                                          VersionTuple Introduced,
+                                          VersionTuple Deprecated,
+                                          VersionTuple Obsoleted,
+                                          bool IsUnavailable,
+                                          StringRef Message);
+  VisibilityAttr *mergeVisibilityAttr(Decl *D, SourceRange Range,
+                                      VisibilityAttr::VisibilityType Vis);
+  DLLImportAttr *mergeDLLImportAttr(Decl *D, SourceRange Range);
+  DLLExportAttr *mergeDLLExportAttr(Decl *D, SourceRange Range);
+  FormatAttr *mergeFormatAttr(Decl *D, SourceRange Range, StringRef Format,
+                              int FormatIdx, int FirstArg);
+  SectionAttr *mergeSectionAttr(Decl *D, SourceRange Range, StringRef Name);
   bool mergeDeclAttribute(Decl *New, InheritableAttr *Attr);
 
   void mergeDeclAttributes(Decl *New, Decl *Old, bool MergeDeprecation = true);
index 9828c180b19d3af67c544d439ae356a123e82cba..3e660b59869332bd7a6bc05b53a8e948991ce3b8 100644 (file)
@@ -1659,30 +1659,27 @@ DeclHasAttr(const Decl *D, const Attr *A) {
 }
 
 bool Sema::mergeDeclAttribute(Decl *D, InheritableAttr *Attr) {
+  InheritableAttr *NewAttr = NULL;
   if (AvailabilityAttr *AA = dyn_cast<AvailabilityAttr>(Attr))
-    return mergeAvailabilityAttr(D, AA->getRange(), true, AA->getPlatform(),
-                                 AA->getIntroduced(), AA->getDeprecated(),
-                                 AA->getObsoleted(), AA->getUnavailable(),
-                                 AA->getMessage());
-
-  if (VisibilityAttr *VA = dyn_cast<VisibilityAttr>(Attr))
-    return mergeVisibilityAttr(D, VA->getRange(), true, VA->getVisibility());
-
-  if (DLLImportAttr *ImportA = dyn_cast<DLLImportAttr>(Attr))
-    return mergeDLLImportAttr(D, ImportA->getRange(), true);
-
-  if (DLLExportAttr *ExportA = dyn_cast<DLLExportAttr>(Attr))
-    return mergeDLLExportAttr(D, ExportA->getRange(), true);
-
-  if (FormatAttr *FA = dyn_cast<FormatAttr>(Attr))
-    return mergeFormatAttr(D, FA->getRange(), true, FA->getType(),
-                           FA->getFormatIdx(), FA->getFirstArg());
-
-  if (SectionAttr *SA = dyn_cast<SectionAttr>(Attr))
-    return mergeSectionAttr(D, SA->getRange(), true, SA->getName());
-
-  if (!DeclHasAttr(D, Attr)) {
-    InheritableAttr *NewAttr = cast<InheritableAttr>(Attr->clone(Context));
+    NewAttr = mergeAvailabilityAttr(D, AA->getRange(), AA->getPlatform(),
+                                    AA->getIntroduced(), AA->getDeprecated(),
+                                    AA->getObsoleted(), AA->getUnavailable(),
+                                    AA->getMessage());
+  else if (VisibilityAttr *VA = dyn_cast<VisibilityAttr>(Attr))
+    NewAttr = mergeVisibilityAttr(D, VA->getRange(), VA->getVisibility());
+  else if (DLLImportAttr *ImportA = dyn_cast<DLLImportAttr>(Attr))
+    NewAttr = mergeDLLImportAttr(D, ImportA->getRange());
+  else if (DLLExportAttr *ExportA = dyn_cast<DLLExportAttr>(Attr))
+    NewAttr = mergeDLLExportAttr(D, ExportA->getRange());
+  else if (FormatAttr *FA = dyn_cast<FormatAttr>(Attr))
+    NewAttr = mergeFormatAttr(D, FA->getRange(), FA->getType(),
+                              FA->getFormatIdx(), FA->getFirstArg());
+  else if (SectionAttr *SA = dyn_cast<SectionAttr>(Attr))
+    NewAttr = mergeSectionAttr(D, SA->getRange(), SA->getName());
+  else if (!DeclHasAttr(D, Attr))
+    NewAttr = cast<InheritableAttr>(Attr->clone(Context));
+
+  if (NewAttr) {
     NewAttr->setInherited(true);
     D->addAttr(NewAttr);
     return true;
index 947fe7af91815cb13eb2adea69f23246a83fcb4f..dacb729506039d50709e18fdd1ec475d94dc46ac 100644 (file)
@@ -1769,14 +1769,13 @@ static bool checkAvailabilityAttr(Sema &S, SourceRange Range,
   return false;
 }
 
-bool Sema::mergeAvailabilityAttr(Decl *D, SourceRange Range,
-                                 bool Inherited,
-                                 IdentifierInfo *Platform,
-                                 VersionTuple Introduced,
-                                 VersionTuple Deprecated,
-                                 VersionTuple Obsoleted,
-                                 bool IsUnavailable,
-                                 StringRef Message) {
+AvailabilityAttr *Sema::mergeAvailabilityAttr(Decl *D, SourceRange Range,
+                                              IdentifierInfo *Platform,
+                                              VersionTuple Introduced,
+                                              VersionTuple Deprecated,
+                                              VersionTuple Obsoleted,
+                                              bool IsUnavailable,
+                                              StringRef Message) {
   VersionTuple MergedIntroduced = Introduced;
   VersionTuple MergedDeprecated = Deprecated;
   VersionTuple MergedObsoleted = Obsoleted;
@@ -1849,21 +1848,15 @@ bool Sema::mergeAvailabilityAttr(Decl *D, SourceRange Range,
       MergedIntroduced == Introduced &&
       MergedDeprecated == Deprecated &&
       MergedObsoleted == Obsoleted)
-    return false;
+    return NULL;
 
   if (!checkAvailabilityAttr(*this, Range, Platform, MergedIntroduced,
                              MergedDeprecated, MergedObsoleted)) {
-    AvailabilityAttr *Attr =
-      ::new (Context) AvailabilityAttr(Range, Context, Platform,
-                                       Introduced, Deprecated,
-                                       Obsoleted, IsUnavailable, Message);
-
-    if (Inherited)
-      Attr->setInherited(true);
-    D->addAttr(Attr);
-    return true;
+    return ::new (Context) AvailabilityAttr(Range, Context, Platform,
+                                            Introduced, Deprecated,
+                                            Obsoleted, IsUnavailable, Message);
   }
-  return false;
+  return NULL;
 }
 
 static void handleAvailabilityAttr(Sema &S, Decl *D,
@@ -1885,36 +1878,32 @@ static void handleAvailabilityAttr(Sema &S, Decl *D,
   if (SE)
     Str = SE->getString();
 
-  S.mergeAvailabilityAttr(D, Attr.getRange(),
-                          false, Platform,
-                          Introduced.Version,
-                          Deprecated.Version,
-                          Obsoleted.Version,
-                          IsUnavailable,
-                          Str);
+  AvailabilityAttr *NewAttr = S.mergeAvailabilityAttr(D, Attr.getRange(),
+                                                      Platform,
+                                                      Introduced.Version,
+                                                      Deprecated.Version,
+                                                      Obsoleted.Version,
+                                                      IsUnavailable, Str);
+  if (NewAttr)
+    D->addAttr(NewAttr);
 }
 
-bool Sema::mergeVisibilityAttr(Decl *D, SourceRange Range,
-                               bool Inherited,
-                               VisibilityAttr::VisibilityType Vis) {
+VisibilityAttr *Sema::mergeVisibilityAttr(Decl *D, SourceRange Range,
+                                          VisibilityAttr::VisibilityType Vis) {
   if (isa<TypedefNameDecl>(D)) {
     Diag(Range.getBegin(), diag::warn_attribute_ignored) << "visibility";
-    return false;
+    return NULL;
   }
   VisibilityAttr *ExistingAttr = D->getAttr<VisibilityAttr>();
   if (ExistingAttr) {
     VisibilityAttr::VisibilityType ExistingVis = ExistingAttr->getVisibility();
     if (ExistingVis == Vis)
-      return false;
+      return NULL;
     Diag(ExistingAttr->getLocation(), diag::err_mismatched_visibility);
     Diag(Range.getBegin(), diag::note_previous_attribute);
     D->dropAttr<VisibilityAttr>();
   }
-  VisibilityAttr *Attr = ::new (Context) VisibilityAttr(Range, Context, Vis);
-  if (Inherited)
-    Attr->setInherited(true);
-  D->addAttr(Attr);
-  return true;
+  return ::new (Context) VisibilityAttr(Range, Context, Vis);
 }
 
 static void handleVisibilityAttr(Sema &S, Decl *D, const AttributeList &Attr) {
@@ -1955,7 +1944,9 @@ static void handleVisibilityAttr(Sema &S, Decl *D, const AttributeList &Attr) {
     return;
   }
 
-  S.mergeVisibilityAttr(D, Attr.getRange(), false, type);
+  VisibilityAttr *NewAttr = S.mergeVisibilityAttr(D, Attr.getRange(), type);
+  if (NewAttr)
+    D->addAttr(NewAttr);
 }
 
 static void handleObjCMethodFamilyAttr(Sema &S, Decl *decl,
@@ -2286,20 +2277,16 @@ static void handleReqdWorkGroupSize(Sema &S, Decl *D,
                                                      WGSize[2]));
 }
 
-bool Sema::mergeSectionAttr(Decl *D, SourceRange Range, bool Inherited,
-                            StringRef Name) {
+SectionAttr *Sema::mergeSectionAttr(Decl *D, SourceRange Range,
+                                    StringRef Name) {
   if (SectionAttr *ExistingAttr = D->getAttr<SectionAttr>()) {
     if (ExistingAttr->getName() == Name)
-      return false;
+      return NULL;
     Diag(ExistingAttr->getLocation(), diag::warn_mismatched_section);
     Diag(Range.getBegin(), diag::note_previous_attribute);
-    return false;
+    return NULL;
   }
-  SectionAttr *Attr = ::new (Context) SectionAttr(Range, Context, Name);
-  if (Inherited)
-    Attr->setInherited(true);
-  D->addAttr(Attr);
-  return true;
+  return ::new (Context) SectionAttr(Range, Context, Name);
 }
 
 static void handleSectionAttr(Sema &S, Decl *D, const AttributeList &Attr) {
@@ -2329,7 +2316,10 @@ static void handleSectionAttr(Sema &S, Decl *D, const AttributeList &Attr) {
     S.Diag(SE->getLocStart(), diag::err_attribute_section_local_variable);
     return;
   }
-  S.mergeSectionAttr(D, Attr.getRange(), false, SE->getString());
+  SectionAttr *NewAttr = S.mergeSectionAttr(D, Attr.getRange(),
+                                            SE->getString());
+  if (NewAttr)
+    D->addAttr(NewAttr);
 }
 
 
@@ -2589,8 +2579,8 @@ static void handleInitPriorityAttr(Sema &S, Decl *D,
                                                 prioritynum));
 }
 
-bool Sema::mergeFormatAttr(Decl *D, SourceRange Range, bool Inherited,
-                           StringRef Format, int FormatIdx, int FirstArg) {
+FormatAttr *Sema::mergeFormatAttr(Decl *D, SourceRange Range, StringRef Format,
+                                  int FormatIdx, int FirstArg) {
   // Check whether we already have an equivalent format attribute.
   for (specific_attr_iterator<FormatAttr>
          i = D->specific_attr_begin<FormatAttr>(),
@@ -2604,14 +2594,12 @@ bool Sema::mergeFormatAttr(Decl *D, SourceRange Range, bool Inherited,
       // location.
       if (f->getLocation().isInvalid())
         f->setRange(Range);
-      return false;
+      return NULL;
     }
   }
 
-  FormatAttr *Attr = ::new (Context) FormatAttr(Range, Context, Format,
-                                               FormatIdx, FirstArg);
-  D->addAttr(Attr);
-  return true;
+  return ::new (Context) FormatAttr(Range, Context, Format, FormatIdx,
+                                    FirstArg);
 }
 
 /// Handle __attribute__((format(type,idx,firstarg))) attributes based on
@@ -2749,8 +2737,11 @@ static void handleFormatAttr(Sema &S, Decl *D, const AttributeList &Attr) {
     return;
   }
 
-  S.mergeFormatAttr(D, Attr.getRange(), false, Format, Idx.getZExtValue(),
-                    FirstArg.getZExtValue());
+  FormatAttr *NewAttr = S.mergeFormatAttr(D, Attr.getRange(), Format,
+                                          Idx.getZExtValue(),
+                                          FirstArg.getZExtValue());
+  if (NewAttr)
+    D->addAttr(NewAttr);
 }
 
 static void handleTransparentUnionAttr(Sema &S, Decl *D,
index 9ace9ad65aca4f34331cb17fbf59f6e6d3b7e77c..893c3e4319d9aa6fb9bb0340b01e54af2759e961 100644 (file)
@@ -151,22 +151,16 @@ static void HandleX86ForceAlignArgPointerAttr(Decl *D,
                                                            S.Context));
 }
 
-bool Sema::mergeDLLImportAttr(Decl *D, SourceRange Range, bool Inherited) {
+DLLImportAttr *Sema::mergeDLLImportAttr(Decl *D, SourceRange Range) {
   if (D->hasAttr<DLLExportAttr>()) {
     Diag(Range.getBegin(), diag::warn_attribute_ignored) << "dllimport";
-    return false;
+    return NULL;
   }
 
   if (D->hasAttr<DLLImportAttr>())
-    return false;
+    return NULL;
 
-  DLLImportAttr *Attr =
-    ::new (Context) DLLImportAttr(Range, Context);
-  if (Inherited)
-    Attr->setInherited(true);
-  D->addAttr(Attr);
-
-  return true;
+  return ::new (Context) DLLImportAttr(Range, Context);
 }
 
 static void HandleDLLImportAttr(Decl *D, const AttributeList &Attr, Sema &S) {
@@ -195,25 +189,21 @@ static void HandleDLLImportAttr(Decl *D, const AttributeList &Attr, Sema &S) {
     return;
   }
 
-  S.mergeDLLImportAttr(D, Attr.getRange(), false);
+  DLLImportAttr *NewAttr = S.mergeDLLImportAttr(D, Attr.getRange());
+  if (NewAttr)
+    D->addAttr(NewAttr);
 }
 
-bool Sema::mergeDLLExportAttr(Decl *D, SourceRange Range, bool Inherited) {
+DLLExportAttr *Sema::mergeDLLExportAttr(Decl *D, SourceRange Range) {
   if (DLLImportAttr *Import = D->getAttr<DLLImportAttr>()) {
     Diag(Import->getLocation(), diag::warn_attribute_ignored) << "dllimport";
     D->dropAttr<DLLImportAttr>();
   }
 
   if (D->hasAttr<DLLExportAttr>())
-    return false;
-
-  DLLExportAttr *Attr =
-    ::new (Context) DLLExportAttr(Range, Context);
-  if (Inherited)
-    Attr->setInherited(true);
-  D->addAttr(Attr);
+    return NULL;
 
-  return true;
+  return ::new (Context) DLLExportAttr(Range, Context);
 }
 
 static void HandleDLLExportAttr(Decl *D, const AttributeList &Attr, Sema &S) {
@@ -239,7 +229,9 @@ static void HandleDLLExportAttr(Decl *D, const AttributeList &Attr, Sema &S) {
     return;
   }
 
-  S.mergeDLLExportAttr(D, Attr.getRange(), false);
+  DLLExportAttr *NewAttr = S.mergeDLLExportAttr(D, Attr.getRange());
+  if (NewAttr)
+    D->addAttr(NewAttr);
 }
 
 namespace {