<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/60148>60148</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [DebugInfo] "fragment is larger than or outside of variable" assert after -globalopt
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            debuginfo
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            OCHyams
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          mcinally
      </td>
    </tr>
</table>

<pre>
    @OCHyams 

The following commit appears to have introduced a DebugInfo regression:

```
commit e1b3d7ab44e19d5a67f9d1a05ea503d23b4c0dd5
Author: OCHyams <orlando.hyams@sony.com>
Date:   Wed Oct 26 17:15:02 2022 +0100

 Account for memory locations in DIExpression::createFragmentExpression
 
    createFragmentExpression rejects expressions containing certain ops, like
    DW_OP_plus, that may cause the expression to compute a value that can't be
    split.
    
    Teach createFragmentExpression that the value loaded from an address computed
    using those ops is safe to split.
    
    Update a unittest to account for and test this change.
    
    Reviewed By: StephenTozer
    
    Differential Revision: https://reviews.llvm.org/D136243
```

Here is a small reproducer. The failure originates in -globalopt:

```
[scrubbed src]$ cat test.ll
source_filename = "test.ll"
target datalayout = "e-p:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

%struct.BSS1.0.1.2.3.4.5.6.8.9.17 = type <{ [16 x i8] }>

@.BSS1 = internal global %struct.BSS1.0.1.2.3.4.5.6.8.9.17 zeroinitializer, align 32, !dbg !0, !dbg !7
@.C317_MAIN_ = external dso_local constant i32
@.C310_MAIN_ = external dso_local constant i32
@.C308_MAIN_ = external dso_local constant [8 x i8]
@.C307_MAIN_ = external dso_local constant i32
@.C283_MAIN_ = external dso_local constant i32
@llvm.global_ctors = external global [3 x { i32, ptr, ptr }]

define dso_local void @MAIN_() #0 !dbg !2 {
L.entry:
  %0 = mul i32 1, 1000
  store i32 %0, ptr getelementptr inbounds (%struct.BSS1.0.1.2.3.4.5.6.8.9.17, ptr @.BSS1, i64 0, i32 0, i64 12), align 4
  %1 = load i32, ptr getelementptr inbounds (%struct.BSS1.0.1.2.3.4.5.6.8.9.17, ptr @.BSS1, i64 0, i32 0, i64 12), align 4
  unreachable
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare void @llvm.dbg.value(metadata, metadata, metadata) #1

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare void @llvm.dbg.declare(metadata, metadata, metadata) #1

attributes #0 = { "frame-pointer"="all" }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!llvm.module.flags = !{!15, !16}
!llvm.dbg.cu = !{!4}

!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "bb1", scope: !2, file: !3, type: !9, isLocal: true, isDefinition: true)
!2 = distinct !DISubprogram(name: "test", scope: !4, file: !3, line: 1, type: !13, scopeLine: 1, spFlags: DISPFlagDefinition | DISPFlagMainSubprogram, unit: !4)
!3 = !DIFile(filename: "scrubbed", directory: "/scrubbed")
!4 = distinct !DICompileUnit(language: DW_LANG_Fortran90, file: !3, producer: " scrubbed", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !5, retainedTypes: !5, globals: !6, imports: !5)
!5 = !{}
!6 = !{!0, !7}
!7 = !DIGlobalVariableExpression(var: !8, expr: !DIExpression(DW_OP_plus_uconst, 8))
!8 = distinct !DIGlobalVariable(name: "bb2", scope: !2, file: !3, type: !9, isLocal: true, isDefinition: true)
!9 = !DICompositeType(tag: DW_TAG_array_type, baseType: !10, size: 64, align: 32, elements: !11)
!10 = !DIBasicType(name: "integer", size: 32, align: 32, encoding: DW_ATE_signed)
!11 = !{!12}
!12 = !DISubrange(lowerBound: 1, upperBound: 2)
!13 = !DISubroutineType(cc: DW_CC_program, types: !14)
!14 = !{null}
!15 = !{i32 2, !"Dwarf Version", i32 4}
!16 = !{i32 2, !"Debug Info Version", i32 3}

[scrubbed src]$ opt test.ll -passes='globalopt' -S
fragment is larger than or outside of variable
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression(DW_OP_plus_uconst, 8, DW_OP_LLVM_fragment, 96, 32))
!1 = distinct !DIGlobalVariable(name: "bb2", scope: !2, file: !3, type: !9, isLocal: true, isDefinition: true)
LLVM ERROR: Broken module found, compilation aborted!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: opt test.ll -passes=globalopt -S
 #0 0x000055fa5181cf48 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scrubbed/bin/opt+0x1b1af48)
 #1 0x000055fa5181aebe llvm::sys::RunSignalHandlers() (/scrubbed/bin/opt+0x1b18ebe)
 #2 0x000055fa5181d6dd SignalHandler(int) Signals.cpp:0:0
 #3 0x0000151df7576b20 __restore_rt sigaction.c:0:0
 #4 0x0000151df683137f raise (/lib64/libc.so.6+0x3737f)
 #5 0x0000151df681bdb5 abort (/lib64/libc.so.6+0x21db5)
 #6 0x000055fa517ad27c llvm::report_fatal_error(llvm::Twine const&, bool) (/scrubbed/bin/opt+0x1aab27c)
 #7 0x000055fa517ad0a6 (/scrubbed/bin/opt+0x1aab0a6)
 #8 0x000055fa5122342c (/scrubbed/bin/opt+0x152142c)
 #9 0x000055fa5032e92d llvm::detail::PassModel<llvm::Module, llvm::VerifierPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scrubbed/bin/opt+0x62c92d)
#10 0x000055fa511fb7d7 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/scrubbed/bin/opt+0x14f97d7)
#11 0x000055fa503268d7 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/scrubbed/bin/opt+0x6248d7)
#12 0x000055fa50334c13 main (/scrubbed/bin/opt+0x632c13)
#13 0x0000151df681d493 __libc_start_main (/lib64/libc.so.6+0x23493)
#14 0x000055fa5031ed5e _start (/scrubbed/bin/opt+0x61cd5e)
Aborted (core dumped)
```

