[LLVMbugs] [Bug 20081] New: Clang fails to parse some template code when running with -x cuda -std=c++11

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu Jun 19 08:14:05 PDT 2014


            Bug ID: 20081
           Summary: Clang fails to parse some template code when running
                    with -x cuda -std=c++11
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Frontend
          Assignee: unassignedclangbugs at nondot.org
          Reporter: eliben at gmail.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Background: r209824 fixed a bug that made -std options mask out -x cuda. Prior
to that, when "-std=c++11 -x cuda" were specified together, CUDA mode was not

Now that both CUDA mode and C++11 mode can be active together, we run into a
problem parsing certain C++11 code in CUDA mode. Here's a simple reproducer:

  template <typename T>
  struct K1 {
    T member;

  template <typename T>
  struct K2 {
    T member;

  template <typename T>
  struct K3 {
    T member;

  K3<K2<K1<int>>> var;

Compiled just with -std=c++11 this works fine. With "-std=c++11 -x cuda",
however, we get:

error: a space is required between consecutive right angle brackets (use '> >')
K3<K2<K1<int>>> var;
            > >

Running -cc1 -dump-tokens clarifies what's going on. In the absence of "-x
cuda", the ">>>" on the last line is taken as '>>' followed by '>', which the
template parser knows how to handle.

In CUDA mode, it's read as a single token - '>>>', which the parser does not
know how to handle.

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20140619/64be50c7/attachment.html>

More information about the llvm-bugs mailing list