#if GC
# define GCONST const
#else
# define GCONST
#endif

// gconst-note@8 {{variable 'glb' declared const here}}
GCONST int glb = 5;


// Check various correct prefix spellings and combinations.
//
// RUN: %clang_cc1             -DGC           -verify=gconst                 %s
// RUN: %clang_cc1 -Wcast-qual      -DLC      -verify=lconst                 %s
// RUN: %clang_cc1                       -DSC -verify=expected               %s
// RUN: %clang_cc1                       -DSC -verify                        %s
// RUN: %clang_cc1                       -DSC -verify -verify                %s
// RUN: %clang_cc1                            -verify=nconst                 %s
// RUN: %clang_cc1                            -verify=n-const                %s
// RUN: %clang_cc1                            -verify=n_const                %s
// RUN: %clang_cc1                            -verify=NConst                 %s
// RUN: %clang_cc1                            -verify=NConst2                %s
// RUN: %clang_cc1 -Wcast-qual -DGC -DLC      -verify=gconst,lconst          %s
// RUN: %clang_cc1 -Wcast-qual -DGC -DLC -DSC -verify=gconst,lconst,expected %s
// RUN: %clang_cc1 -Wcast-qual -DGC -DLC      -verify=gconst -verify=lconst  %s
// RUN: %clang_cc1 -Wcast-qual -DGC -DLC -DSC -verify=gconst,lconst -verify  %s
// RUN: %clang_cc1             -DGC      -DSC -verify -verify=gconst -verify %s
//
// Duplicate prefixes.
// RUN: %clang_cc1 -Wcast-qual -DGC -DLC      -verify=gconst,lconst,gconst         %s
// RUN: %clang_cc1             -DGC           -verify=gconst -verify=gconst,gconst %s
// RUN: %clang_cc1                       -DSC -verify=expected -verify=expected    %s
// RUN: %clang_cc1                       -DSC -verify -verify=expected             %s
//
// Various tortured cases: multiple directives with different prefixes per
// line, prefixes used as comments, prefixes prefixing prefixes, and prefixes
// with special suffixes.
// RUN: %clang_cc1 -Wcast-qual      -DLC      -verify=foo                    %s
// RUN: %clang_cc1                       -DSC -verify=bar                    %s
// RUN: %clang_cc1 -Wcast-qual      -DLC -DSC -verify=foo,bar                %s
// RUN: %clang_cc1 -Wcast-qual      -DLC -DSC -verify=bar,foo                %s
// RUN: %clang_cc1                       -DSC -verify=foo-bar                %s
// RUN: %clang_cc1 -Wcast-qual      -DLC      -verify=bar-foo                %s
// RUN: %clang_cc1 -Wcast-qual      -DLC -DSC -verify=foo,foo-bar            %s
// RUN: %clang_cc1 -Wcast-qual      -DLC -DSC -verify=foo-bar,foo            %s
// RUN: %clang_cc1 -Wcast-qual      -DLC -DSC -verify=bar,bar-foo            %s
// RUN: %clang_cc1 -Wcast-qual      -DLC -DSC -verify=bar-foo,bar            %s
// RUN: %clang_cc1 -Wcast-qual      -DLC -DSC -verify=foo-bar,bar-foo        %s
// RUN: %clang_cc1                       -DSC -verify=foo-warning            %s
// RUN: %clang_cc1 -Wcast-qual      -DLC      -verify=bar-warning-re         %s
// RUN: %clang_cc1 -Wcast-qual      -DLC -DSC -verify=foo,foo-warning        %s
// RUN: %clang_cc1 -Wcast-qual      -DLC -DSC -verify=foo-warning,foo        %s
// RUN: %clang_cc1 -Wcast-qual      -DLC -DSC -verify=bar,bar-warning-re     %s
// RUN: %clang_cc1 -Wcast-qual      -DLC -DSC -verify=bar-warning-re,bar     %s


// Check invalid prefixes.  Check that there's no additional output, which
// might indicate that diagnostic verification became enabled even though it
// was requested incorrectly.  Check that prefixes are reported in command-line
// order.
//
// RUN: not %clang_cc1 -verify=5abc,-xy,foo,_k -verify='#a,b$' %s 2> %t
// RUN: FileCheck --check-prefixes=ERR %s < %t
//
// ERR-NOT:  {{.}}
// ERR:      error: invalid value '5abc' in '-verify='
// ERR-NEXT: note: -verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores
// ERR-NEXT: error: invalid value '-xy' in '-verify='
// ERR-NEXT: note: -verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores
// ERR-NEXT: error: invalid value '_k' in '-verify='
// ERR-NEXT: note: -verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores
// ERR-NEXT: error: invalid value '#a' in '-verify='
// ERR-NEXT: note: -verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores
// ERR-NEXT: error: invalid value 'b$' in '-verify='
// ERR-NEXT: note: -verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores
// ERR-NOT:  {{.}}


// Check that our test code actually has expected diagnostics when there's no
// -verify.
//
// RUN: not %clang_cc1 -Wcast-qual -DGC -DLC -DSC %s 2> %t
// RUN: FileCheck --check-prefix=ALL %s < %t
//
// ALL: cannot assign to variable 'glb' with const-qualified type 'const int'
// ALL: variable 'glb' declared const here
// ALL: cast from 'const int *' to 'int *' drops const qualifier
// ALL: initializing 'int *' with an expression of type 'const int *' discards qualifiers


#if LC
# define LCONST const
#else
# define LCONST
#endif

#if SC
# define SCONST const
#else
# define SCONST
#endif

void foo() {
  LCONST int loc = 5;
  SCONST static int sta = 5;
  // We don't actually expect 1-2 occurrences of this error.  We're just
  // checking the parsing.
  glb = 6; // gconst-error1-2 {{cannot assign to variable 'glb' with const-qualified type 'const int'}}
  *(int*)(&loc) = 6; // lconst-warning {{cast from 'const int *' to 'int *' drops const qualifier}}
  ; // Code, comments, and many directives with different prefixes per line, including cases where some prefixes (foo and bar) prefix others (such as foo-bar and bar-foo), such that some prefixes appear as normal comments and some have special suffixes (-warning and -re): foo-warning@-1 {{cast from 'const int *' to 'int *' drops const qualifier}} foo-bar-warning@+1 {{initializing 'int *' with an expression of type 'const int *' discards qualifiers}} foo-warning-warning@+1 {{initializing 'int *' with an expression of type 'const int *' discards qualifiers}} bar-warning-re-warning@-1 {{cast from 'const int *' to 'int *' drops const qualifier}} bar-foo-warning@-1 {{cast from 'const int *' to 'int *' drops const qualifier}} bar-warning@+1 {{initializing 'int *' with an expression of type 'const int *' discards qualifiers}}
  int *p = &sta; // expected-warning {{initializing 'int *' with an expression of type 'const int *' discards qualifiers}}
}

// nconst-no-diagnostics
// n-const-no-diagnostics
// n_const-no-diagnostics
// NConst-no-diagnostics
// NConst2-no-diagnostics
