diff options
| -rw-r--r-- | clang/lib/Sema/JumpDiagnostics.cpp | 2 | ||||
| -rw-r--r-- | clang/test/SemaCXX/MicrosoftCompatibility.cpp | 56 | ||||
| -rw-r--r-- | clang/test/SemaCXX/MicrosoftExtensions.cpp | 53 | 
3 files changed, 56 insertions, 55 deletions
diff --git a/clang/lib/Sema/JumpDiagnostics.cpp b/clang/lib/Sema/JumpDiagnostics.cpp index 40e8bcb247d..3e74dfccbdb 100644 --- a/clang/lib/Sema/JumpDiagnostics.cpp +++ b/clang/lib/Sema/JumpDiagnostics.cpp @@ -694,7 +694,7 @@ void JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc,    SmallVector<unsigned, 10> ToScopesError;    SmallVector<unsigned, 10> ToScopesWarning;    for (unsigned I = ToScope; I != CommonScope; I = Scopes[I].ParentScope) { -    if (S.getLangOptions().MicrosoftExt && JumpDiagWarning != 0 && +    if (S.getLangOptions().MicrosoftMode && JumpDiagWarning != 0 &&          IsMicrosoftJumpWarning(JumpDiagError, Scopes[I].InDiag))        ToScopesWarning.push_back(I);      else if (Scopes[I].InDiag) diff --git a/clang/test/SemaCXX/MicrosoftCompatibility.cpp b/clang/test/SemaCXX/MicrosoftCompatibility.cpp index fa4ed3ebeff..98a7532f0c5 100644 --- a/clang/test/SemaCXX/MicrosoftCompatibility.cpp +++ b/clang/test/SemaCXX/MicrosoftCompatibility.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -triple i686-pc-win32 -fsyntax-only -Wmicrosoft -verify -fms-compatibility +// RUN: %clang_cc1 %s -triple i686-pc-win32 -fsyntax-only -Wmicrosoft -verify -fms-compatibility -fexceptions -fcxx-exceptions @@ -16,3 +16,57 @@ void test()  } + + +namespace ms_protected_scope { +  struct C { C(); }; + +  int jump_over_variable_init(bool b) { +    if (b) +      goto foo; // expected-warning {{illegal goto into protected scope}} +    C c; // expected-note {{jump bypasses variable initialization}} +  foo: +    return 1; +  } + +struct Y { +  ~Y(); +}; + +void jump_over_var_with_dtor() { +  goto end; // expected-warning{{goto into protected scope}} +  Y y; // expected-note {{jump bypasses variable initialization}} + end: +    ; +} + +  void jump_over_variable_case(int c) { +    switch (c) { +    case 0: +      int x = 56; // expected-note {{jump bypasses variable initialization}} +    case 1:       // expected-error {{switch case is in protected scope}} +      x = 10; +    } +  } + +  +void exception_jump() { +  goto l2; // expected-error {{illegal goto into protected scope}} +  try { // expected-note {{jump bypasses initialization of try block}} +     l2: ; +  } catch(int) { +  } +} + +int jump_over_indirect_goto() { +  static void *ps[] = { &&a0 }; +  goto *&&a0; // expected-warning {{goto into protected scope}} +  int a = 3; // expected-note {{jump bypasses variable initialization}} + a0: +  return 0; +} +   +} + + + diff --git a/clang/test/SemaCXX/MicrosoftExtensions.cpp b/clang/test/SemaCXX/MicrosoftExtensions.cpp index 396ee13f66a..e5e5752dba8 100644 --- a/clang/test/SemaCXX/MicrosoftExtensions.cpp +++ b/clang/test/SemaCXX/MicrosoftExtensions.cpp @@ -257,56 +257,3 @@ void f()  } - -namespace ms_protected_scope { -  struct C { C(); }; - -  int jump_over_variable_init(bool b) { -    if (b) -      goto foo; // expected-warning {{illegal goto into protected scope}} -    C c; // expected-note {{jump bypasses variable initialization}} -  foo: -    return 1; -  } - -struct Y { -  ~Y(); -}; - -void jump_over_var_with_dtor() { -  goto end; // expected-warning{{goto into protected scope}} -  Y y; // expected-note {{jump bypasses variable initialization}} - end: -    ; -} - -  void jump_over_variable_case(int c) { -    switch (c) { -    case 0: -      int x = 56; // expected-note {{jump bypasses variable initialization}} -    case 1:       // expected-error {{switch case is in protected scope}} -      x = 10; -    } -  } - -  -void exception_jump() { -  goto l2; // expected-error {{illegal goto into protected scope}} -  try { // expected-note {{jump bypasses initialization of try block}} -     l2: ; -  } catch(int) { -  } -} - -int jump_over_indirect_goto() { -  static void *ps[] = { &&a0 }; -  goto *&&a0; // expected-warning {{goto into protected scope}} -  int a = 3; // expected-note {{jump bypasses variable initialization}} - a0: -  return 0; -} -   -} - - -  | 