I am certainly not a DebugInfo expert, but it appears that the offset and size calculations are incorrect for bb2 after -globalopt runs.

This issue affects hundreds of our in-house tests, so pulling/fixing the patch would be greatly appreciated.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUWV9z2ziS_zT0S5dVJEiK0oMfZCmaSV2yScXemUcVSDQl7IAACwBtaz79VYOURDpyksntzd1W2SIJNLp_jf6DBsCdk3uNeBfl9xFjn9a_HnnjIsaifHPDO38w9q6ppOZKHW9KI453URYPVBDFmyhe9b-PB4TaKGWepd5DZZpGeuBti9w68AYO_AlBam-N6CoUwGGDZbd_r2sDFvcWnZNGR-lqzDSax8Nf-By4YlKmouBllmGyFDmfF_VSJDzOkedxKlhaZlUsRN4PWgUlonQFZ9jp2ljFtTCzQ9A2i53Rx1llmih914_acI80BuB3FPCp8sDmkBRRukryKF3FDFjMGETsPk7ieIwZVlVlOu2hNhYabIw9gjIV99JoB1LD5v27l3akb7qqLHKPW8v3DWo_6u0ZDg8AeIsQLP4LK-8Az00OKqM9lzqYAy29gmldxNag5B94Ybr5fffp865VXejzB-6h4UeoeOcQ_AFHTMmQlWnaziNweOKqw35AxXXECg_liK9rlfSzy_fl7RF5dXhbmcCRBPcClOECBdTWNMA1cCGI8IRDXNh2jnT1B-OQNAXpwPEaCfTbWP7ZCh606bT0Hp0ncj4yIdcC-vaDdFAduN7jVU5f8EniMwq4P5LnPHhsD6gfzZ9or5FvZF2jRe0lV2Hs4A9w8L515BhsG7GtDVzdTKmnZmbsPmLbTZLOWZZeDZH-91e0SOpzcA1XCiy2fdzZGYRA5VJ1FsFYuZeaewyOebtXpuTKtP7bYRjl966yXVmiAGerKN9ELIOKjIbOz5TqyZzpbIW7WirUvEGI0g1EjJ1oGOvJPLd79CC454ofTedPhHjbRulqnoWfW3l6qRcxRSFb3OoFvcyjdJWyvu8hYYvXjL2VrTpLf1nMd_Pstq1uldTdy-1ed-cBwy_Lnbdd5Wf3Dw_JLJ4lMzZLZ9ksn81ni9lylhSBmT-2xHUdFfcQ5ffJHF5ALqJ8A1GxOeeR4TeLA7cwUGqPVnMF_XTDjwj8E62RWpKvSPIntgau5F5Dyug9Yoko9_SIp5_FRf46TYrdx9X7f-wCCnwZUAhndpSfFCUM57n2IFM2GRf_3Lh48YPjovx-cZq9CYOfA8wW6U-MCwHWm2RXeWPddPTJWPl9Ci9ARpf93LfeDo9g-LMG4VdgLTWORD8ZKSDK4oAvIm9dQsTSeGQzRtz74R9mqL09nsMRyFniAKzpFCGAhIQn8WkNAnDeUPCnLNCeoO3Ro0JKtPQldWk6LRwEBN91v7N-gxvTt5xnELiTpPjUkrCILS_emY1g985PyXw0c__XuDptaS3ipRoWLjLhOHDTe9h2uqLFG1beW0rMoMmUquTVH6BNbRFBG3fUFWjT6WepBbgWq05xT4zhWSpl0XdWD_VAxBbaaCRIg5dUils8O0dwRVHuZ2EBjNiiQc8pQZIG19-DFyX_j6APHT8JnntvZdnRwtRHB2VvSrSM1ZY3eNuakEYpd6ebiDEeVhQ4m2_KIDkz-PfpD69dhSVB-caITuGsVnzvhlUnoYBmSZIPyTmZX8YOo2jKqm5Kn30tIT5RbN7_EhLSb9xKQjoqGtniiYd6lySRRKrfhu9J7Rmyz9mSRB24C-m81JW_JobU5w323FhZJmQAtgZXmXZoTUIDrfrDdxrKyuO5P8ShdB_IEtTkLfk4NW0oW0o_1EF9-wUdu4LuoStba_aWN1NkVGRcgZZdg6akDt_JK5x9bxj-YUzi2i3Zlr437x8-08cFOETF-tz8kUs9RrgOReYFy0W39GLXrQzTfCqbBoVOBdeglJAWaZE6Dt0R204oLpyzK7O2Nk0rFf6TwLCF4nrf8X2QtPl992H1j192W2O95XoZX5uwUy05yIZX2KT71HrZyD9REEXNlQv2tZ32ssHf0J4q3cAdGxnc8b-kDvTbTqmwNQydumvcIDtEj0XayKB4PLY46ejX51PTPABpWmP9iOoyK_k40kaxOJ9G4KmaKsY0xV-MwcW3Y_Cy_dp1oTAh8teRufjLkcn-xshcXmaEXMs46ZEMFLGF5_vBrx5Xv-y4tfy4CxLZGkruerIh3sJsO_lnaJhn5-WaPvuKYSgVTial9DbKXqPkeM-drAYIo2mhNWPfrxojUT3v16J0ZYTUJ_Srx3e7cFIiJiKTVxmejR1lyFinRGVp50jxZp7R3lOdc04pXduOmibxO04NxMR0XurT7FbVAG-93o2yjB8FxzTPDOmgB6w7pSZ4x1FB5dNpbxExtnnmtoZT7A6BnjLIJgzm32BAIQ3huOdrLunrle7qDtO05x0m3LbcOVJyE7Hism9lBdw-9Dzq4WCB9sGKtoIW_IFrMBZM550UCKaGp1P4_C-tsG9F93o4dvnw4bePuxNUal6G1JWy__HS_LclAFIB3n358ukLdd1b8wdq6KsgqINPs3U4rZEqHIIBL431FEhDyff5w7vVwztwXRnODIEcxSLl7nBwODkO2Ut_6MpwVMe2VDkNj9vWmn9h5SO2lc516CK2DUc3UleqE_1BVmW5OwAVf97y6nSK8-CpGhRd0573WfEsipef-4ACbvfdOetc98GzA569ry9b45c4juM8r3meLJKqzhYQMIdTP3d0_ctnK7UPKB4JFqWIM5HlzzvjvEWK7H5VIz9Z9juk0aK_LaWO2DYEwX38kpQJr7PF2Uh9FTzFw7HEa3i-dPpB7jVXv3ItFFp33qd-T-QCS5yIZK9EirkQMGEescWgUd_sZlVLhojD_5lROjBK8kTURV7MSxbDbmcxbHd31oOTex42O7Pq6-HZePh8kSZpUYPl0uGglZIlrTj0rGbOzOZBpbRIi3qiUD5llJSizHuH_iYj2tznE0bzycwUXLCiGhmj9_9dzT1XO7TW2IlbPD5LjTAklOAWpTHqR4zEecmKagKleA0l5vMf4RPz-YTPYsKHsTRj1Xf55CzJ2BTPcswnThkumRhNjaASUA2hw537aASqKF1fKD6G5BNq-3Pbb2hlLdHSiGnPZ4sO7ROKlebqSAE96e5bpfvINafa4Yqg9F34C3br9MRQJyjzn2FKo75r0TmrlmxclaTJNPEkdVmIYqwwTdrbgv-jtE-yelmIYqJ-8sp_5ouJ-rbTNAOfZYth6zcG_OCt1PsvWE8Bv6HHYzhh_sirQ-Czutb7QZaW2yMVPu-bVn1NZYz61Pm28_3G79_a_YY6KyrDqXU88WFOVLeXOkz-mN60fucpv4SvXl7Yrn2D6hRvJ7o-P_3o8we8Plu8Mjubmj3NqiSFhkv9XV4pq6gUGvFKX6V5kS1T2O0oqe-c59bvRozfSPlptpwyzaYAExQ5Qs_uuxCTSuSXpXXVV1A0qjIWQ_Ey3plcuxN6D7w5XQSqI2jjJ3ew-NKiDRVo2XkY392ebuNMXTv0oaiinRNUXIWDsnDZyC1SqWWsxaq_NytLBrz2aEf3SmA77WbTa2PpIFRswOs63GEeOi0sCkflueksSH17MOEuEp0PydkZaDulaHfGtrV86a_9EFruqwM8m04JKBH2FrlXR9LEYiW5RzG7EXepWKZLfoN3ybzIkixfLpY3hzvB4yROqirOsrxGFleijotC8LpYlMt5wW_kHYtZGifJMpmnabycLcpaFGy5WBbLPM0TjLIYGy7V-aruJuh1N4-TbHGjeInKDdfsgqZd6toMF-32LtSwZbd3URYr6fzlwu_GS6_C_fzZWOGSKZyE_pUdDmNA9ar1X5nlprPq7ufr7KDgfwcAAP__rp6YdQ">