7 TMP_FILE_PREFIX
=$
(basename $0).tmp
12 PLATFORM_PATH_SEPARATOR
=';'
13 PLATFORM_AOT_ARGUMENT
=--aot=asmonly
16 PLATFORM_PATH_SEPARATOR
=':'
17 PLATFORM_AOT_ARGUMENT
=--aot
21 MONO_PATH
=$BASEDIR/..
/..
/mcs
/class
/lib
/$DEFAULT_PROFILE$PLATFORM_PATH_SEPARATOR$BASEDIR
22 RUNTIME
=$BASEDIR/..
/..
/runtime
/mono-wrapper
24 trap "rm -rf ${TMP_FILE_PREFIX}*" EXIT
27 mktemp .
/${TMP_FILE_PREFIX}XXXXXX
31 rm -rf *.exe.so
*.exe.dylib
*.exe.dylib.dSYM
*.exe.dll
*.exe.s
34 # The test compares the generated native code size between a compilation with and without seq points.
35 # In some architectures ie:amd64 when possible 32bit instructions and registers are used instead of 64bit ones.
36 # Using MONO_DEBUG=single-imm-size avoids 32bit optimizations thus mantaining the native code size between compilations.
40 MONO_PATH
=$1 $2 -v --compile-all=1 $3 |
grep '^Method .*code length' |
sed 's/emitted[^()]*//' |
sort
41 return ${PIPESTATUS[0]}
44 MONO_PATH
=$1 $2 -v $PLATFORM_AOT_ARGUMENT $3 |
grep '^Method .*code length' |
sed 's/emitted[^()]*//' |
sort
45 return ${PIPESTATUS[0]}
51 MONO_VERBOSE_METHOD
="$4" MONO_PATH
=$1 $2 --compile-all=1 $3 |
sed 's/0x[0-9a-fA-F]*/0x0/g'
52 return ${PIPESTATUS[0]}
55 MONO_VERBOSE_METHOD
="$4" MONO_PATH
=$1 $2 $PLATFORM_AOT_ARGUMENT $3 |
sed 's/0x[0-9a-fA-F]*/0x0/g'
56 return ${PIPESTATUS[0]}
63 echo "$(MONO_DEBUG=no-compact-seq-points,single-imm-size get_methods $1 $2 $3 $4 || echo Non-zero exit code for file1: $?)" >$TMP_FILE1
64 echo "$(MONO_DEBUG=single-imm-size get_methods $1 $2 $3 $4 || echo Non-zero exit code for file2: $?)" >$TMP_FILE2
65 diff $TMP_FILE1 $TMP_FILE2
71 echo "$(MONO_DEBUG=no-compact-seq-points,single-imm-size get_method $1 $2 $3 $4 $5)" >$TMP_FILE1
72 echo "$(MONO_DEBUG=single-imm-size get_method $1 $2 $3 $4 $5 | grep -Ev il_seq_point)" >$TMP_FILE2
73 sdiff -w 150 $TMP_FILE1 $TMP_FILE2
77 echo $1 |
sed -E 's/.*Method (\([^)]*\) )?([^ ]*).*/\2/g'
80 get_method_length
() {
81 echo $1 |
sed 's/.*code length \([0-9]*\).*/\1/'
84 if [ -z $USE_AOT ]; then
85 echo "Checking unintended native code changes in $TEST_FILE without AOT"
87 echo "Checking unintended native code changes in $TEST_FILE with AOT"
92 echo "$(diff_methods $MONO_PATH $RUNTIME $TEST_FILE $USE_AOT)" > $TMP_FILE
100 if [ "$line" != "" ]; then
102 if [[ "$line" == *"Non-zero exit code"* ]]; then
104 elif [[ ${line:0:1} == "<" ]]; then
105 CHANGES
=$
((CHANGES
+1))
106 SIZE
=$
(get_method_length
"$line")
107 if [[ SIZE
-lt MIN_SIZE
]]; then
115 TESTRESULT_FILE
=TestResult-op_il_seq_point.tmp
117 echo -n " <test-case name=\"MonoTests.op_il_seq_point.${TEST_FILE}${USE_AOT}\" executed=\"True\" time=\"0\" asserts=\"0\" success=\"" >> $TESTRESULT_FILE
121 echo "False\">" >> $TESTRESULT_FILE
122 echo " <failure>" >> $TESTRESULT_FILE
123 echo -n " <message><![CDATA[" >> $TESTRESULT_FILE
124 echo "Mono failed on $TEST_FILE" >> $TESTRESULT_FILE
125 echo "]]></message>" >> $TESTRESULT_FILE
126 echo " <stack-trace>" >> $TESTRESULT_FILE
127 echo " </stack-trace>" >> $TESTRESULT_FILE
128 echo " </failure>" >> $TESTRESULT_FILE
129 echo " </test-case>" >> $TESTRESULT_FILE
131 elif [ $CHANGES != 0 ]
133 METHOD_NAME
=$
(get_method_name
"$METHOD")
135 echo "False\">" >> $TESTRESULT_FILE
136 echo " <failure>" >> $TESTRESULT_FILE
137 echo -n " <message><![CDATA[" >> $TESTRESULT_FILE
138 echo "Detected OP_IL_SEQ_POINT incompatibility on $TEST_FILE" >> $TESTRESULT_FILE
139 echo " $CHANGES methods differ when sequence points are enabled." >> $TESTRESULT_FILE
140 echo ' This is probably caused by a runtime optimization that is not handling OP_IL_SEQ_POINT' >> $TESTRESULT_FILE
141 echo '' >> $TESTRESULT_FILE
142 echo "Diff $METHOD_NAME" >> $TESTRESULT_FILE
143 echo "Without IL_OP_SEQ_POINT With IL_OP_SEQ_POINT" >> $TESTRESULT_FILE
144 echo -n "$(diff_method $MONO_PATH $RUNTIME $TEST_FILE $METHOD_NAME $USE_AOT)" >> $TESTRESULT_FILE
145 echo "]]></message>" >> $TESTRESULT_FILE
146 echo " <stack-trace>" >> $TESTRESULT_FILE
147 echo " </stack-trace>" >> $TESTRESULT_FILE
148 echo " </failure>" >> $TESTRESULT_FILE
149 echo " </test-case>" >> $TESTRESULT_FILE
152 echo "Detected OP_IL_SEQ_POINT incompatibility on $TEST_FILE"
153 echo " $CHANGES methods differ when sequence points are enabled."
154 echo ' This is probably caused by a runtime optimization that is not handling OP_IL_SEQ_POINT'
157 echo "Diff $METHOD_NAME"
158 echo "Without IL_OP_SEQ_POINT With IL_OP_SEQ_POINT"
159 echo "$(diff_method $MONO_PATH $RUNTIME $TEST_FILE $METHOD_NAME $USE_AOT)"
162 echo "True\" />" >> $TESTRESULT_FILE