llvm/clang/test/ParserHLSL/hlsl_parameter_modifiers.cpp

// RUN: %clang_cc1 %s -verify

// expected-error@#fn{{unknown type name 'in'}}
// expected-error@#fn{{expected ')'}}
// expected-note@#fn{{to match this '('}}
void fn(in out float f); // #fn

// expected-error@#fn2{{unknown type name 'in'}}
// expected-error@#fn2{{expected ')'}}
// expected-note@#fn2{{to match this '('}}
void fn2(in in float f); // #fn2

// expected-error@#fn3{{unknown type name 'out'}}
// expected-error@#fn3{{expected ')'}}
// expected-note@#fn3{{to match this '('}}
void fn3(out out float f); // #fn3

// expected-error@#fn4{{unknown type name 'inout'}}
// expected-error@#fn4{{expected ')'}}
// expected-note@#fn4{{to match this '('}}
void fn4(inout in out float f); // #fn4

// expected-error@#fn5{{unknown type name 'inout'}}
// expected-error@#fn5{{expected ')'}}
// expected-note@#fn5{{to match this '('}}
void fn5(inout in float f); // #fn5

// expected-error@#fn6{{unknown type name 'inout'}}
// expected-error@#fn6{{expected ')'}}
// expected-note@#fn6{{to match this '('}}
void fn6(inout out float f); // #fn6

void implicitFn(float f);

// expected-error@#inFn{{unknown type name 'in'}}
void inFn(in float f); // #inFn

// expected-error@#inoutFn{{unknown type name 'inout'}}
void inoutFn(inout float f); // #inoutFn

// expected-error@#outFn{{unknown type name 'out'}}
void outFn(out float f); // #outFn

// expected-error@#fn7{{unknown type name 'inout'}}
// expected-error@#fn7{{declaration of 'T' shadows template parameter}}
// expected-error@#fn7{{expected ')'}}
// expected-note@#fn7{{to match this '('}}
template <typename T> // expected-note{{template parameter is declared here}}
void fn7(inout T f); // #fn7