Page MenuHomePhabricator

[WIP][AST] Allow ExprConstant to evaluate structs in C.
Needs ReviewPublic

Authored by efriedma on Mar 13 2020, 5:14 PM.

Details

Reviewers
nickdesaulniers
Summary

Just a proof of concept to show this works. Handles all the examples from D76096, as far as I can tell.

Diff Detail

Unit TestsFailed

TimeTest
20 msClang.CodeGen::Unknown Unit Message ("")
Script: -- : 'RUN: at line 1'; /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/bin/clang -cc1 -internal-isystem /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/lib/clang/11.0.0/include -nostdsysteminc -emit-llvm < /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/clang/test/CodeGen/2009-06-14-anonymous-union-init.c | grep "zeroinitializer, i16 16877"
40 msClang.CodeGen::Unknown Unit Message ("")
Script: -- : 'RUN: at line 1'; /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/bin/clang -cc1 -internal-isystem /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/lib/clang/11.0.0/include -nostdsysteminc -triple x86_64-unknown-unknown -emit-llvm -disable-llvm-optzns -o - /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/clang/test/CodeGen/builtin-constant-p.c -O2 | /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/bin/FileCheck /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/clang/test/CodeGen/builtin-constant-p.c
120 msClang.CodeGen::Unknown Unit Message ("")
Script: -- : 'RUN: at line 1'; /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/bin/clang -cc1 -internal-isystem /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/lib/clang/11.0.0/include -nostdsysteminc -emit-llvm -o - /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/clang/test/CodeGen/pascal-string.c -fpascal-strings | grep "05Hello"
60 msClang.CodeGenCXX::Unknown Unit Message ("")
Script: -- : 'RUN: at line 1'; /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/bin/clang -cc1 -internal-isystem /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/lib/clang/11.0.0/include -nostdsysteminc -triple armv7-apple-darwin9 -emit-llvm -o - /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/clang/test/CodeGenCXX/arm-swiftcall.cpp -Wno-return-type-c-linkage -std=c++03 | /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/bin/FileCheck /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/clang/test/CodeGenCXX/arm-swiftcall.cpp -check-prefixes=CHECK
70 msClang.Sema::Unknown Unit Message ("")
Script: -- : 'RUN: at line 1'; /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/bin/clang -cc1 -internal-isystem /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/build/lib/clang/11.0.0/include -nostdsysteminc /mnt/disks/ssd0/agent/workspace/amd64_debian_testing_clang8/clang/test/Sema/builtins.c -fsyntax-only -verify -pedantic -Wstrlcpy-strlcat-size -Wno-string-plus-int -triple=i686-apple-darwin9

Event Timeline

efriedma created this revision.Mar 13 2020, 5:14 PM
Herald added a project: Restricted Project. · View Herald TranscriptMar 13 2020, 5:14 PM
nickdesaulniers added a subscriber: erichkeane.

Looks like @erichkeane was in the neighborhood in 606a734755d1fb6c35a17680d0c251f834b79334 ("[PR47636] Fix tryEmitPrivate to handle non-constantarraytypes").

I took the tests from https://reviews.llvm.org/D76096 and combined it with this change. As mentioned in the last comment 606a734755d1fb6c35a17680d0c251f834b79334 causes conflicts, so I tried applying it to the commit just prior (f2efb5742cc9f74ad73987760651e3d23894a416). When running ninja clang-test, the following tests fail:

Failed Tests (8):
  Clang :: CodeGen/2009-06-14-anonymous-union-init.c
  Clang :: CodeGen/builtin-constant-p.c
  Clang :: CodeGen/pascal-string.c
  Clang :: CodeGenCXX/arm-swiftcall.cpp
  Clang :: Sema/array-init.c
  Clang :: Sema/builtins.c
  Clang :: Sema/const-eval.c
  Clang :: Sema/init.c