]> granicus.if.org Git - clang/commitdiff
Reduce indentation using early exits and add a couple of comments. No
authorChandler Carruth <chandlerc@gmail.com>
Sun, 27 Mar 2011 21:26:48 +0000 (21:26 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sun, 27 Mar 2011 21:26:48 +0000 (21:26 +0000)
functionality changed.

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

lib/Sema/SemaDeclCXX.cpp

index 07d60caf435a4213222fd63a9b97ab0a11b1d9dc..ee7e447641c2d2e84e52fff8010143ecfb372baf 100644 (file)
@@ -6091,24 +6091,29 @@ bool Sema::InitializeVarWithConstructor(VarDecl *VD,
 }
 
 void Sema::FinalizeVarWithDestructor(VarDecl *VD, const RecordType *Record) {
-  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
-  if (!ClassDecl->isInvalidDecl() && !VD->isInvalidDecl() &&
-      !ClassDecl->hasTrivialDestructor() && !ClassDecl->isDependentContext()) {
-    CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
-    MarkDeclarationReferenced(VD->getLocation(), Destructor);
-    CheckDestructorAccess(VD->getLocation(), Destructor,
-                          PDiag(diag::err_access_dtor_var)
-                            << VD->getDeclName()
-                            << VD->getType());
-
-    if (!VD->isInvalidDecl() && VD->hasGlobalStorage()) {
-      // TODO: this should be re-enabled for static locals by !CXAAtExit
-      if (!VD->isStaticLocal())
-        Diag(VD->getLocation(), diag::warn_global_destructor);
+  if (VD->isInvalidDecl()) return;
 
-      Diag(VD->getLocation(), diag::warn_exit_time_destructor);
-    }
-  }
+  CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(Record->getDecl());
+  if (ClassDecl->isInvalidDecl()) return;
+  if (ClassDecl->hasTrivialDestructor()) return;
+  if (ClassDecl->isDependentContext()) return;
+
+  CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
+  MarkDeclarationReferenced(VD->getLocation(), Destructor);
+  CheckDestructorAccess(VD->getLocation(), Destructor,
+                        PDiag(diag::err_access_dtor_var)
+                        << VD->getDeclName()
+                        << VD->getType());
+
+  if (!VD->hasGlobalStorage()) return;
+
+  // Emit warning for non-trivial dtor in global scope (a real global,
+  // class-static, function-static).
+  Diag(VD->getLocation(), diag::warn_exit_time_destructor);
+
+  // TODO: this should be re-enabled for static locals by !CXAAtExit
+  if (!VD->isStaticLocal())
+    Diag(VD->getLocation(), diag::warn_global_destructor);
 }
 
 /// AddCXXDirectInitializerToDecl - This action is called immediately after