読者です 読者をやめる 読者になる 読者になる

ASSERT: "!newInterval._ranges.isEmpty()" in file compiler\qv4ssa.cpp, line 3780

問題

アプリケーションが QML ロード時に下記のエラーで終了する。

ASSERT: "!newInterval._ranges.isEmpty()" in file compiler\qv4ssa.cpp, line 3780
Invalid parameter passed to C runtime function.
Invalid parameter passed to C runtime function.

f:id:renkin3q:20160425170029p:plain

f:id:renkin3q:20160425192921p:plain

問題の署名:
  問題イベント名:    APPCRASH
  アプリケーション名:  hello_qtquick.exe
  アプリケーションのバージョン:   0.0.0.0
  アプリケーションのタイムスタンプ: 00000000
  障害モジュールの名前:   Qt5Cored.dll
  障害モジュールのバージョン:  5.3.2.0
  障害モジュールのタイムスタンプ:    777a675f
  例外コード:  40000015
  例外オフセット:    0000f69a
  OS バージョン:   6.1.7601.2.1.0.256.48
  ロケール ID:  1041
  追加情報 1:   4d65
  追加情報 2:   4d6520c0dd82340ae2d0dd736fae64aa
  追加情報 3:   57d4
  追加情報 4:   57d421dc8bcfd80514a145b7dac16eae

オンラインのプライバシーに関する声明をお読みください:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0411

オンラインのプライバシーに関する声明が利用できない場合は、プライバシーに関する声明をオフラインでお読みください:
  C:\Windows\system32\ja-JP\erofflps.txt
環境
原因

配列の要素をコピーした変数と、NaN な変数とのビット演算がメソッド内に2つあり、結果を配列へ直接代入しているため。

Rectangle {
    property variant array: [0]

    Component.onCompleted: {
        var x = array;
        var a = x[0];
        var b = NaN;
        if(a & b) x[0] = a & b;
    }
}
解決策
  1. ビット演算の結果を変数に代入する。
Rectangle {
    property variant array: [0]

    Component.onCompleted: {
        var x = array;
        var a = x[0];
        var b = NaN;
        if(a & b) a = a & b;
    }
}
  1. NaN な変数を使わせない。
Rectangle {
    property variant array: [0]

    Component.onCompleted: {
        var x = array;
        var a = x[0];
        var b = NaN;
        if(isNaN(b)) b = 0;
        if(a & b) x[0] = a & b;
    }
}