vitalybuka created this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D77189

Files:
  clang/lib/CodeGen/CGDecl.cpp


Index: clang/lib/CodeGen/CGDecl.cpp
===================================================================
--- clang/lib/CodeGen/CGDecl.cpp
+++ clang/lib/CodeGen/CGDecl.cpp
@@ -37,6 +37,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/Intrinsics.h"
 #include "llvm/IR/Type.h"
+#include <iostream>
 
 using namespace clang;
 using namespace CodeGen;
@@ -44,6 +45,11 @@
 static_assert(clang::Sema::MaximumAlignment <= llvm::Value::MaximumAlignment,
               "Clang max alignment greater than what LLVM supports?");
 
+#include "llvm/Support/CommandLine.h"
+static llvm::cl::opt<uint64_t> ClUninitBegin("uninit-begin", 
llvm::cl::init(1));
+static llvm::cl::opt<uint64_t> ClUninitEnd("uninit-end", llvm::cl::init(0));
+static llvm::cl::opt<bool> ClUninitPrint("uninit-print", 
llvm::cl::init(false));
+
 void CodeGenFunction::EmitDecl(const Decl &D) {
   switch (D.getKind()) {
   case Decl::BuiltinTemplate:
@@ -1793,13 +1799,26 @@
   const Address Loc =
       locIsByrefHeader ? emission.getObjectAddress(*this) : emission.Addr;
 
+  static const uint64_t HB = ClUninitBegin;
+  static const uint64_t HE = ClUninitEnd;
+  size_t v = llvm::hash_value(
+      D.getLocation().printToString(getContext().getSourceManager()));
+  bool attr = D.getAttr<UninitializedAttr>();
+  if (v >= HB && v <= HE) {
+    if (ClUninitPrint) {
+      std::cerr << v << " "
+                << D.getLocation().printToString(
+                       getContext().getSourceManager())
+                << "\n";
+    }
+    attr = true;
+  }
   // Note: constexpr already initializes everything correctly.
   LangOptions::TrivialAutoVarInitKind trivialAutoVarInit =
       (D.isConstexpr()
            ? LangOptions::TrivialAutoVarInitKind::Uninitialized
-           : (D.getAttr<UninitializedAttr>()
-                  ? LangOptions::TrivialAutoVarInitKind::Uninitialized
-                  : getContext().getLangOpts().getTrivialAutoVarInit()));
+           : (attr ? LangOptions::TrivialAutoVarInitKind::Uninitialized
+                   : getContext().getLangOpts().getTrivialAutoVarInit()));
 
   auto initializeWhatIsTechnicallyUninitialized = [&](Address Loc) {
     if (trivialAutoVarInit ==


Index: clang/lib/CodeGen/CGDecl.cpp
===================================================================
--- clang/lib/CodeGen/CGDecl.cpp
+++ clang/lib/CodeGen/CGDecl.cpp
@@ -37,6 +37,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/Intrinsics.h"
 #include "llvm/IR/Type.h"
+#include <iostream>
 
 using namespace clang;
 using namespace CodeGen;
@@ -44,6 +45,11 @@
 static_assert(clang::Sema::MaximumAlignment <= llvm::Value::MaximumAlignment,
               "Clang max alignment greater than what LLVM supports?");
 
+#include "llvm/Support/CommandLine.h"
+static llvm::cl::opt<uint64_t> ClUninitBegin("uninit-begin", llvm::cl::init(1));
+static llvm::cl::opt<uint64_t> ClUninitEnd("uninit-end", llvm::cl::init(0));
+static llvm::cl::opt<bool> ClUninitPrint("uninit-print", llvm::cl::init(false));
+
 void CodeGenFunction::EmitDecl(const Decl &D) {
   switch (D.getKind()) {
   case Decl::BuiltinTemplate:
@@ -1793,13 +1799,26 @@
   const Address Loc =
       locIsByrefHeader ? emission.getObjectAddress(*this) : emission.Addr;
 
+  static const uint64_t HB = ClUninitBegin;
+  static const uint64_t HE = ClUninitEnd;
+  size_t v = llvm::hash_value(
+      D.getLocation().printToString(getContext().getSourceManager()));
+  bool attr = D.getAttr<UninitializedAttr>();
+  if (v >= HB && v <= HE) {
+    if (ClUninitPrint) {
+      std::cerr << v << " "
+                << D.getLocation().printToString(
+                       getContext().getSourceManager())
+                << "\n";
+    }
+    attr = true;
+  }
   // Note: constexpr already initializes everything correctly.
   LangOptions::TrivialAutoVarInitKind trivialAutoVarInit =
       (D.isConstexpr()
            ? LangOptions::TrivialAutoVarInitKind::Uninitialized
-           : (D.getAttr<UninitializedAttr>()
-                  ? LangOptions::TrivialAutoVarInitKind::Uninitialized
-                  : getContext().getLangOpts().getTrivialAutoVarInit()));
+           : (attr ? LangOptions::TrivialAutoVarInitKind::Uninitialized
+                   : getContext().getLangOpts().getTrivialAutoVarInit()));
 
   auto initializeWhatIsTechnicallyUninitialized = [&](Address Loc) {
     if (trivialAutoVarInit ==
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to