https://qa.mandrakesoft.com/show_bug.cgi?id=624
Product: gcc-c++
Component: program
Summary: Quand on essaie de compiler ce programme sous Mandrake
Linux 9.0, le compilateur avoue une erreur interne et
demande un rapport de bogue
Version: 3.2-2mdk
Platform: PC
OS/Version: All
Status: UNCONFIRMED
Severity: normal
Priority: P2
AssignedTo: [EMAIL PROTECTED]
ReportedBy: [EMAIL PROTECTED]
// TraceMatriceDebug.C Re�oit un tableau carr� d'entiers int et calcule la
trace de la matrice correspondante (somme des �l�ments de la diagonale
principale).
// Quand on essaie de compiler ce programme sous Mandrake Linux 9.0, le
compilateur avoue une erreur interne et demande un rapport de bogue.
// Plus pr�cis�ment, voici l'instruction de compilation et la r�ponse du
compilateur :
//[delcour@localhost gcc-lib]$ g++ -Wall -o TraceMatriceDebug
TraceMatriceDebug.C
//TraceMatriceDebug.C: In function `int Trace(int*, int)':
//TraceMatriceDebug.C:42: Internal compiler error in
instantiate_virtual_regs_1, at function.c:3972
//Please submit a full bug report,
//with preprocessed source if appropriate.
//See <URL:https://qa.mandrakesoft.com/> for instructions.
// La cause est �videmment dans une erreur du pr�sent programme, � savoir le "=
0" superflu qui termine une instruction de la fonction Trace.
// (Remarque : d'apr�s les manuels de C++, la taille d'un tableau doit �tre
connue � la compilation, mais le pr�sent programme ne respecte pas cette r�gle
et (quand il est corrig�) fonctionne tout de m�me sous Mandrake Linux 9.0...
Laxisme ou perfectionnement?)
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main()
{ int NbreLignes;
cout << "Tapez le nombre de lignes (qui est aussi le nombre de colonnes) du
tableau carr� que vous d�sirez introduire. Pour renoncer au programme, tapez le
chiffre 0 : ";
cin >> NbreLignes; // Comme NbreLignes sera la taille d'un tableau, on
pourrait croire qu'il faut la d�clarer comme const (avec m�me valeur qu'une
variable re�ue en entr�e), mais le programme (corrig�) fonctionne sans cela
sous Mandrake Linux 9.0 (peut-�tre trop laxiste, je le r�p�te).
if (NbreLignes == 0)
return 0;
int i, j;
int a[NbreLignes][NbreLignes];
for (i = 0; i < NbreLignes; i++)
{ cout << "Tapez la ligne d'indice " << i << " sous forme de " <<
NbreLignes << " nombres entiers s�par�s par des blancs (Pour renoncer au
programme, tapez Ctrl-c si vous �tes dans Linux) :" << endl;
for (j = 0; j < NbreLignes; j++)
cin >> a[i][j];
}
cout << "Voici votre tableau :" << endl;
for (i = 0; i < NbreLignes; i++)
{ for (j = 0; j < NbreLignes; j++)
cout << a[i][j] << " ";
cout << endl;
}
int Trace(int*, int); // prototype
cout << "La trace de votre matrice est " << Trace(&a[0][0], NbreLignes) <<
endl;
return 0;
}
int Trace(int* TableauPtr, int hauteur)
{ int t = 0, r;
for (r= 0; r < hauteur; r++)
// Le " = 0 " qui termine (erron�ment) la ligne qui suit provoque de la part du
compilateur (Mandrake Linux 9.0) un aveu d'erreur interne et la demande d'un
rapport de bogue.
t += *(TableauPtr + r * hauteur + r) = 0;
return t;
}
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.