New issue 2926: pypy6.0 AssertionError  if added --objspace-std-withprebuiltint 
option
https://bitbucket.org/pypy/pypy/issues/2926/pypy60-assertionerror-if-added-objspace

zhang yao:

Hello, We are using pypy6.0 for our project, But when we turn on the 
withprebuiltin translation-option, there is a certain probability that a crash 
will occur. 

```
#!python

RPython traceback:
  File "rpython_jit_metainterp_10.c", line 43844, in send_bridge_to_backend
  File "rpython_jit_backend_x86_3.c", line 28386, in 
Assembler386_assemble_bridge
  File "rpython_jit_backend_x86.c", line 5467, in Assembler386__assemble
  File "rpython_jit_backend_x86.c", line 11251, in RegAlloc_walk_operations
  File "rpython_jit_backend_x86.c", line 36521, in RegAlloc_consider_jump
  File "rpython_jit_backend_x86_1.c", line 9786, in remap_frame_layout_mixed
  File "rpython_jit_backend_x86_1.c", line 30440, in remap_frame_layout
  File "rpython_jit_backend_x86_1.c", line 23989, in 
MachineCodeBlockWrapper_INSN_MOVSD
  File "rpython_jit_backend_x86.c", line 14167, in _missing_binary_insn
Fatal RPython error: AssertionError
```

Aborted (core dumped)


Then I have tried to summarize a simple  piece of  code,  which is 
reproducible,  running it will definitely crash immediately:

```
#!python

######################################
data = [ 
{"a": 0,  "b": 1,    "c": 2}, 
{"a": 0,  "b": 1.0,  "c": 2}, 
]


def GetTotalScore(score_map):
        totalScore = 0 
        for score in score_map.itervalues():
            totalScore +=  score
        return totalScore

def foo():
    for d in data:
        GetTotalScore(d)

while True:
    foo()

######################################
```

PS: 
1.My test enviroment and tools :   
OS : Linux  3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 
GNU/Linux
C compiler:  gcc  4.9.2

2.The versions of pypy I tested:
1)pypy 6.0.0 statble released
2)the official default branch src (hg updated to: changeset: 
95388:c8b8ee6787e9, date:Fri Nov 30 16:20:08 2018 +0100)
both of them cause the same crash.


3.My translation script: 
python ../../rpython/bin/rpython --opt=jit --verbose --make-jobs=16 
targetpypystandalone  --objspace-std-withprebuiltint

4.There is no problem  without option:  --objspace-std-withprebuiltint   
We only open this option for testing.


5.Following are similar examples, which are only a little different from the 
code above, but run well all, no crash occured,  these maybe have some 
reference values for delevlop-team to find the problem.
#non-crash-example1:

```
#!python

data = [ 
{"a": 0,  "b": 1,    "c": 2.0}, #"c" value type modified as float
{"a": 0,  "b": 1.0,  "c": 2.0}, #"c" value type modified as float
]
def GetTotalScore(score_map):
        totalScore = 0 
        for score in score_map.itervalues():
            totalScore +=  score
        return totalScore

def foo():
    for d in data:
        GetTotalScore(d)

while True:
    foo()
```


#non-crash-example2:


```
#!python

data = [ 
{"a": 0,  "b": 1.0, "c": 2.0}, #"b" value type modified as float
{"a": 0,  "b": 1,   "c": 2.0}, #"b" value type modified as int
]
def GetTotalScore(score_map):
        totalScore = 0 
        for score in score_map.itervalues():
            totalScore +=  score
        return totalScore

def foo():
    for d in data:
        GetTotalScore(d)

while True:
    foo()

```


#non-crash-example3:


```
#!python

[data = [
{"a": 0,  "b": 1.0},  #item count modified
{"a": 0,  "b": 1},    #item count modified
]
def GetTotalScore(score_map):
        totalScore = 0 
        for score in score_map.itervalues():
            totalScore +=  score
        return totalScore

def foo():
    for d in data:
        GetTotalScore(d)

while True:
    foo()
```



#non-crash-example4:


```
#!python

data = [ 
{"a": 0,  "b": 1.0, "c": 2.0}, 
{"a": 0,  "b": 1,   "c": 2.0}, 
]
def GetTotalScore(score_map):
        totalScore = 0.0  #modify init value type as float
        for score in score_map.itervalues():
            totalScore +=  score
        return totalScore

def foo():
    for d in data:
        GetTotalScore(d)

while True:
    foo()
```




#non-crash-example5:


```
#!python

data = [ 
{"a": 0,  "b": 1.0,    "c": 2.0}, 
{"a": 0,  "b": 1,  "c": 2.0}, 
]
def GetTotalScore(score_map):
        totalScore = 0 
        for score in score_map.values():# modify walking target as list
            totalScore +=  score
        return totalScore

def foo():
    for d in data:
        GetTotalScore(d)

while True:
    foo()
```
Think you.


_______________________________________________
pypy-issue mailing list
pypy-issue@python.org
https://mail.python.org/mailman/listinfo/pypy-issue

Reply via email to