2014-09-05 32 views
10

Yapılandırma, sadece derleme değil, optimizasyon açıksa Delphi 6'yı kullanırken dahili derleyici hatasıyla aşağıdaki hata oluşur. Inc() işlevi yerine ödevi kullanır. Bu bir derleyici hatası mı? Garip kayıt yapıları, orijinal kodun bu minimal örneğe indirgenmesidir.Bu kod bir derleyici hatası nedeniyle oluşturulamıyor mu?

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

Bir iç derleyici hatasının bir hata olduğunu söyleyebilirim, evet. Kod geçerli değilse, en azından doğru bir hata beklersiniz. İnc 'kodunuzda yanlış bir şey olmadığına inanıyorum. Ve eğer optimizasyon olmadan çalışırsa .. – Blorgbeard

+0

Sağlık tipinin * const * 'undan hoşlanmıyor gibi görünüyor. –

+2

Zamanın% 99.99'u, derleyici bir hata olduğunu düşünüyorsanız, öyle değil. Gerçek olanı yakalamak için +1. –

cevap

6

Bkz. bug report #109124. Sorunu Delphi XE'de doğrulayabilirim; Hata raporu Delphi XE4'te düzeltildiğini söylüyor.

+0

@SertacAkyuz Delphi XE'de 'Debug' konfigürasyonunda derleme yapar ancak 'Release' konfigürasyonunda dahili hata C1970 ile başarısız olur. BTW Hata raporunu 'dahili hata C1970' ile buldum. – kludg

+1

@Serge - Bu benim hatam. Yanlış olan ve +1 yorumumu kaldırdım. Afedersiniz. –

+0

C1405'in C1970 ile aynı olmadığını varsayalım, ama bunu yeterince yakın olarak adlandıracağız. –

İlgili konular