Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: llvm/llvm-project
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: release/18.x
Choose a base ref
...
head repository: chapuni/llvm-project
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: release/18.x
Choose a head ref
  • 3 commits
  • 5 files changed
  • 3 contributors

Commits on May 21, 2024

  1. [Coverage] Rework !SystemHeadersCoverage (#91446)

    - Introduce `LeafExprSet`,
      - Suppress traversing LAnd and LOr expr under system headers.
    - Handle LAnd and LOr as instrumented leaves to override
    `!isInstrumentedCondition(C)`.
    - Replace Loc with FileLoc if it is expanded with system headers.
    
    Fixes #78920
    
    llvmorg-19-init-11775-g702a2b627ff4
    chapuni committed May 21, 2024
    Configuration menu
    Copy the full SHA
    6a7700a View commit details
    Browse the repository at this point in the history
  2. Fix test for non-Itanium ABIs.

    This amends 702a2b6 to hopefully get
    the test passing for Windows again.
    
    llvmorg-19-init-11817-g3591da9f1ccb
    AaronBallman authored and chapuni committed May 21, 2024
    Configuration menu
    Copy the full SHA
    24bda49 View commit details
    Browse the repository at this point in the history

Commits on May 27, 2024

  1. [Coverage][Expansion] handle nested macros in scratch space (#89869)

    The problematic program is as follows:
    
    ```shell
    
    void f(void) {
        PRE(a) && 0;
    }
    
    int main(void) { return 0; }
    ```
    
    in which after token concatenation (`##`), there's another nested macro
    `pre_a`.
    
    Currently only the outer expansion region will be produced. ([compiler
    explorer
    link](https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:___c,selection:(endColumn:29,endLineNumber:8,positionColumn:29,positionLineNumber:8,selectionStartColumn:29,selectionStartLineNumber:8,startColumn:29,startLineNumber:8),source:'%23define+pre_a+0%0A%23define+PRE(x)+pre_%23%23x%0A%0Avoid+f(void)+%7B%0A++++PRE(a)+%26%26+0%3B%0A%7D%0A%0Aint+main(void)+%7B+return+0%3B+%7D'),l:'5',n:'0',o:'C+source+%231',t:'0')),k:51.69491525423727,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((g:!((h:compiler,i:(compiler:cclang_assertions_trunk,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'0',intel:'0',libraryCode:'1',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:2,lang:___c,libs:!(),options:'-fprofile-instr-generate+-fcoverage-mapping+-fcoverage-mcdc+-Xclang+-dump-coverage-mapping+',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+x86-64+clang+(assertions+trunk)+(Editor+%231)',t:'0')),k:34.5741843594503,l:'4',m:28.903654485049834,n:'0',o:'',s:0,t:'0'),(g:!((h:output,i:(compilerName:'x86-64+clang+(trunk)',editorid:1,fontScale:14,fontUsePx:'0',j:2,wrap:'1'),l:'5',n:'0',o:'Output+of+x86-64+clang+(assertions+trunk)+(Compiler+%232)',t:'0')),header:(),l:'4',m:71.09634551495017,n:'0',o:'',s:0,t:'0')),k:48.30508474576271,l:'3',n:'0',o:'',t:'0')),l:'2',m:100,n:'0',o:'',t:'0')),version:4))
    
    ```text
    f:
      File 0, 4:14 -> 6:2 = #0
      Decision,File 0, 5:5 -> 5:16 = M:0, C:2
      Expansion,File 0, 5:5 -> 5:8 = #0 (Expanded file = 1)
      File 0, 5:15 -> 5:16 = #1
      Branch,File 0, 5:15 -> 5:16 = 0, 0 [2,0,0]
      File 1, 2:16 -> 2:23 = #0
      File 2, 1:15 -> 1:16 = #0
      File 2, 1:15 -> 1:16 = #0
      Branch,File 2, 1:15 -> 1:16 = 0, 0 [1,2,0]
    ```
    
    The inner expansion region isn't produced because:
    
    1. In the range-based for loop quoted below, each sloc is processed and
    possibly emit a corresponding expansion region.
    2. For our sloc in question, its direct parent returned by
    `getIncludeOrExpansionLoc()` is a `<scratch space>`, because that's how
    `##` is processed.
    
    https://github.com/llvm/llvm-project/blob/88b6186af3908c55b357858eb348b5143f21c289/clang/lib/CodeGen/CoverageMappingGen.cpp#L518-L520
    
    3. This `<scratch space>` cannot be found in the FileID mapping so
    `ParentFileID` will be assigned an `std::nullopt`
    
    https://github.com/llvm/llvm-project/blob/88b6186af3908c55b357858eb348b5143f21c289/clang/lib/CodeGen/CoverageMappingGen.cpp#L521-L526
    
    4. As a result this iteration of for loop finishes early and no
    expansion region is added for the sloc.
    
    This problem gets worse with MC/DC: as the example shows, there's a
    branch from File 2 but File 2 itself is missing. This will trigger
    assertion failures.
    
    The fix is more or less a workaround and takes a similar approach as
    
    ~~Depends on #89573.~~ This includes #89573. Kudos to @chapuni!
    This and #89573 together fix #87000: I tested locally, both the reduced
    program and my original use case (fwiw, Linux kernel) can run
    successfully.
    
    ---------
    
    Co-authored-by: NAKAMURA Takumi <[email protected]>
    
    llvmorg-19-init-12274-gf9e9e599c013
    whentojump authored and chapuni committed May 27, 2024
    Configuration menu
    Copy the full SHA
    fb5f215 View commit details
    Browse the repository at this point in the history
Loading