Uploaded image for project: 'C++ Standard Library'
  1. C++ Standard Library
  2. STDCXX-737

Configure tests might be compiled twice.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 4.1.2, 4.1.3, 4.1.4, 4.2.0
    • 4.2.1
    • Configuration
    • None
    • unix

    • Incorrect Behavior

    Description

      From http://www.nabble.com/forum/Permalink.jtp?root=15579207&post=15593021&page=y :

      I made this change in GNUmakefile because the
      EXTERN_FUNCTION_TEMPLATE.cpp
      config test has compiled twice on my gcc/Linux:

      1) first it was not linked with extern_function_template_imp.o and due
      to this
      the macro _RWSTD_NO_EXTERN_FUNCTION_TEMPLATE is defined in config.h

      config.log:
      ---------
      ...
      gcc -D_RWSTDDEBUG -pthread -I. -pedantic -nostdinc++ -g -W -Wall
      -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long
      -Wcast-align -c
      /usr/src/trunk/etc/config/src/extern_function_template_imp.cpp -o
      extern_function_template_imp.o
      gcc -D_RWSTDDEBUG -pthread -I. -pedantic -nostdinc++ -g -W -Wall
      -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long
      -Wcast-align -c
      /usr/src/trunk/etc/config/src/EXTERN_FUNCTION_TEMPLATE.cpp -o
      EXTERN_FUNCTION_TEMPLATE.o
      gcc EXTERN_FUNCTION_TEMPLATE.o -pthread -lm -lsupc++ -o
      EXTERN_FUNCTION_TEMPLATE
      EXTERN_FUNCTION_TEMPLATE.o(.text+0x26): In function `main':
      /usr/src/trunk/etc/config/src/EXTERN_FUNCTION_TEMPLATE.cpp:47: undefined
      reference to `S<int> foobar<int>(S<int>)'
      collect2: ld returned 1 exit status
      ...
      ---------

      config.h:
      ---------
      ...
      // #define _RWSTD_NO_extern_function_template_imp
      #define _RWSTD_NO_EXTERN_FUNCTION_TEMPLATE
      ...
      ---------

      2) second it was linked with extern_function_template_imp.o and the
      config.h contains the second entry, where
      _RWSTD_NO_EXTERN_FUNCTION_TEMPLATE define is commented

      config.log:
      ---------
      ...gcc -D_RWSTDDEBUG -pthread -I. -pedantic -nostdinc++ -g -W -Wall
      -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long
      -Wcast-align -c
      /usr/src/trunk/etc/config/src/EXTERN_FUNCTION_TEMPLATE.cpp -o
      EXTERN_FUNCTION_TEMPLATE.o
      gcc EXTERN_FUNCTION_TEMPLATE.o -pthread extern_function_template_imp.o
      -lm -lsupc++ -o EXTERN_FUNCTION_TEMPLATE
      ./EXTERN_FUNCTION_TEMPLATE
      ...
      ---------

      config.h:
      ---------
      ...
      // #define _RWSTD_NO_EXTERN_FUNCTION_TEMPLATE
      ...
      ---------

      As a result the _RWSTD_NO_EXTERN_FUNCTION_TEMPLATE macro is defined
      while gcc supports the extern function templates.

      The first compilation is come from "%.o: %.cpp" rule, and the second -
      from "config:" rule.

      Attachments

        Issue Links

          Activity

            People

              farid Farid Zaripov
              farid Farid Zaripov
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 5h
                  5h