[LLVMbugs] [Bug 13849] New: Incorrect codegen for lambda in template function

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Sep 14 11:43:52 PDT 2012


http://llvm.org/bugs/show_bug.cgi?id=13849

             Bug #: 13849
           Summary: Incorrect codegen for lambda in template function
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++11
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: arthur.j.odwyer at gmail.com
                CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
    Classification: Unclassified


Created attachment 9217
  --> http://llvm.org/bugs/attachment.cgi?id=9217
Output of "clang++ --std=c++11 test.cc --stdlib=libc++ -v"

This bug was originally reported on StackOverflow:
http://stackoverflow.com/questions/12419761/wrong-result-when-stdfor-each-is-called-in-a-template-function

Apple employees take note— it's already got an Apple rdar:// number. I hope
someone will put that rdar link in a comment here.


cat >test.cc <<EOF
#include <cstdio>

template<typename T> 
void test() {
    ([](int) { puts("int"); })(0);
    ([](double) { puts("double"); })(0);
    ([](T) { puts("T"); })(0);
}

int main() { test<int>(); test<double>(); }
EOF
clang++ --std=c++11 test.cc --stdlib=libc++
./a.out


Expected output: int double T int double T
Actual output: int double int int double double

It seems that Clang is doing some sort of lookup to find the "specializations"
of the T lambda... which is just wrong.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list