Mercurial > hg > CbC > CbC_llvm
diff clang/test/Frontend/verify-prefixes.c @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children | c4bab56944e8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clang/test/Frontend/verify-prefixes.c Thu Feb 13 15:10:13 2020 +0900 @@ -0,0 +1,118 @@ +#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