2013-05-08 7 views
7

इस छोटे कोड दोनों जीसीसी और बजना के साथ संकलित है, लेकिन अलग-अलग परिणाम देता है:क्लैंग में __int128_t के साथ बग?

#include <stdio.h> 

int main(){ 

    __int128_t test=10; 
    while(test>0){ 
    int myTest=(int)test; 
    printf("? %d\n", myTest); 
    test--; 
    } 

} 
जीसीसी के साथ

इस, 1, अभिप्रेत व्यवहार करने के लिए नीचे 10 से गिना जाता है, जबकि बजना के लिए यह नकारात्मक संख्या में गिनती रहती है। क्लैंग के साथ, अगर मैं test-- को test-=1 के साथ प्रतिस्थापित करता हूं तो यह अपेक्षित व्यवहार भी देता है।

__int128_t एक जीसीसी एक्सटेंशन है, इसलिए उपरोक्त परिणाम केवल गैर मानक सी पर लागू होते हैं, इसलिए शायद __int128_t क्लैंग में "अपने जोखिम पर उपयोग करें" है।

क्या यह क्लैंग में एक बग है, या क्या मैंने कुछ गलती की है जिसे मैं नहीं देख रहा हूं?

संपादित करें: मैं जीसीसी उपयोग कर रहा हूँ (MacPorts gcc48 4.8-20130411_0) 4.8.1 20,130,411 (प्री-रिलीज़) और एप्पल बजना संस्करण 4.0 (टैग/एप्पल/बजना-421.0.60) (LLVM 3.1svn के आधार पर) ।

+1

ठीक है, यह वही करता है जो आपने ओएस एक्स 10.7.5 पर जीसीसी 4.2 और क्लैंग 4.0 के साथ समझाया है। –

+1

मेरी मशीन पर ठीक काम करता है, "ऐप्पल एलएलवीएम संस्करण 4.2 (क्लैंग -425.0.28) (एलएलवीएम 3.2 एसवीएन पर आधारित)"। –

+0

@ करल शायद ऐप्पल ने इसे क्लैंग -421.0.60 और क्लैंग -425.0.28 के बीच तय किया। मुझे जांच करने के लिए अद्यतन करना चाहिए। –

उत्तर

8

यह क्लैंग में एक बग था, जिसे ऐप्पल क्लैंग संस्करण 4.0 (टैग/ऐप्पल/क्लैंग -421.0.60) (एलएलवीएम 3.1 एसवीएनएन के आधार पर) और ऐप्पल एलएलवीएम संस्करण 4.2 (क्लैंग -425.0.28) के बीच कहीं हल किया गया था। (एलएलवीएम 3.2 एसवीएन पर आधारित), टिप्पणियां देखें - धन्यवाद कार्ल और एच 2CO3।

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