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

Configure tests might be compiled twice.

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 4.1.2, 4.1.3, 4.1.4, 4.2.0
    • Fix Version/s: 4.2.1
    • Component/s: Configuration
    • Labels:
      None
    • Environment:

      unix

    • Severity:
      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

              • Assignee:
                farid Farid Zaripov
                Reporter:
                farid Farid Zaripov
              • Votes:
                0 Vote for this issue
                Watchers:
                1 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