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

           Summary: Clang fails to instantiate an initializer required to
                    complete a type
           Product: clang
           Version: unspecified
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
        AssignedTo: [email protected]
        ReportedBy: [email protected]
                CC: [email protected], [email protected]


Clang isn't properly instantiating templates when it is required to do so to
complete some types:

% cat x.cc                                        
template <typename T> struct S {
  static const int arr[];
  static const int x;
  static int f();
};

template <typename T> const int S<T>::arr[] = { 1, 2, 3 };
template <typename T> const int S<T>::x = sizeof(arr) / sizeof(arr[0]);
template <typename T> int S<T>::f() { return x; }

int x = S<int>::f();

% ./bin/clang -fsyntax-only x.cc                  
x.cc:8:43: error: invalid application of 'sizeof' to an incomplete type 'const
int []'
template <typename T> const int S<T>::x = sizeof(arr) / sizeof(arr[0]);
                                          ^~~~~~~~~~~
x.cc:9:46: note: in instantiation of static data member 'S<int>::x' requested
here
template <typename T> int S<T>::f() { return x; }
                                             ^
x.cc:11:17: note: in instantiation of member function 'S<int>::f' requested
here
int x = S<int>::f();
                ^
1 error generated.


It looks like this would work were the types class types, but because they're
non-class-types, we assume their completeness doesn't require instantiation.
Doh. This has nothing to do with sizeof(), this is broken in innumerable
contexts in Clang, the fundamental API for causing a type to become complete
fails to consider this scenario as far as I can tell.

-- 
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