2014-09-05 5 views
10

बिल्डिंग, न केवल संकलन, निम्नलिखित ऑप्टिमाइज़ेशन चालू होने पर डेल्फी 6 का उपयोग करते समय आंतरिक कंपाइलर त्रुटि के साथ विफल रहता है। Inc() कार्यों के बजाय असाइनमेंट का उपयोग करना। क्या यह एक कंपाइलर बग है? अजीब रिकॉर्ड संरचनाएं इसलिए हैं क्योंकि मूल कोड को इस न्यूनतम उदाहरण में कम कर दिया गया है।क्या यह कोड एक कंपाइलर बग के कारण निर्माण करने में विफल रहता है?

program Project1; 

type 
    requestCountsType = array[0..1] of 
    record 
    processed: int64; 
    end; 

    talliestype = record 
    counts: requestCountsType; 
    end; 

    healthtype = record 
    charged: talliestype; 
    end; 

procedure computeProcessed(const h: healthtype; var requests, bytesin, bytesout: int64); 
var i: byte; 
begin 
requests := 0; bytesin := 0; bytesout := 0; 
for i := 0 to 1 do 
    begin 
    inc(requests, h.charged.counts[i].processed); // including this generates compiler internal error C1405 when optimization is on 
    // requests := requests + h.charged.counts[i].processed; // this works 
    end; 
end; 

var ht: healthtype; var r, b1, b2: int64; 

begin 
computeProcessed(ht, r, b1, b2); 
end. 
+2

मैं कहूंगा कि एक आंतरिक कंपाइलर त्रुटि एक बग है, हां। यदि कोड मान्य नहीं था, तो आप कम से कम एक उचित त्रुटि की उम्मीद करेंगे। मेरा मानना ​​है कि आपके 'inc' कोड में कुछ भी गलत नहीं है। और अगर यह अनुकूलन के बिना काम करता है .. – Blorgbeard

+0

लगता है कि यह स्वास्थ्य प्रकार के * const * पसंद नहीं है। –

+2

उस समय 99.99%, यदि आपको लगता है कि यह एक कंपाइलर बग है, तो यह नहीं है। एक असली पकड़ने के लिए +1। –

उत्तर

6

bug report #109124 देखें। मैं डेल्फी एक्सई में समस्या की पुष्टि कर सकता हूं; बग रिपोर्ट का कहना है कि इसे डेल्फी एक्सई 4 में तय किया गया था।

+0

@SertacAkyuz यह 'डेबग' कॉन्फ़िगरेशन में डेल्फी एक्सई में संकलित है लेकिन आंतरिक त्रुटि C1970 के साथ 'रिलीज' कॉन्फ़िगरेशन में विफल रहता है। बीटीडब्ल्यू मुझे 'आंतरिक त्रुटि C1970' googling द्वारा बग रिपोर्ट मिली है। – kludg

+1

@ सर्ज - यह मेरी गलती है। मेरी टिप्पणी हटा दी गई जो गलत थी और +1। माफ़ कीजिये। –

+0

मुझे लगता है कि सी 1405 सी 1 9 70 जैसा नहीं है, लेकिन हम इसे काफी करीब कॉल करेंगे। –

संबंधित मुद्दे