- 
                Notifications
    You must be signed in to change notification settings 
- Fork 13.9k
          Always error on SizeOverflow during mir evaluation
          #63152
        
          New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
          
     Merged
      
      
    
  
     Merged
                    Changes from all commits
      Commits
    
    
            Show all changes
          
          
            13 commits
          
        
        Select commit
          Hold shift + click to select a range
      
      83b5eb9
              
                Always error on `SizeOverflow` during mir evaluation
              
              
                estebank 58bd878
              
                Do not lint on SizeOverflow, always error
              
              
                estebank d3da411
              
                Nicer labels for type layout errors
              
              
                estebank 2c56842
              
                avoid mutable state and override main message
              
              
                estebank db099fb
              
                Point to local place span on "type too big" error
              
              
                estebank 2340067
              
                Simplify change to layout_of
              
              
                estebank 387dcff
              
                review comments: clean up
              
              
                estebank bdd79b8
              
                tweak output and tests
              
              
                estebank f621f89
              
                revert change to single test
              
              
                estebank ce8510a
              
                fix tests
              
              
                estebank 613c0a8
              
                move error with diverging output to compile-fail
              
              
                estebank 64469ac
              
                review comments
              
              
                estebank 3144b0a
              
                review comment: reword test comment
              
              
                estebank File filter
Filter by extension
Conversations
          Failed to load comments.   
        
        
          
      Loading
        
  Jump to
        
          Jump to file
        
      
      
          Failed to load files.   
        
        
          
      Loading
        
  Diff view
Diff view
There are no files selected for viewing
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
            File renamed without changes.
          
    
            File renamed without changes.
          
    
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| // normalize-stderr-64bit "18446744073709551615" -> "SIZE" | ||
| // normalize-stderr-32bit "4294967295" -> "SIZE" | ||
|  | ||
| // error-pattern: is too big for the current architecture | ||
| fn main() { | ||
| println!("Size: {}", std::mem::size_of::<[u8; std::u64::MAX as usize]>()); | ||
| } | ||
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| // ignore-64bit | ||
|  | ||
| // FIXME https://github.com/rust-lang/rust/issues/59774 | ||
| // normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> "" | ||
| // normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> "" | ||
| #![allow(exceeding_bitshifts)] | ||
|  | ||
| fn main() { | ||
| let _fat: [u8; (1<<31)+(1<<15)] = //~ ERROR too big for the current architecture | ||
| [0; (1u32<<31) as usize +(1u32<<15) as usize]; | ||
| } | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| error: the type `[u8; 2147516416]` is too big for the current architecture | ||
| --> $DIR/huge-array-simple-32.rs:9:9 | ||
| | | ||
| LL | let _fat: [u8; (1<<31)+(1<<15)] = | ||
| | ^^^^ | ||
|  | ||
| error: aborting due to previous error | ||
|  | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| // ignore-32bit | ||
|  | ||
| // FIXME https://github.com/rust-lang/rust/issues/59774 | ||
| // normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> "" | ||
| // normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> "" | ||
| #![allow(exceeding_bitshifts)] | ||
|  | ||
| fn main() { | ||
| let _fat: [u8; (1<<61)+(1<<31)] = //~ ERROR too big for the current architecture | ||
| [0; (1u64<<61) as usize +(1u64<<31) as usize]; | ||
| } | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| error: the type `[u8; 2305843011361177600]` is too big for the current architecture | ||
| --> $DIR/huge-array-simple-64.rs:9:9 | ||
| | | ||
| LL | let _fat: [u8; (1<<61)+(1<<31)] = | ||
| | ^^^^ | ||
|  | ||
| error: aborting due to previous error | ||
|  | 
This file was deleted.
      
      Oops, something went wrong.
      
    
  This file was deleted.
      
      Oops, something went wrong.
      
    
  
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -1,4 +1,8 @@ | ||
| error: the type `[[u8; 1518599999]; 1518600000]` is too big for the current architecture | ||
| --> $DIR/huge-array.rs:6:9 | ||
| | | ||
| LL | let s: [T; 1518600000] = [t; 1518600000]; | ||
| | ^ | ||
|  | ||
| error: aborting due to previous error | ||
|  | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -1,4 +1,8 @@ | ||
| error: the type `TYPE` is too big for the current architecture | ||
| --> $DIR/huge-enum.rs:15:9 | ||
| | | ||
| LL | let big: BIG = None; | ||
| | ^^^ | ||
|  | ||
| error: aborting due to previous error | ||
|  | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -1,4 +1,8 @@ | ||
| error: the type `SXX<SXX<SXX<u32>>>` is too big for the current architecture | ||
| --> $DIR/huge-struct.rs:49:9 | ||
| | | ||
| LL | let fat: Option<SXX<SXX<SXX<u32>>>> = None; | ||
| | ^^^ | ||
|  | ||
| error: aborting due to previous error | ||
|  | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| // ignore-64bit | ||
|  | ||
| // FIXME https://github.com/rust-lang/rust/issues/59774 | ||
| // normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> "" | ||
| // normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> "" | ||
|  | ||
| fn main() { | ||
| let x = [0usize; 0xffff_ffff]; //~ ERROR too big | ||
| } | ||
|  | ||
| // This and the -64 version of this test need to have different literals, as we can't rely on | ||
| // conditional compilation for them while retaining the same spans/lines. | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| error: the type `[usize; 4294967295]` is too big for the current architecture | ||
| --> $DIR/issue-15919-32.rs:8:9 | ||
| | | ||
| LL | let x = [0usize; 0xffff_ffff]; | ||
| | ^ | ||
|  | ||
| error: aborting due to previous error | ||
|  | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| // ignore-32bit | ||
|  | ||
| // FIXME https://github.com/rust-lang/rust/issues/59774 | ||
| // normalize-stderr-test "thread.*panicked.*Metadata module not compiled.*\n" -> "" | ||
| // normalize-stderr-test "note:.*RUST_BACKTRACE=1.*\n" -> "" | ||
|  | ||
| fn main() { | ||
| let x = [0usize; 0xffff_ffff_ffff_ffff]; //~ ERROR too big | ||
| } | ||
|  | ||
| // This and the -32 version of this test need to have different literals, as we can't rely on | ||
| // conditional compilation for them while retaining the same spans/lines. | 
      
      Oops, something went wrong.
        
    
  
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the error here for 32bit vs 64bit, that this cannot be handled by normalization?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing a span from (at least) one specific target that is present in others:
vs
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's extremely odd, isn't it?
Normalization could still handle this -- or you use the two-test-cases approach with
ignore-32bitandignore-64bit? AFAIKcompile-failis on the way out.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The divergence is not due to 32bit vs 64bit, it's because the
dist-i586-gnu-i586-i686-muslrustcseems to be packaged slightly different than the other targets, so we misscoreandstdinformation to point spans to. Adding this info was a relatively recent improvement from the last year.I agree that
compile-failshould be discouraged, but short of waiting for us to fix the packaging issue I don't see a good solution to this.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh I see.
Is it possible to ignore musl targets, or so?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is but I have no way of knowing a priori wether this is a
musl-only discrepancy or not.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not super happy about adding more compile-fail tests, but oh well... :)