[llvm] r312182 - Revert r312139 "Verifier: Verify the correctness of fragment expressions attached to globals."

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 30 15:41:27 PDT 2017


Author: hans
Date: Wed Aug 30 15:41:27 2017
New Revision: 312182

URL: http://llvm.org/viewvc/llvm-project?rev=312182&view=rev
Log:
Revert r312139 "Verifier: Verify the correctness of fragment expressions attached to globals."

This caused PR34390.

Removed:
    llvm/trunk/test/Verifier/fragment.ll
Modified:
    llvm/trunk/lib/IR/Verifier.cpp

Modified: llvm/trunk/lib/IR/Verifier.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=312182&r1=312181&r2=312182&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Verifier.cpp (original)
+++ llvm/trunk/lib/IR/Verifier.cpp Wed Aug 30 15:41:27 2017
@@ -507,10 +507,6 @@ private:
   void verifySiblingFuncletUnwinds();
 
   void verifyFragmentExpression(const DbgInfoIntrinsic &I);
-  template <typename ValueOrMetadata>
-  void verifyFragmentExpression(const DIVariable &V,
-                                DIExpression::FragmentInfo Fragment,
-                                ValueOrMetadata *Desc);
   void verifyFnArgs(const DbgInfoIntrinsic &I);
 
   /// Module-level debug info verification...
@@ -1182,11 +1178,8 @@ void Verifier::visitDIExpression(const D
 void Verifier::visitDIGlobalVariableExpression(
     const DIGlobalVariableExpression &GVE) {
   AssertDI(GVE.getVariable(), "missing variable");
-  if (auto *Expr = GVE.getExpression()) {
+  if (auto *Expr = GVE.getExpression())
     visitDIExpression(*Expr);
-    if (auto Fragment = Expr->getFragmentInfo())
-      verifyFragmentExpression(*GVE.getVariable(), *Fragment, &GVE);
-  }
 }
 
 void Verifier::visitDIObjCProperty(const DIObjCProperty &N) {
@@ -4495,7 +4488,7 @@ void Verifier::visitDbgIntrinsic(StringR
   verifyFnArgs(DII);
 }
 
-static uint64_t getVariableSize(const DIVariable &V) {
+static uint64_t getVariableSize(const DILocalVariable &V) {
   // Be careful of broken types (checked elsewhere).
   const Metadata *RawType = V.getRawType();
   while (RawType) {
@@ -4534,7 +4527,7 @@ void Verifier::verifyFragmentExpression(
   if (!V || !E || !E->isValid())
     return;
 
-  // Nothing to do if this isn't a DW_OP_LLVM_fragment expression.
+  // Nothing to do if this isn't a bit piece expression.
   auto Fragment = E->getFragmentInfo();
   if (!Fragment)
     return;
@@ -4548,24 +4541,17 @@ void Verifier::verifyFragmentExpression(
   if (V->isArtificial())
     return;
 
-  verifyFragmentExpression(*V, *Fragment, &I);
-}
-
-template <typename ValueOrMetadata>
-void Verifier::verifyFragmentExpression(const DIVariable &V,
-                                        DIExpression::FragmentInfo Fragment,
-                                        ValueOrMetadata *Desc) {
   // If there's no size, the type is broken, but that should be checked
   // elsewhere.
-  uint64_t VarSize = getVariableSize(V);
+  uint64_t VarSize = getVariableSize(*V);
   if (!VarSize)
     return;
 
-  unsigned FragSize = Fragment.SizeInBits;
-  unsigned FragOffset = Fragment.OffsetInBits;
+  unsigned FragSize = Fragment->SizeInBits;
+  unsigned FragOffset = Fragment->OffsetInBits;
   AssertDI(FragSize + FragOffset <= VarSize,
-         "fragment is larger than or outside of variable", Desc, &V);
-  AssertDI(FragSize != VarSize, "fragment covers entire variable", Desc, &V);
+         "fragment is larger than or outside of variable", &I, V, E);
+  AssertDI(FragSize != VarSize, "fragment covers entire variable", &I, V, E);
 }
 
 void Verifier::verifyFnArgs(const DbgInfoIntrinsic &I) {

Removed: llvm/trunk/test/Verifier/fragment.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Verifier/fragment.ll?rev=312181&view=auto
==============================================================================
--- llvm/trunk/test/Verifier/fragment.ll (original)
+++ llvm/trunk/test/Verifier/fragment.ll (removed)
@@ -1,19 +0,0 @@
-; RUN: not opt -S <%s 2>&1| FileCheck %s
-
-; CHECK: fragment is larger than or outside of variable
-; CHECK: !DIGlobalVariableExpression(var: ![[VAR:[0-9]+]],
-; CHECK-SAME:                        expr: !DIExpression(DW_OP_LLVM_fragment, 0, 64))
-; CHECK: ![[VAR]] = !DIGlobalVariable(name: "g"
-
- at g = common global i32 0, align 4, !dbg !0
-
-!llvm.dbg.cu = !{!1}
-!llvm.module.flags = !{!6, !7}
-
-!0 = !DIGlobalVariableExpression(var: !3, expr: !DIExpression(DW_OP_LLVM_fragment, 0, 64))
-!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, emissionKind: FullDebug)
-!2 = !DIFile(filename: "a.c", directory: "/")
-!3 = !DIGlobalVariable(name: "g", scope: !1, file: !2, line: 1, type: !5, isLocal: false, isDefinition: true)
-!5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
-!6 = !{i32 2, !"Dwarf Version", i32 4}
-!7 = !{i32 2, !"Debug Info Version", i32 3}




More information about the llvm-commits mailing list