Boaz Brickner
30f0ddab71
Add support for importing access from C++ to Carbon (#5858)
Better access control with inheritance should come with better
inheritance support (actually importing inheritance).
C++ Interop Demo:
```c++
// hello_world.h
class HelloWorld {
public:
static auto Pub() -> void;
protected:
static auto Pro() -> void;
private:
static auto Pri() -> void;
};
```
```c++
// hello_world.cpp
#include "hello_world.h"
#include <cstdio>
auto HelloWorld::Pub() -> void { printf("Public!\n"); }
auto HelloWorld::Pro() -> void { printf("Protected!\n"); }
auto HelloWorld::Pri() -> void { printf("Private!\n"); }
```
```carbon
// main.carbon
library "Main";
import Cpp library "hello_world.h";
fn Run() -> i32 {
Cpp.HelloWorld.Pub();
Cpp.HelloWorld.Pro();
Cpp.HelloWorld.Pri();
return 0;
}
```
```shell
$ clang -c hello_world.cpp
$ bazel-bin/toolchain/carbon compile main.carbon
main.carbon:9:3: error: cannot access protected member `Pro` of type `Cpp.HelloWorld`
Cpp.HelloWorld.Pro();
^~~~~~~~~~~~~~~~~~
main.carbon: note: declared here
main.carbon:10:3: error: cannot access private member `Pri` of type `Cpp.HelloWorld`
Cpp.HelloWorld.Pri();
^~~~~~~~~~~~~~~~~~
main.carbon: note: declared here
```
Before this change (no access checks):
```shell
$ bazel-bin/toolchain/carbon compile main.carbon
$ bazel-bin/toolchain/carbon link hello_world.o main.o --output=demo
$ ./demo
Public!
Protected!
Private!
```
Part of #5859.
2025-07-29 08:25:15 +00:00
..
2025-02-20 22:42:47 +00:00
2025-07-29 08:25:15 +00:00
2025-04-15 22:40:29 +00:00
2025-04-11 21:47:43 +00:00
2025-07-25 21:09:24 +00:00
2025-06-11 21:34:01 +00:00
2024-09-05 23:39:58 +00:00
2025-01-27 23:48:44 +00:00
2025-07-21 20:02:27 +00:00
2025-07-21 20:02:27 +00:00
2025-07-21 20:02:27 +00:00
2025-07-21 20:02:27 +00:00
2025-07-28 21:06:57 +00:00
2025-07-11 22:29:10 +00:00
2025-07-21 20:02:27 +00:00
2025-07-25 21:09:24 +00:00
2025-07-10 21:21:19 +00:00
2025-07-10 16:32:39 +00:00
2025-07-25 21:09:24 +00:00
2025-07-17 18:58:34 +00:00
2025-04-23 15:20:18 +00:00
2025-05-07 22:20:39 +00:00
2025-05-07 22:20:39 +00:00
2025-06-23 23:10:33 +00:00
2025-06-03 18:07:23 +00:00
2025-06-10 22:09:31 +00:00
2025-06-10 22:09:31 +00:00
2025-06-16 23:21:22 +00:00
2025-07-21 20:02:27 +00:00
2025-06-03 01:14:54 +00:00
2025-06-12 20:37:27 +00:00
2025-07-17 20:25:59 +00:00
2025-05-29 19:48:16 +00:00
2025-07-02 20:58:02 +00:00
2025-04-14 14:28:15 +00:00
2025-06-18 01:10:26 +00:00
2025-06-12 22:06:12 +00:00
2025-03-04 21:01:59 +00:00
2025-05-01 22:17:55 +00:00
2025-06-10 22:09:31 +00:00
2025-05-01 20:24:15 +00:00
2025-05-01 20:24:15 +00:00
2025-05-28 22:48:20 +00:00
2025-05-23 16:58:46 +00:00
2025-03-18 23:49:24 +00:00
2024-07-03 17:49:47 +00:00
2025-04-17 21:58:37 +00:00
2025-04-28 19:06:24 +00:00
2025-06-03 01:14:54 +00:00
2024-12-02 18:51:44 +00:00
2025-06-03 18:07:23 +00:00
2025-07-11 22:29:10 +00:00
2025-04-23 19:03:53 +00:00
2025-04-28 19:06:24 +00:00
2025-05-09 16:35:28 +00:00
2024-07-12 22:38:06 +00:00
2025-07-18 19:03:06 +00:00
2025-04-23 19:03:53 +00:00
2025-02-14 19:44:36 +00:00
2025-07-25 18:34:07 +00:00
2025-02-11 21:33:57 +00:00
2025-06-02 19:16:31 +00:00
2025-05-01 20:24:15 +00:00
2025-06-25 23:45:14 +00:00
2025-04-17 18:57:20 +00:00
2025-06-25 23:45:14 +00:00
2024-07-12 22:38:06 +00:00
2025-04-23 15:20:18 +00:00
2025-06-10 20:54:58 +00:00
2024-07-12 22:38:06 +00:00
2025-04-28 19:06:24 +00:00
2024-12-18 00:19:12 +00:00
2025-07-17 18:58:34 +00:00
2024-07-12 22:38:06 +00:00
2025-05-01 22:17:55 +00:00
2024-07-12 22:38:06 +00:00
2025-04-23 19:03:53 +00:00
2025-04-10 20:53:42 +00:00
2025-07-18 20:42:16 +00:00
2025-06-10 22:09:31 +00:00
2025-07-23 16:55:13 +00:00
2025-05-10 17:36:28 +00:00
2025-06-03 18:07:23 +00:00
2025-05-22 18:58:47 +00:00
2025-07-25 18:34:07 +00:00
2025-07-25 18:34:07 +00:00
2025-07-29 08:25:15 +00:00
2025-07-29 08:25:15 +00:00
2025-07-25 21:09:24 +00:00
2025-07-25 21:09:24 +00:00
2025-07-25 21:09:24 +00:00
2025-07-25 21:09:24 +00:00
2025-03-21 23:09:37 +00:00
2025-04-29 18:00:07 +00:00
2025-06-03 17:55:16 +00:00
2025-07-10 18:27:28 +00:00
2025-04-28 19:06:24 +00:00
2025-04-14 14:28:15 +00:00
2025-05-06 16:56:06 +00:00
2025-07-09 22:42:27 +00:00
2025-04-17 18:57:20 +00:00
2024-12-03 18:46:27 +00:00
2025-05-15 16:25:53 +00:00
2025-05-01 20:24:15 +00:00
2025-05-19 22:50:16 +00:00
2025-04-14 14:28:15 +00:00
2025-04-28 19:06:24 +00:00
2024-10-17 22:47:40 +00:00
2025-03-18 00:31:17 +00:00
2025-01-22 23:15:00 +00:00
2025-07-29 08:25:15 +00:00
2025-04-28 19:06:24 +00:00
2025-06-10 20:54:58 +00:00
2025-06-10 20:54:58 +00:00
2025-06-10 22:09:31 +00:00
2025-06-10 22:09:31 +00:00
2025-02-07 22:35:18 +00:00
2025-06-25 23:45:14 +00:00
2025-06-03 17:55:16 +00:00
2025-02-26 18:44:36 +00:00
2025-02-25 02:07:43 +00:00
2025-06-23 22:09:29 +00:00
2025-01-23 02:21:48 +00:00
2025-06-25 23:45:14 +00:00
2025-06-25 23:45:14 +00:00
2025-04-28 19:06:24 +00:00
2025-05-01 22:17:55 +00:00
2025-05-01 22:17:55 +00:00
2025-04-14 14:28:15 +00:00
2025-07-10 16:32:39 +00:00
2025-05-01 22:17:55 +00:00
2025-03-01 08:00:17 +00:00
2025-05-07 22:20:39 +00:00
2025-05-07 22:20:39 +00:00
2025-06-18 21:33:18 +00:00
2025-06-11 21:11:00 +00:00
2025-06-11 21:34:01 +00:00
2025-06-11 21:34:01 +00:00
2025-07-25 21:09:24 +00:00
2025-04-14 14:28:15 +00:00
2025-05-22 18:58:47 +00:00
2025-05-22 18:58:47 +00:00
2025-07-12 02:22:24 +00:00
2025-07-12 02:22:24 +00:00