On Thu, May 23, 2002 at 10:44:20PM +0200, Felix K�hling wrote:
>Hi,
>
>I had trouble when compiling DRI with g++ 3.0.4 and -O3 related to
>function inlining. The function swap is declared static globally in
>quicksort.cc. In function quicksort it is redeclared. The redeclaration
>prevents g++ from inlining the swap function. Instead it emits function
>calls. In contrast to g++ 2.95 the 3.0.4 compiler did not keep a copy of
>swap. I assume that it does not relate the global and the local
>declaration to the same function. This leads to an undefined symbol as
>soon as a program using libGLU (like TuxRacer) was started.
>
>The fix is simple. Just leave out the useless local redeclaration of
>swap. This allows inlining the swap function in both 2.95 and 3.0.4.
>Note I checked all this in the assembler output. I'm just not sure
>whether the problem should be regarded a g++ bug or not.
Here's the patch used in the XFree86 CVS:
David
--
--- quicksort.cc 2001/01/15 21:48:59 1.1.1.1
+++ quicksort.cc 2002/01/23 17:06:18 1.2
@@ -58,7 +61,6 @@
int (*comp) (void *, void *))
{
int i, last;
- void swap(void *v[], int , int);
if(left >= right) /*do nothing if array contains */
return; /*fewer than two elements*/
@@ -72,7 +74,7 @@
quicksort(v, last+1, right, comp);
}
-void swap(void *v[], int i, int j)
+static void swap(void *v[], int i, int j)
{
void *temp;
temp = v[i];
_______________________________________________________________
Don't miss the 2002 Sprint PCS Application Developer's Conference
August 25-28 in Las Vegas -- http://devcon.sprintpcs.com/adp/index.cfm
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel