ahatanak added a comment.

If I try calling Init(AnyParent, F) in Scope::setFlags, clang fails to compile 
the following code because it cannot find the definition of struct "foo":

  void foo3(void) 
    struct foo {
      int a, f;
    };
    char *np = nullptr;
    int *ip = &(((struct foo *)np)->f);
    *ip = 0;
  }

I can fix this test if I add a boolean flag to Scope::Init, which tells the 
function to return early before DeclsInScope and other fields are cleared.

All the other tests pass too except for test/CXX/drs/dr1xx.cpp:

  namespace dr183 { // dr183: sup 382
    template<typename T> struct A {};
    template<typename T> struct B {
      typedef int X;
    };
    template<> struct A<int> {
      typename B<int>::X x;
    };
  }

clang used to compile this code without any warnings or errors, but it now 
issues the following warning if -std=c++98 is on the command line:

dr1xx.cpp:7:5: warning: 'typename' occurs outside of a template 
[-Wc++11-extensions]

  typename B<int>::X x;
  ^~~~~~~~~

1 warning generated.

Is clang correct to issue the warning in this case?


http://reviews.llvm.org/D19175



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to