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.

Reply via email to