[clang] Refactor ASTContext::getDeclAlign() (NFC) (PR #72977)

Jonas Paulsson via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 22 03:37:22 PST 2023


https://github.com/JonPsson1 updated https://github.com/llvm/llvm-project/pull/72977

>From 000dcadc0fd118df643e3f2ecbe5fcbb2f8eaab0 Mon Sep 17 00:00:00 2001
From: Jonas Paulsson <paulson1 at linux.ibm.com>
Date: Tue, 21 Nov 2023 12:10:03 +0100
Subject: [PATCH 1/4] Refactor ASTContext::getDeclAlign() (NFC)

---
 clang/lib/AST/ASTContext.cpp | 33 +++++++++++++--------------------
 1 file changed, 13 insertions(+), 20 deletions(-)

diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 1c893d008cb49f31..d08b9072c0e62985 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -1627,28 +1627,21 @@ const llvm::fltSemantics &ASTContext::getFloatTypeSemantics(QualType T) const {
 CharUnits ASTContext::getDeclAlign(const Decl *D, bool ForAlignof) const {
   unsigned Align = Target->getCharWidth();
 
-  bool UseAlignAttrOnly = false;
-  if (unsigned AlignFromAttr = D->getMaxAlignment()) {
+  const unsigned AlignFromAttr = D->getMaxAlignment();
+  if (AlignFromAttr)
     Align = AlignFromAttr;
 
-    // __attribute__((aligned)) can increase or decrease alignment
-    // *except* on a struct or struct member, where it only increases
-    // alignment unless 'packed' is also specified.
-    //
-    // It is an error for alignas to decrease alignment, so we can
-    // ignore that possibility;  Sema should diagnose it.
-    if (isa<FieldDecl>(D)) {
-      UseAlignAttrOnly = D->hasAttr<PackedAttr>() ||
-        cast<FieldDecl>(D)->getParent()->hasAttr<PackedAttr>();
-    } else {
-      UseAlignAttrOnly = true;
-    }
-  }
-  else if (isa<FieldDecl>(D))
-      UseAlignAttrOnly =
-        D->hasAttr<PackedAttr>() ||
-        cast<FieldDecl>(D)->getParent()->hasAttr<PackedAttr>();
-
+  // __attribute__((aligned)) can increase or decrease alignment
+  // *except* on a struct or struct member, where it only increases
+  // alignment unless 'packed' is also specified.
+  //
+  // It is an error for alignas to decrease alignment, so we can
+  // ignore that possibility;  Sema should diagnose it.
+  bool IsPackedField = isa<FieldDecl>(D) &&
+                       (D->hasAttr<PackedAttr>() ||
+                        cast<FieldDecl>(D)->getParent()->hasAttr<PackedAttr>());
+  bool UseAlignAttrOnly =
+    isa<FieldDecl>(D) ? IsPackedField : AlignFromAttr;
   // If we're using the align attribute only, just ignore everything
   // else about the declaration and its type.
   if (UseAlignAttrOnly) {

>From c79760665730a0f2eb70fb86a9d1a7667033c25d Mon Sep 17 00:00:00 2001
From: Jonas Paulsson <paulson1 at linux.ibm.com>
Date: Tue, 21 Nov 2023 12:31:16 +0100
Subject: [PATCH 2/4] Reformat

---
 clang/lib/AST/ASTContext.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index d08b9072c0e62985..50bb24631c118f4b 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -1640,8 +1640,7 @@ CharUnits ASTContext::getDeclAlign(const Decl *D, bool ForAlignof) const {
   bool IsPackedField = isa<FieldDecl>(D) &&
                        (D->hasAttr<PackedAttr>() ||
                         cast<FieldDecl>(D)->getParent()->hasAttr<PackedAttr>());
-  bool UseAlignAttrOnly =
-    isa<FieldDecl>(D) ? IsPackedField : AlignFromAttr;
+  bool UseAlignAttrOnly = isa<FieldDecl>(D) ? IsPackedField : AlignFromAttr;
   // If we're using the align attribute only, just ignore everything
   // else about the declaration and its type.
   if (UseAlignAttrOnly) {

>From b688dc79c00b86bccc695507f77868e1721e64a0 Mon Sep 17 00:00:00 2001
From: Jonas Paulsson <paulson1 at linux.ibm.com>
Date: Wed, 22 Nov 2023 11:42:35 +0100
Subject: [PATCH 3/4] Use Eli's version instead

---
 clang/lib/AST/ASTContext.cpp | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 50bb24631c118f4b..454f07b4303e0632 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -1637,10 +1637,12 @@ CharUnits ASTContext::getDeclAlign(const Decl *D, bool ForAlignof) const {
   //
   // It is an error for alignas to decrease alignment, so we can
   // ignore that possibility;  Sema should diagnose it.
-  bool IsPackedField = isa<FieldDecl>(D) &&
-                       (D->hasAttr<PackedAttr>() ||
-                        cast<FieldDecl>(D)->getParent()->hasAttr<PackedAttr>());
-  bool UseAlignAttrOnly = isa<FieldDecl>(D) ? IsPackedField : AlignFromAttr;
+  bool UseAlignAttrOnly;
+  if (FieldDecl *FD = dyn_cast<FieldDecl>(D))
+    UseAlignAttrOnly =
+        FD->hasAttr<PackedAttr>() || FD->getParent()->hasAttr<PackedAttr>();
+  else
+    UseAlignAttrOnly = AlignFromAttr != 0;
   // If we're using the align attribute only, just ignore everything
   // else about the declaration and its type.
   if (UseAlignAttrOnly) {

>From 8078141fd797b40baf1e097a8d48a6294abf49c7 Mon Sep 17 00:00:00 2001
From: Jonas Paulsson <paulson1 at linux.ibm.com>
Date: Wed, 22 Nov 2023 12:35:45 +0100
Subject: [PATCH 4/4] Add needed const

---
 clang/lib/AST/ASTContext.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 454f07b4303e0632..3d9331c6a859acfa 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -1638,7 +1638,7 @@ CharUnits ASTContext::getDeclAlign(const Decl *D, bool ForAlignof) const {
   // It is an error for alignas to decrease alignment, so we can
   // ignore that possibility;  Sema should diagnose it.
   bool UseAlignAttrOnly;
-  if (FieldDecl *FD = dyn_cast<FieldDecl>(D))
+  if (const FieldDecl *FD = dyn_cast<FieldDecl>(D))
     UseAlignAttrOnly =
         FD->hasAttr<PackedAttr>() || FD->getParent()->hasAttr<PackedAttr>();
   else



More information about the cfe-commits mailing list