https://llvm.org/bugs/show_bug.cgi?id=28667

            Bug ID: 28667
           Summary: Invalid subexpression in sizeof fails to remove
                    candidate
           Product: clang
           Version: trunk
          Hardware: All
                OS: All
            Status: NEW
          Keywords: accepts-invalid, compile-fail, miscompilation
          Severity: normal
          Priority: P
         Component: C++11
          Assignee: unassignedclangb...@nondot.org
          Reporter: hst...@ca.ibm.com
                CC: dgre...@apple.com, llvm-bugs@lists.llvm.org
    Classification: Unclassified

In the following case, Clang fails to detect an error in the subexpression of
the sizeof during substitution of the template arguments into the signature of
the function in question.

Online compiler: http://melpon.org/wandbox/permlink/by24bjnKIvVPecSH

### SOURCE (<stdin>):
struct A { A(int); };

template <typename T> void foo(void *, char (*)[sizeof(0, A(T()))]) { }
template <typename T> void foo(int, ...);

int main(void) { foo<decltype(nullptr)>(0, 0); }


### COMPILER INVOCATION:
clang++ -cc1 -fsyntax-only -x c++ -std=c++11 -


### EXPECTED OUTPUT:
(clean compile)


### ACTUAL OUTPUT:
<stdin>:6:18: error: call to 'foo' is ambiguous
int main(void) { foo<decltype(nullptr)>(0, 0); }
                 ^~~~~~~~~~~~~~~~~~~~~~
<stdin>:3:28: note: candidate function [with T = nullptr_t]
template <typename T> void foo(void *, char (*)[sizeof(0, A(T()))]) { }
                           ^
<stdin>:4:28: note: candidate function [with T = nullptr_t]
template <typename T> void foo(int, ...);
                           ^
1 error generated.


### COMPILER VERSION INFO (clang++ -v):
clang version 4.0.0 (trunk 276290)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/llvm-head/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6.3
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to