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

             Bug #: 14043
           Summary: An overflow in a non-type template parameter is not
                    detected
           Product: clang
           Version: 3.1
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Frontend
        AssignedTo: [email protected]
        ReportedBy: [email protected]
                CC: [email protected]
    Classification: Unclassified


Created attachment 9321
  --> http://llvm.org/bugs/attachment.cgi?id=9321
Application calculating Fibonacci seq at compile time

Consider this trivial Fibonacci sequence calculation at compile time:

template<int v>
struct fib
{
    static_assert(v > 1, "fib<0> and fib<1> are special");
    enum { value = fib<v-1>::value + fib<v-2>::value };
};

template<>
struct fib<0> { enum { value = 0 }; };

template<>
struct fib<1> { enum { value = 1 }; };

std::cout << fib<0>::value << std::endl;
std::cout << fib<1>::value << std::endl;
std::cout << fib<2>::value << std::endl;
std::cout << fib<3>::value << std::endl;
std::cout << fib<4>::value << std::endl;
std::cout << fib<5>::value << std::endl;

std::cout << fib<45>::value << std::endl; // 1134903170
std::cout << fib<46>::value << std::endl; // 1836311903
std::cout << fib<47>::value << std::endl; // integer overflow

gcc (4.7.1) complains when tries to instantiate the fib<47>:
~$ g++ -std=c++11 fib.cpp 
fib.cpp: In instantiation of `struct fib<47>':
fib.cpp:30:25:   required from here
fib.cpp:7:10: warning: integer overflow in expression [-Woverflow]
fib.cpp:7:10: error: overflow in constant expression [-fpermissive]
fib.cpp:7:10: error: enumerator value for `value' is not an integer constant

However clang keeps going silently:
~$ clang++ -std=c++11 fib.cpp 
~$ ./a.out 
0
1
1
2
3
5
8
13
21
34
1134903170
1836311903
-1323752223
~$

Would be good to have the overflow detected as well. The fib.cpp file from the
attachment contains the whole app.

-- 
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.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to