brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 4036c34 Raw
98 lines · cpp
1// RUN: rm -rf %t2// RUN: %clang_cc1 -std=c++17 -fmodules -fimplicit-module-maps -x objective-c++ -fmodules-cache-path=%t -fmodule-name=module_private_left -emit-module %S/Inputs/module.modulemap3// RUN: %clang_cc1 -std=c++17 -fmodules -fimplicit-module-maps -x objective-c++ -fmodules-cache-path=%t -fmodule-name=module_private_right -emit-module %S/Inputs/module.modulemap4// RUN: %clang_cc1 -std=c++17 -fmodules -fimplicit-module-maps -x objective-c++ -fmodules-cache-path=%t -I %S/Inputs %s -verify5// FIXME: When we have a syntax for modules in C++, use that.6 7@import module_private_left;8@import module_private_right;9 10void test() {11  int &ir = f0(1.0); // okay: f0() from 'right' is not visible12}13 14int test_broken() {15  HiddenStruct hidden; // expected-error{{unknown type name 'HiddenStruct'}}16  Integer i; // expected-error{{unknown type name 'Integer'}}17 18  int *ip = 0;19  f1(ip); // expected-error{{use of undeclared identifier 'f1'}}20 21  vector<int> vec; // expected-error{{no template named 'vector'}}22 23  VisibleStruct vs;24  vs.field = 0;25  vs.setField(1);26 27  return hidden_var; // expected-error{{use of undeclared identifier 'hidden_var'}}28}29 30// Check for private redeclarations of public entities.31template<typename T>32class public_class_template;33 34template<typename T>35__module_private__ class public_class_template;36 37 38typedef int public_typedef;39typedef __module_private__ int public_typedef;40 41extern int public_var;42extern __module_private__ int public_var;43 44void public_func();45__module_private__ void public_func();46 47template<typename T>48void public_func_template();49template<typename T>50__module_private__ void public_func_template();51 52struct public_struct;53__module_private__ struct public_struct;54 55// Check for attempts to make specializations private56template<> __module_private__ void public_func_template<int>(); // expected-error{{template specialization cannot be declared __module_private__}}57 58template<typename T>59struct public_class {60  struct inner_struct;61  static int static_var;62 63  friend __module_private__ void public_func_friend();64  friend __module_private__ struct public_struct_friend;65};66 67template<> __module_private__ struct public_class<int>::inner_struct { }; // expected-error{{member specialization cannot be declared __module_private__}}68template<> __module_private__ int public_class<int>::static_var = 17; // expected-error{{member specialization cannot be declared __module_private__}}69 70template<>71__module_private__ struct public_class<float> { }; // expected-error{{template specialization cannot be declared __module_private__}}72 73template<typename T>74__module_private__ struct public_class<T *> { }; // expected-error{{partial specialization cannot be declared __module_private__}}75 76// Check for attempts to make parameters and variables with automatic77// storage module-private.78 79void local_var_private(__module_private__ int param) { // expected-error{{parameter 'param' cannot be declared __module_private__}}80  __module_private__ struct Local { int x, y; } local; //expected-error{{local variable 'local' cannot be declared __module_private__}}81 82  __module_private__ auto [x, y] = local; // expected-error {{local variable '[x, y]' cannot be declared __module_private__}}83 84  __module_private__ struct OtherLocal { int x; }; // expected-error{{local struct cannot be declared __module_private__}}85 86  typedef __module_private__ int local_typedef; // expected-error{{typedef 'local_typedef' cannot be declared __module_private__}}87}88 89void param_private(__module_private__ int) {} // expected-error {{parameter '' cannot be declared __module_private}}90 91// Check struct size92struct LikeVisibleStruct {93  int field;94  virtual void setField(int f);95};96 97int check_struct_size[sizeof(VisibleStruct) == sizeof(LikeVisibleStruct)? 1 : -1];98