Type Inference for C Applications to the Static Analysis of Incomplete Programs

Type inference is a feature that is common to a variety of programming languages. While, in the past, it has been prominently present in functional ones (e.g., ML and Haskell), today, many object-oriented/multi-paradigm languages such as C# and C++ offer, to a certain extent, such a feature. Neverth...

Full description

Saved in:
Bibliographic Details
Published inACM transactions on programming languages and systems Vol. 42; no. 3; pp. 1 - 71
Main Authors Melo, Leandro T. C., Ribeiro, Rodrigo G., Guimarães, Breno C. F., Pereira, Fernando Magno Quintão
Format Journal Article
LanguageEnglish
Published New York, NY, USA ACM 01.12.2020
Subjects
Online AccessGet full text

Cover

Loading…
Abstract Type inference is a feature that is common to a variety of programming languages. While, in the past, it has been prominently present in functional ones (e.g., ML and Haskell), today, many object-oriented/multi-paradigm languages such as C# and C++ offer, to a certain extent, such a feature. Nevertheless, type inference still is an unexplored subject in the realm of C. In particular, it remains open whether it is possible to devise a technique that encompasses the idiosyncrasies of this language. The first difficulty encountered when tackling this problem is that parsing C requires, not only syntactic, but also semantic information. Yet, greater challenges emerge due to C’s intricate type system. In this work, we present a unification-based framework that lets us infer the missing struct, union, enum, and typedef declarations in a program. As an application of our technique, we investigate the reconstruction of partial programs. Incomplete source code naturally appears in software development: during design and while evolving, testing, and analyzing programs; therefore, understanding it is a valuable asset. With a reconstructed well-typed program, one can: (i) enable static analysis tools in scenarios where components are absent; (ii) improve precision of “zero setup” static analysis tools; (iii) apply stub generators, symbolic executors, and testing tools on code snippets; and (iv) provide engineers with an assortment of compilable benchmarks for performance and correctness validation. We evaluate our technique on code from a variety of C libraries, including GNU’s Coreutils and on snippets from popular projects such as CPython, FreeBSD, and Git.
AbstractList Type inference is a feature that is common to a variety of programming languages. While, in the past, it has been prominently present in functional ones (e.g., ML and Haskell), today, many object-oriented/multi-paradigm languages such as C# and C++ offer, to a certain extent, such a feature. Nevertheless, type inference still is an unexplored subject in the realm of C. In particular, it remains open whether it is possible to devise a technique that encompasses the idiosyncrasies of this language. The first difficulty encountered when tackling this problem is that parsing C requires, not only syntactic, but also semantic information. Yet, greater challenges emerge due to C’s intricate type system. In this work, we present a unification-based framework that lets us infer the missing struct, union, enum, and typedef declarations in a program. As an application of our technique, we investigate the reconstruction of partial programs. Incomplete source code naturally appears in software development: during design and while evolving, testing, and analyzing programs; therefore, understanding it is a valuable asset. With a reconstructed well-typed program, one can: (i) enable static analysis tools in scenarios where components are absent; (ii) improve precision of “zero setup” static analysis tools; (iii) apply stub generators, symbolic executors, and testing tools on code snippets; and (iv) provide engineers with an assortment of compilable benchmarks for performance and correctness validation. We evaluate our technique on code from a variety of C libraries, including GNU’s Coreutils and on snippets from popular projects such as CPython, FreeBSD, and Git.
Type inference is a feature that is common to a variety of programming languages. While, in the past, it has been prominently present in functional ones (e.g., ML and Haskell), today, many object-oriented/multi-paradigm languages such as C# and C++ offer, to a certain extent, such a feature. Nevertheless, type inference still is an unexplored subject in the realm of C. In particular, it remains open whether it is possible to devise a technique that encompasses the idiosyncrasies of this language. The first difficulty encountered when tackling this problem is that parsing C requires, not only syntactic, but also semantic information. Yet, greater challenges emerge due to C’s intricate type system. In this work, we present a unification-based framework that lets us infer the missing struct, union, enum, and typedef declarations in a program. As an application of our technique, we investigate the reconstruction of partial programs. Incomplete source code naturally appears in software development: during design and while evolving, testing, and analyzing programs; therefore, understanding it is a valuable asset. With a reconstructed well-typed program, one can: (i) enable static analysis tools in scenarios where components are absent; (ii) improve precision of “zero setup” static analysis tools; (iii) apply stub generators, symbolic executors, and testing tools on code snippets; and (iv) provide engineers with an assortment of compilable benchmarks for performance and correctness validation. We evaluate our technique on code from a variety of C libraries, including GNU’s Coreutils and on snippets from popular projects such as CPython, FreeBSD, and Git.
ArticleNumber 15
Author Melo, Leandro T. C.
Pereira, Fernando Magno Quintão
Guimarães, Breno C. F.
Ribeiro, Rodrigo G.
Author_xml – sequence: 1
  givenname: Leandro T. C.
  surname: Melo
  fullname: Melo, Leandro T. C.
  email: ltcmelo@dcc.ufmg.br
  organization: UFMG, Brazil
– sequence: 2
  givenname: Rodrigo G.
  surname: Ribeiro
  fullname: Ribeiro, Rodrigo G.
  email: rodrigo@decsi.ufop.br
  organization: UFOP, Brazil
– sequence: 3
  givenname: Breno C. F.
  surname: Guimarães
  fullname: Guimarães, Breno C. F.
  email: brenosfg@dcc.ufmg.br
  organization: UFMG, Brazil
– sequence: 4
  givenname: Fernando Magno Quintão
  surname: Pereira
  fullname: Pereira, Fernando Magno Quintão
  email: fernando@dcc.ufmg.br
  organization: UFMG, Brazil
BookMark eNptjz1PwzAURS1UJNKCWJiYsjEZ_PwVe0QRhUqVWMocPTvPUlCbVE6W_nuKWhgQ0x3u0bm6czbrh54YuwXxCKDNk9ISdCUvWAHGOK6NVzNWCLCaCy_NFZuP46cQApxxBbvbHPZUrvpEmfpIZRpyWV-zy4TbkW7OuWAfy5dN_cbX76-r-nnNUWo9cRt9SjpAa4HaijxJGxIGWSkbpFHGYYht64876AASCasUBI0pVeCVQ7VgDydvzMM4ZkrNPnc7zIcGRPN9pjmfOZL8Dxm7Cadu6KeM3fYf_v7EY9z9Sn_KLw9JUmg
CitedBy_id crossref_primary_10_1109_TKDE_2024_3436883
crossref_primary_10_1016_j_cola_2022_101171
Cites_doi 10.1002/(SICI)1097-024X(199706)27:6<637::AID-SPE99>3.0.CO;2-3
10.1023/A:1006277616879
10.1145/3009837.3009882
10.1145/2714064.2660205
10.1145/1985793.1985864
10.1145/1449955.1449790
10.1145/2863701
10.1007/s11390-018-1867-7
10.1016/0167-6423(94)00020-4
10.1145/2980983.2908081
10.1023/A:1006285817788
10.1145/3158117
10.1145/1993498.1993532
10.1145/345099.345100
10.1145/289423.289448
10.1145/321250.321253
10.1109/CGO.2013.6495004
10.4149/cai_2018_1_165
10.1016/S0920-5489(01)00059-9
10.1145/2103656.2103719
10.1016/0022-0000(78)90014-4
10.1145/157710.157795
10.1145/2872362.2872387
10.1145/2364527.2364554
10.1145/1878921.1878951
10.1145/2980983.2908119
10.1145/2837614.2837637
10.1145/582153.582176
10.1145/2928270
10.1145/2676724.2693571
10.1145/1111037.1111058
10.1145/503272.503286
10.1145/582153.582168
10.1017/S0956796800000113
10.1145/1133651.1133653
10.1002/(SICI)1096-9942(199901/03)5:1<35::AID-TAPO4>3.0.CO;2-4
10.1145/232627.232642
10.1109/TMSCS.2018.2791955
10.1145/357162.357169
10.1145/301631.301665
10.1145/2813885.2737979
10.3233/FI-1987-10202
10.1145/141478.141540
10.1145/3022671.2983997
10.1145/231379.231389
10.1007/s10817-009-9148-3
10.1145/373243.360207
10.1145/381788.316183
10.1017/S0956796802004380
10.1145/1065010.1065036
10.1145/6041.6042
10.1145/237721.237727
10.1007/978-3-642-00722-4_9
10.1145/2568225.2568273
10.1007/978-3-319-94460-9_7
10.1145/2345156.2254103
ContentType Journal Article
Copyright ACM
Copyright_xml – notice: ACM
DBID AAYXX
CITATION
DOI 10.1145/3421472
DatabaseName CrossRef
DatabaseTitle CrossRef
DatabaseTitleList CrossRef

DeliveryMethod fulltext_linktorsrc
Discipline Computer Science
EISSN 1558-4593
EndPage 71
ExternalDocumentID 10_1145_3421472
3421472
GrantInformation_xml – fundername: CNPq, CAPES, and FAPEMIG
GroupedDBID --Z
-DZ
-~X
.4S
.DC
23M
2FS
4.4
5GY
5VS
6J9
8US
8VB
AAKMM
AALFJ
AAYFX
ABFSI
ABPPZ
ACGFO
ACGOD
ACM
ADBCU
ADL
ADMLS
ADPZR
AEBYY
AENEX
AENSD
AFWIH
AFWXC
AHQJS
AIAGR
AIKLT
AKVCP
ALMA_UNASSIGNED_HOLDINGS
ARCSS
ASPBG
AVWKF
BDXCO
CCLIF
CS3
D0L
EBS
EBU
EDO
FEDTE
GUFHI
HGAVV
H~9
I07
IAO
ICD
IEA
IGS
IOF
K1G
LHSKQ
MK~
ML~
P1C
P2P
PQQKQ
QWB
RNS
ROL
RXW
TAE
TH9
TUS
TWZ
UHB
UKR
UPT
W7O
X6Y
XSW
Z5M
ZCA
ZL0
AAYXX
AEFXT
AEJOY
AETEA
AKRVB
CITATION
ID FETCH-LOGICAL-a244t-6c9ff4b1d61ed7e9e26bfab2736b25358abcdd9858a811fe06331b4aff71938a3
ISSN 0164-0925
IngestDate Thu Apr 24 22:57:30 EDT 2025
Thu Jul 03 08:37:49 EDT 2025
Fri Feb 21 01:12:36 EST 2025
IsDoiOpenAccess true
IsOpenAccess true
IsPeerReviewed true
IsScholarly true
Issue 3
Keywords Partial programs
C language
parsing
type inference
Language English
License Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than the author(s) must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from Permissions@acm.org.
LinkModel OpenURL
MergedId FETCHMERGED-LOGICAL-a244t-6c9ff4b1d61ed7e9e26bfab2736b25358abcdd9858a811fe06331b4aff71938a3
OpenAccessLink https://dl.acm.org/doi/10.1145/3421472
PageCount 71
ParticipantIDs crossref_primary_10_1145_3421472
crossref_citationtrail_10_1145_3421472
acm_primary_3421472
PublicationCentury 2000
PublicationDate 2020-12-01
PublicationDateYYYYMMDD 2020-12-01
PublicationDate_xml – month: 12
  year: 2020
  text: 2020-12-01
  day: 01
PublicationDecade 2020
PublicationPlace New York, NY, USA
PublicationPlace_xml – name: New York, NY, USA
PublicationTitle ACM transactions on programming languages and systems
PublicationTitleAbbrev ACM TOPLAS
PublicationYear 2020
Publisher ACM
Publisher_xml – name: ACM
References Robbert Krebbers and Freek Wiedijk. 2015. A Typed C11 Semantics for Interactive Theorem Proving. In CPP. ACM, 15--27.
Jeffrey S. Foster, Manuel Fähndrich, and Alexander Aiken. 1999. A theory of type qualifiers. ACM SIGPLAN Not. 34, 5 (1999), 192--203.
ANSI-Standard. 1989. ANSI X3.159-1989—The C Programming Language. American National Standards Institute (ANSI), Washington, D.C., USA.
Mitchell Wand. 1987b. A simple algorithm and proof for type inference. Fundam. Informa. 10, 2 (1987), 115--121.
Nikolaos S. Papaspyrou. 2001. Denotational semantics of ANSI C. Comput. Stand. Interf. 23, 3 (2001), 169--185.
Nikolaos S. Papaspyrou. 1998. A Formal Semantics for the C Programming Language. Ph.D. Dissertation. National Technical University of Athens. Athens, Greece.
Peng Zhao and José Nelson Amaral. 2003. To inline or not to inline? Enhanced inlining decisions. In LCPC. Springer, Germany, 405--419.
Simon Peyton Jones et al. 2003. The Haskell 98 language and libraries: The revised report. J. Funct. Prog. 13, 1 (Jan. 2003), 0--255.
Paul Gazzillo and Robert Grimm. 2012. SuperC: Parsing all of C by taming the preprocessor. ACM SIGPLAN Not. 47, 6 (2012), 323--334.
Stefan Kaes. 1992. Type inference in the presence of overloading, subtyping and recursive types. In ACM SIGPLAN Lisp Pointers. ACM, 193--204.
Marcelo Novaes, Vinícius Petrucci, Abdoulaye Gamatié, and Fernando Magno Quintão Pereira. 2019. Compiler-assisted adaptive program scheduling in Big.LITTLE systems: Poster. In PPoPP. ACM, New York, NY, 429--430.
David Evans. 1996. Static detection of dynamic memory errors. In PLDI, Vol. 31. ACM, 44--53.
Anderson Faustino, Bruno Kind, José Wesley Magalhães, Jerônimo Rocha, Breno Guimarães, and Fernando Magno Quintão Pereira. 2020. AnghaBench: A Synthetic Collection of Benchmarks Mined from Open-Source Repositories. Technical Report 01-2020. Universidade Federal de Minas Gerais.
Simon Peyton Jones, Dimitrios Vytiniotis, Stephanie Weirich, and Geoffrey Washburn. 2006. Simple unification-based type inference for GADTs. In ICFP, Vol. 41. ACM, 50--61.
Jyothi Krishna Viswakaran Sreelatha, Shankar Balachandran, and Rupesh Nasre. 2018. CHOAMP: Cost based hardware optimization for asymmetric multicore processors. Trans. Multi-Scale Comput. Syst. 4, 2 (2018), 163--176.
Rainer Koppler. 1997. A systematic approach to fuzzy parsing. Softw. Pract. Exper. 27, 6 (1997), 637--649.
Simon Peyton Jones, Geoffrey Washburn, and Stephanie Weirich. 2004. Wobbly Types: Type Inference for Generalised Algebraic Data Types. Technical Report. Technical Report MS-CIS-05-26, University of Pennsylvania.
Henrique Nazaré, Izabela Maffra, Willer Santos, Leonardo Barbosa, Laure Gonnord, and Fernando Magno Quintao Pereira. 2014. Validation of memory accesses through symbolic analyses. In OOPSLA. ACM, 791--809.
Benjamin C. Pierce and David N. Turner. 2000. Local type inference. ACM Trans. Prog. Lang. Syst. 22, 1 (2000), 1--44.
François Pottier. 1998. A framework for type inference with subtyping. In ACM SIGPLAN Not. 34 (1998). ACM, 228--238.
Wolfgang Naraschewski and Tobias Nipkow. 1999. Type inference verified: Algorithm W in Isabelle/HOL. J. Autom. Reas. 23, 3 (1999), 299--318.
Jakob Rehof. 1998. The Complexity of Simple Subtyping Systems. Ph.D. Dissertation. University of Copenhagen, Denmark.
Walter R. Bischofberger. 1993. Sniff: A pragmatic approach to a C++ programming environment (abstract). OOPS Messenger 4, 2 (1993), 229.
Cristian Cadar, Daniel Dunbar, and Dawson Engler. 2008. KLEE: Unassisted and automatic generation of high-coverage tests for complex systems programs. In OSDI. USENIX, 209--224.
Jerzy Tiuryn and Mitchell Wand. 1993. Type reconstruction with recursive types and atomic subtyping. In CAAP. Springer, 686--701.
Alberto Martelli and Ugo Montanari. 1982. An efficient unification algorithm. ACM Trans. Prog. Lang. Syst. 4, 2 (1982), 258--282.
ISO-Standard. 1990. ISO/IEC 9899:1990 - The C Programming Language. International Organization for Standardization (ISO), Geneva, Switzerland.
ISO-Standard. 2011. ISO/IEC 9899:2011 - The C Programming Language. International Organization for Standardization (ISO), Geneva, Switzerland.
Robbert Krebbers. 2015. The C Standard Formalized in Coq. Ph.D. Dissertation. Radboud University, Nijmegen, NL.
Scott McPeak and George C. Necula. 2004. Elkhound: A fast, practical GLR parser generator. In CC. Springer, 73--88.
Matt Noonan, Alexey Loginov, and David Cok. 2016. Polymorphic type inference for machine code. In PLDI. ACM, 27--41.
Leandro T. C. Melo. 2020. Supplement to: Type Inference for C: Applications to the Static Analysis of Incomplete Programs. Retrieved from http://ltcmelo.com/resources/TypeInferenceForC_Supplement.pdf.
Douglas Simon, John Cavazos, Christian Wimmer, and Sameer Kulkarni. 2013. Automatic construction of inlining heuristics using machine learning. In CGO. IEEE Computer Society, Washington, DC, 1--12. DOI:https://doi.org/10.1109/CGO.2013.6495004
Gregory Knapen, Bruno Laguë, Michel Dagenais, and Ettore Merlo. 1999. Parsing C++ despite missing declarations. In IWPC. IEEE, 114--125.
Yoann Padioleau. 2009. Parsing C/C++ code without pre-processing. In CC. Springer, 109--125.
Marc A. Kaplan and Jeffrey D. Ullman. 1978. A general scheme for the automatic inference of variable types. In POPL. ACM, 60--75.
Vincent Simonet. 2003. Type inference with structural subtyping: A faithful formalization of an efficient constraint solver. In APLAS. Springer, 283--302.
Raphael Ernani Rodrigues, Victor Hugo Sperle Campos, and Fernando Magno Quintao Pereira. 2013. A fast and low overhead technique to secure programs against integer overflows. In CGO. ACM, 1--11.
Dimitrios Vytiniotis, Simon Peyton Jones, and José Pedro Magalhães. 2012. Equality proofs and deferred type errors: A compiler pearl. In ICFP. Association for Computing Machinery, New York, NY, 341--352. DOI:https://doi.org/10.1145/2364527.2364554
Kyndylan Nienhuis, Kayvan Memarian, and Peter Sewell. 2016. An operational semantics for C/C++11 concurrency. In OOPSLA. 111--128.
Michael Bayne, Richard Cook, and Michael D. Ernst. 2011. Always-available static and dynamic feedback. In ICSE. ACM, New York, NY, 521--530. DOI:https://doi.org/10.1145/1985793.1985864
Phitchaya Mangpo Phothilimthana, Aditya Thakur, Rastislav Bodik, and Dinakar Dhurjati. 2016. Scaling Up superoptimization. In ASPLOS. ACM, New York, NY, 297--310. DOI:https://doi.org/10.1145/2872362.2872387
François Pottier and Didier Rémy. 2005. The essence of ML type inference. In Advanced Topics in Types and Programming Languages, Benjamin C. Pierce (Ed.). The MIT, 389--489.
Stephen Dolan and Alan Mycroft. 2017. Polymorphism, subtyping, and type inference in MLsub. In POPL. ACM, 1--13.
Roger Hindley. 1969. The principal type-scheme of an object in combinatory logic. Trans. Amer. Math. Soc. 146 (1969), 29--60.
Patrice Godefroid, Nils Klarlund, and Koushik Sen. 2005. DART: Directed automated random testing. In PLDI. ACM, 213--223.
Patrice Godefroid. 2014. Micro execution. In ICSE. ACM, 539--549.
Benjamin C. Pierce. 2004. Types and Programming Languages (1st ed.). The MIT Press.
Eric Schkufza, Rahul Sharma, and Alex Aiken. 2016. Stochastic program optimization. Commun. ACM 59, 2 (2016), 114--122. DOI:https://doi.org/10.1145/2863701
Gabriel Poesia, Breno Campos Ferreira Guimarães, Fabricio Ferracioli, and Fernando Magno Quintão Pereira. 2017. Static placement of computation on heterogeneous devices. In POPL 1, OOPSLA (2017), 50:1--50:28.
Pascal Cuoq, Florent Kirchner, Nikolai Kosmatov, Virgile Prevosto, Julien Signoles, and Boris Yakobowski. 2012. Frama-c. In SEFM. Springer, 233--247.
Mircea Namolaru, Albert Cohen, Grigori Fursin, Ayal Zaks, and Ari Freund. 2010. Practical aggregation of semantical program properties for machine learning based optimization. In CASES. ACM, New York, NY, 197--206. DOI:https://doi.org/10.1145/1878921.1878951
Didier Rémy. 1992. Extending ML Type System with a Sorted Equational Theory. Research Report 1766. Institut National de Recherche en Informatique et Automatisme, Rocquencourt, BP 105, 78 153 Le Chesnay Cedex, France.
The Qt Project. 2017. The Qt Creator IDE. Retrieved from https://www.qt.io/ide/.
Nikolai Tillmann and Jonathan De Halleux. 2008. Pex: White box test generation for .NET. In TAP. Springer, 134--153.
Karl-Filip Faxén. 2002. A static semantics for Haskell. J. Funct. Prog. 12, 5 (2002), 295--357.
Martin Odersky, Christoph Zenger, and Matthias Zenger. 2001. Colored local type inference. ACM SIGPLAN Not. 36, 3 (2001), 41--53.
George C. Necula, Scott McPeak, Shree P. Rahul, and Westley Weimer. 2002b. CIL: Intermediate language and tools for analysis and transformation of C programs. In CC. Springer, 213--228.
Catherine Dubois and Valerie Menissier-Morain. 1999. Certification of a type inference tool for ML: Damas--Milner within Coq. J. Auto. Reas. 23, 3 (1999), 319--346.
Satish Chandra and Thomas Reps. 1999. Physical type checking for C. In ACM SIGSOFT Softw. Eng. Notes, Vol. 24. ACM, 66--75.
Martin Odersky, Martin Sulzmann, and Martin Wehr. 1999. Type inference with constrained types. Theor. Pract. Obj. Syst. 5, 1 (1999), 35--55.
Runtime Verification Inc. 2017. RV-Match. Retrieved from https://runtimeverification.com/match/.
Mitchell Wand. 1987a. Complete type inference for simple objects. In LICS.
ISO-Standard. 1999. ISO/IEC 9899:1999 - The C Programming Language. International Organization for Standardization (ISO), Geneva, Switzerland.
George C. Necula, Scott McPeak, and Westley Weimer. 2002a. CCured: Type-safe retrofitting of legacy code. In ACM SIGPLAN Not. 37 (2002). ACM, 128--139.
Sandrine Blazy and Xavier Leroy. 2009. Mechanized semantics for the Clight subset of the C language. J. Autom. Reas. 43, 3 (2009), 263--288.
Luis Damas and Robin Milner. 1982. Principal type-schemes for functional programs. In POPL. ACM, 207--212.
You-Chin Fuh and Prateek Mishra. 1988. Type inference with subtypes. In ESOP. Springer, 94--114.
J. A. Robinson. 1965. A machine-oriented logic based on the resolution principle. J. ACM 12, 1 (1965), 23-
e_1_2_2_6_1
e_1_2_2_20_1
Williams Nicky (e_1_2_2_104_1)
e_1_2_2_2_1
Fuh You-Chin (e_1_2_2_28_1)
e_1_2_2_62_1
e_1_2_2_105_1
e_1_2_2_43_1
e_1_2_2_66_1
e_1_2_2_101_1
Pottier François (e_1_2_2_80_1)
Su Zhendong (e_1_2_2_95_1)
e_1_2_2_47_1
Sterling Leon (e_1_2_2_94_1)
al Simon Peyton (e_1_2_2_71_1) 2003; 13
Moonen Leon (e_1_2_2_54_1)
e_1_2_2_13_1
Wand Mitchell (e_1_2_2_103_1) 1988
e_1_2_2_51_1
e_1_2_2_32_1
e_1_2_2_17_1
e_1_2_2_78_1
e_1_2_2_70_1
e_1_2_2_93_1
Nielson Flemming (e_1_2_2_61_1) 2005
Tillmann Nikolai (e_1_2_2_97_1) 2008
e_1_2_2_25_1
Zhao Peng (e_1_2_2_106_1)
e_1_2_2_5_1
Cardelli Luca (e_1_2_2_12_1)
e_1_2_2_21_1
e_1_2_2_1_1
e_1_2_2_40_1
e_1_2_2_63_1
e_1_2_2_86_1
Cadar Cristian (e_1_2_2_11_1) 2008
e_1_2_2_9_1
e_1_2_2_29_1
e_1_2_2_67_1
e_1_2_2_102_1
Cuoq Pascal (e_1_2_2_16_1)
Faustino Anderson (e_1_2_2_24_1) 2020
Jim Trevor (e_1_2_2_38_1) 2002
Rodrigues Raphael Ernani (e_1_2_2_85_1) 2013
Novaes Marcelo (e_1_2_2_64_1)
Larochelle David (e_1_2_2_46_1) 2001; 32
e_1_2_2_14_1
Bansal Sorav (e_1_2_2_3_1)
e_1_2_2_10_1
e_1_2_2_52_1
e_1_2_2_75_1
e_1_2_2_18_1
e_1_2_2_33_1
e_1_2_2_56_1
e_1_2_2_79_1
Wadler Philip (e_1_2_2_100_1)
Jones Simon Peyton (e_1_2_2_39_1) 2004
Kaplan Marc A. (e_1_2_2_41_1) 1978
Programming Language IEC (e_1_2_2_37_1)
e_1_2_2_4_1
e_1_2_2_49_1
e_1_2_2_22_1
e_1_2_2_87_1
e_1_2_2_8_1
e_1_2_2_45_1
e_1_2_2_26_1
Hindley Roger (e_1_2_2_34_1) 1969; 146
e_1_2_2_83_1
e_1_2_2_60_1
Simonet Vincent (e_1_2_2_89_1)
Necula George C. (e_1_2_2_59_1) 2002
e_1_2_2_30_1
e_1_2_2_19_1
e_1_2_2_53_1
e_1_2_2_99_1
e_1_2_2_57_1
Programming Language IEC (e_1_2_2_35_1)
Mycroft Alan (e_1_2_2_55_1)
e_1_2_2_91_1
Palsberg Jens (e_1_2_2_68_1) 1991
McPeak Scott (e_1_2_2_48_1) 2004
e_1_2_2_23_1
e_1_2_2_7_1
Poesia Gabriel (e_1_2_2_76_1) 2017
e_1_2_2_42_1
e_1_2_2_65_1
e_1_2_2_84_1
Smith Geoffrey (e_1_2_2_90_1)
e_1_2_2_27_1
e_1_2_2_88_1
Programming Language IEC (e_1_2_2_36_1)
Cummins Chris (e_1_2_2_15_1)
Jones Simon Peyton (e_1_2_2_72_1) 2006; 41
e_1_2_2_31_1
e_1_2_2_73_1
e_1_2_2_96_1
Tiuryn Jerzy (e_1_2_2_98_1)
Pierce Benjamin C. (e_1_2_2_74_1)
e_1_2_2_58_1
e_1_2_2_77_1
e_1_2_2_50_1
e_1_2_2_92_1
References_xml – reference: Leandro T. C. Melo. 2020. Supplement to: Type Inference for C: Applications to the Static Analysis of Incomplete Programs. Retrieved from http://ltcmelo.com/resources/TypeInferenceForC_Supplement.pdf.
– reference: Martin Odersky, Martin Sulzmann, and Martin Wehr. 1999. Type inference with constrained types. Theor. Pract. Obj. Syst. 5, 1 (1999), 35--55.
– reference: Didier Rémy. 1992. Extending ML Type System with a Sorted Equational Theory. Research Report 1766. Institut National de Recherche en Informatique et Automatisme, Rocquencourt, BP 105, 78 153 Le Chesnay Cedex, France.
– reference: Patrice Godefroid. 2014. Micro execution. In ICSE. ACM, 539--549.
– reference: Leandro T. C. Melo, Rodrigo G. Ribeiro, Marcus R. de Araujo, and Fernando Magno Quintao Pereira. 2017. Inference of static semantics for incomplete C programs. Proc. ACM Prog. Lang. 2, POPL (Dec. 2017). DOI:https://doi.org/10.1145/3158117
– reference: Walter R. Bischofberger. 1993. Sniff: A pragmatic approach to a C++ programming environment (abstract). OOPS Messenger 4, 2 (1993), 229.
– reference: Rainer Koppler. 1997. A systematic approach to fuzzy parsing. Softw. Pract. Exper. 27, 6 (1997), 637--649.
– reference: Alberto Martelli and Ugo Montanari. 1982. An efficient unification algorithm. ACM Trans. Prog. Lang. Syst. 4, 2 (1982), 258--282.
– reference: John C. Mitchell. 1991. Type inference with simple subtypes. J. Funct. Prog. 1, 3 (1991), 245--285.
– reference: Amir Hossein Ashouri, Giovanni Mariani, Gianluca Palermo, Eunjung Park, John Cavazos, and Cristina Silvano. 2016. COBAYN: Compiler autotuning framework using Bayesian networks. Trans. Archit. Code Optim. 13, 2 (2016), 21:1--21:25. DOI:https://doi.org/10.1145/2928270
– reference: Cristian Cadar, Daniel Dunbar, and Dawson Engler. 2008. KLEE: Unassisted and automatic generation of high-coverage tests for complex systems programs. In OSDI. USENIX, 209--224.
– reference: Chris Cummins, Pavlos Petoumenos, Zheng Wang, and Hugh Leather. 2017. Synthesizing benchmarks for predictive modeling. In CGO. IEEE, Piscataway, NJ, 86--99.
– reference: Marcelo Novaes, Vinícius Petrucci, Abdoulaye Gamatié, and Fernando Magno Quintão Pereira. 2019. Compiler-assisted adaptive program scheduling in Big.LITTLE systems: Poster. In PPoPP. ACM, New York, NY, 429--430.
– reference: J. A. Robinson. 1965. A machine-oriented logic based on the resolution principle. J. ACM 12, 1 (1965), 23--41.
– reference: Runtime Verification Inc. 2017. RV-Match. Retrieved from https://runtimeverification.com/match/.
– reference: Robbert Krebbers and Freek Wiedijk. 2015. A Typed C11 Semantics for Interactive Theorem Proving. In CPP. ACM, 15--27.
– reference: Gabriel Poesia, Breno Campos Ferreira Guimarães, Fabricio Ferracioli, and Fernando Magno Quintão Pereira. 2017. Static placement of computation on heterogeneous devices. In POPL 1, OOPSLA (2017), 50:1--50:28.
– reference: Matt Noonan, Alexey Loginov, and David Cok. 2016. Polymorphic type inference for machine code. In PLDI. ACM, 27--41.
– reference: Stefan Kaes. 1992. Type inference in the presence of overloading, subtyping and recursive types. In ACM SIGPLAN Lisp Pointers. ACM, 193--204.
– reference: Geoffrey Smith and Dennis Volpano. 1996. Towards an ML-style polymorphic type system for C. In ESOP. Springer, 341--355.
– reference: Benjamin C. Pierce and David N. Turner. 2000. Local type inference. ACM Trans. Prog. Lang. Syst. 22, 1 (2000), 1--44.
– reference: Paul Gazzillo and Robert Grimm. 2012. SuperC: Parsing all of C by taming the preprocessor. ACM SIGPLAN Not. 47, 6 (2012), 323--334.
– reference: Satish Chandra and Thomas Reps. 1999. Physical type checking for C. In ACM SIGSOFT Softw. Eng. Notes, Vol. 24. ACM, 66--75.
– reference: Jerzy Tiuryn and Mitchell Wand. 1993. Type reconstruction with recursive types and atomic subtyping. In CAAP. Springer, 686--701.
– reference: Chris Hathhorn, Chucky Ellison, and Grigore Rosu. 2015. Defining the undefinedness of C. In PLDI. ACM, 336--345.
– reference: François Pottier. 1996. Simplifying subtyping constraints. In ACM SIGPLAN Not. 31 (1996). ACM, 122--133.
– reference: Mark Batty, Alastair F. Donaldson, and John Wickerson. 2016. Overhauling SC atomics in C11 and OpenCL. In POPL, Vol. 51. ACM, 634--648.
– reference: Mitchell Wand. 1988. Corrigendum: Complete type inference for simple objects. In LCS.
– reference: Robin Milner. 1978. A theory of type polymorphism in programming. J. Comput. Syst. Sci. 17, 3 (1978), 348--375.
– reference: Barthélémy Dagenais and Laurie Hendren. 2008. Enabling static analysis for partial Java programs. In OOPSLA. ACM, 313--328.
– reference: Yoann Padioleau. 2009. Parsing C/C++ code without pre-processing. In CC. Springer, 109--125.
– reference: Luca Cardelli and Peter Wegner. 1985. On understanding types, data abstraction, and polymorphism. ACM Comput. Surv. 17, 4 (1985), 471--523.
– reference: Gregory Knapen, Bruno Laguë, Michel Dagenais, and Ettore Merlo. 1999. Parsing C++ despite missing declarations. In IWPC. IEEE, 114--125.
– reference: Xuejun Yang, Yang Chen, Eric Eide, and John Regehr. 2011. Finding and understanding bugs in C compilers. In PLDI. ACM, New York, NY, 283--294. DOI:https://doi.org/10.1145/1993498.1993532
– reference: Scott McPeak and George C. Necula. 2004. Elkhound: A fast, practical GLR parser generator. In CC. Springer, 73--88.
– reference: João Fabrício Filho, Luis Gustavo Araujo Rodriguez, and Anderson Faustino da Silva. 2018. Yet another intelligent code-generating system: A flexible and low-cost solution. J. Comput. Sci. Technol. 33, 5 (2018), 940--965. DOI:https://doi.org/10.1007/s11390-018-1867-7
– reference: Nikolaos S. Papaspyrou. 2001. Denotational semantics of ANSI C. Comput. Stand. Interf. 23, 3 (2001), 169--185.
– reference: Raphael Ernani Rodrigues, Victor Hugo Sperle Campos, and Fernando Magno Quintao Pereira. 2013. A fast and low overhead technique to secure programs against integer overflows. In CGO. ACM, 1--11.
– reference: Kyndylan Nienhuis, Kayvan Memarian, and Peter Sewell. 2016. An operational semantics for C/C++11 concurrency. In OOPSLA. 111--128.
– reference: You-Chin Fuh and Prateek Mishra. 1988. Type inference with subtypes. In ESOP. Springer, 94--114.
– reference: Geoffrey S. Smith. 1994. Principal type schemes for functional programs with overloading and subtyping. Sci. Comput. Prog. 23, 2--3 (1994), 197--226.
– reference: Didier Rémy. 2017. Type Systems for Programming Languages. Retrieved from http://pauillac.inria.fr/ remy/mpri/cours.pdf.
– reference: Jeffrey S. Foster, Manuel Fähndrich, and Alexander Aiken. 1999. A theory of type qualifiers. ACM SIGPLAN Not. 34, 5 (1999), 192--203.
– reference: Robbert Krebbers. 2015. The C Standard Formalized in Coq. Ph.D. Dissertation. Radboud University, Nijmegen, NL.
– reference: Peng Zhao and José Nelson Amaral. 2003. To inline or not to inline? Enhanced inlining decisions. In LCPC. Springer, Germany, 405--419.
– reference: Patrice Godefroid, Nils Klarlund, and Koushik Sen. 2005. DART: Directed automated random testing. In PLDI. ACM, 213--223.
– reference: David Larochelle, David Evans, et al. 2001. Statically detecting likely buffer overflow vulnerabilities. In USENIX Security, Vol. 32. Washington DC.
– reference: Michael Bayne, Richard Cook, and Michael D. Ernst. 2011. Always-available static and dynamic feedback. In ICSE. ACM, New York, NY, 521--530. DOI:https://doi.org/10.1145/1985793.1985864
– reference: Kayvan Memarian, Justus Matthiesen, James Lingard, Kyndylan Nienhuis, David Chisnall, Robert N. M. Watson, and Peter Sewell. 2016. Into the depths of C: Elaborating the De Facto standards. In PLDI. ACM, 1--15.
– reference: Dan Grossman. 2006. Quantified types in an imperative language. ACM Trans. Prog. Lang. Syst. 28, 3 (May 2006), 429--475. DOI:https://doi.org/10.1145/1133651.1133653
– reference: ANSI-Standard. 1989. ANSI X3.159-1989—The C Programming Language. American National Standards Institute (ANSI), Washington, D.C., USA.
– reference: Simon Peyton Jones et al. 2003. The Haskell 98 language and libraries: The revised report. J. Funct. Prog. 13, 1 (Jan. 2003), 0--255.
– reference: Mitchell Wand. 1987b. A simple algorithm and proof for type inference. Fundam. Informa. 10, 2 (1987), 115--121.
– reference: David Evans. 1996. Static detection of dynamic memory errors. In PLDI, Vol. 31. ACM, 44--53.
– reference: Roger Hindley. 1969. The principal type-scheme of an object in combinatory logic. Trans. Amer. Math. Soc. 146 (1969), 29--60.
– reference: ISO-Standard. 2011. ISO/IEC 9899:2011 - The C Programming Language. International Organization for Standardization (ISO), Geneva, Switzerland.
– reference: ISO-Standard. 1999. ISO/IEC 9899:1999 - The C Programming Language. International Organization for Standardization (ISO), Geneva, Switzerland.
– reference: Marc A. Kaplan and Jeffrey D. Ullman. 1978. A general scheme for the automatic inference of variable types. In POPL. ACM, 60--75.
– reference: Nikolai Tillmann and Jonathan De Halleux. 2008. Pex: White box test generation for .NET. In TAP. Springer, 134--153.
– reference: Karl-Filip Faxén. 2002. A static semantics for Haskell. J. Funct. Prog. 12, 5 (2002), 295--357.
– reference: George C. Necula, Scott McPeak, Shree P. Rahul, and Westley Weimer. 2002b. CIL: Intermediate language and tools for analysis and transformation of C programs. In CC. Springer, 213--228.
– reference: Dimitrios Vytiniotis, Simon Peyton Jones, and José Pedro Magalhães. 2012. Equality proofs and deferred type errors: A compiler pearl. In ICFP. Association for Computing Machinery, New York, NY, 341--352. DOI:https://doi.org/10.1145/2364527.2364554
– reference: Mitchell Wand. 1987a. Complete type inference for simple objects. In LICS.
– reference: Nicky Williams, Bruno Marre, Patricia Mouy, and Muriel Roger. 2005. PathCrawler: Automatic generation of path tests by combining static and dynamic analysis. In EDCC. Springer, 281--292.
– reference: Luca Cardelli. 1984. A semantics of multiple inheritance. In Semantics of Data Types. Springer, 51--67.
– reference: Alan Mycroft. 1999. Type-based decompilation (or program reconstruction via type reconstruction). In ESOP. Springer, 208--223.
– reference: Jens Palsberg and Michael I. Schwartzbach. 1991. Obj.-orien. Type Inference. 26 (1991). ACM.
– reference: Trevor Jim, J. Greg Morrisett, Dan Grossman, Michael W. Hicks, James Cheney, and Yanling Wang. 2002. Cyclone: A safe dialect of C. In ATEC. USENIX Association, 275--288.
– reference: Alan H. Borning and Daniel H. H. Ingalls. 1982. A type declaration and inference system for smalltalk. In POPL. ACM, New York, NY, 133--141. DOI:https://doi.org/10.1145/582153.582168
– reference: Catherine Dubois and Valerie Menissier-Morain. 1999. Certification of a type inference tool for ML: Damas--Milner within Coq. J. Auto. Reas. 23, 3 (1999), 319--346.
– reference: François Pottier and Didier Rémy. 2005. The essence of ML type inference. In Advanced Topics in Types and Programming Languages, Benjamin C. Pierce (Ed.). The MIT, 389--489.
– reference: Jyothi Krishna Viswakaran Sreelatha, Shankar Balachandran, and Rupesh Nasre. 2018. CHOAMP: Cost based hardware optimization for asymmetric multicore processors. Trans. Multi-Scale Comput. Syst. 4, 2 (2018), 163--176.
– reference: François Pottier. 1998. A framework for type inference with subtyping. In ACM SIGPLAN Not. 34 (1998). ACM, 228--238.
– reference: ISO-Standard. 1990. ISO/IEC 9899:1990 - The C Programming Language. International Organization for Standardization (ISO), Geneva, Switzerland.
– reference: Philip Wadler and Robert Bruce Findler. 2009. Well-typed programs can’t be blamed. In ESOP. Springer, 1--16.
– reference: Mircea Namolaru, Albert Cohen, Grigori Fursin, Ayal Zaks, and Ari Freund. 2010. Practical aggregation of semantical program properties for machine learning based optimization. In CASES. ACM, New York, NY, 197--206. DOI:https://doi.org/10.1145/1878921.1878951
– reference: Pascal Cuoq, Florent Kirchner, Nikolai Kosmatov, Virgile Prevosto, Julien Signoles, and Boris Yakobowski. 2012. Frama-c. In SEFM. Springer, 233--247.
– reference: Zhendong Su, Alexander Aiken, Joachim Niehren, Tim Priesnitz, and Ralf Treinen. 2002. The First-order Theory of Subtyping Constraints. Vol. 37. ACM.
– reference: Tiago Cariolano de Souza Xavier and Anderson Faustino da Silva. 2018. Exploration of compiler optimization sequences using a hybrid approach. Comput. Inform. 37, 1 (2018), 165--185.
– reference: Leon Moonen. 2001. Generating robust parsers using island grammars. In WCRE. IEEE, 13--22.
– reference: Jakob Rehof. 1998. The Complexity of Simple Subtyping Systems. Ph.D. Dissertation. University of Copenhagen, Denmark.
– reference: Flemming Nielson, Hanne Riis Nielson, and Chris Hankin. 2005. Principles of Program Analysis. Springer.
– reference: Rudy Bunel, Alban Desmaison, M. Pawan Kumar, Philip H. S. Torr, and Pushmeet Kohli. 2017. Learning to superoptimize programs. In ICLR. OpenReview.
– reference: Wolfgang Naraschewski and Tobias Nipkow. 1999. Type inference verified: Algorithm W in Isabelle/HOL. J. Autom. Reas. 23, 3 (1999), 299--318.
– reference: Sorav Bansal and Alex Aiken. 2008. Binary translation using peephole superoptimizers. In OSDI. USENIX Association, Berkeley, CA, 177--192.
– reference: Martin Odersky, Christoph Zenger, and Matthias Zenger. 2001. Colored local type inference. ACM SIGPLAN Not. 36, 3 (2001), 41--53.
– reference: Phitchaya Mangpo Phothilimthana, Aditya Thakur, Rastislav Bodik, and Dinakar Dhurjati. 2016. Scaling Up superoptimization. In ASPLOS. ACM, New York, NY, 297--310. DOI:https://doi.org/10.1145/2872362.2872387
– reference: Eric Schkufza, Rahul Sharma, and Alex Aiken. 2016. Stochastic program optimization. Commun. ACM 59, 2 (2016), 114--122. DOI:https://doi.org/10.1145/2863701
– reference: Vincent Simonet. 2003. Type inference with structural subtyping: A faithful formalization of an efficient constraint solver. In APLAS. Springer, 283--302.
– reference: Sandrine Blazy and Xavier Leroy. 2009. Mechanized semantics for the Clight subset of the C language. J. Autom. Reas. 43, 3 (2009), 263--288.
– reference: Benjamin C. Pierce. 2004. Types and Programming Languages (1st ed.). The MIT Press.
– reference: The Qt Project. 2017. The Qt Creator IDE. Retrieved from https://www.qt.io/ide/.
– reference: Bjarne Steensgaard. 1996. Points-to analysis in almost linear time. In POPL. 32--41.
– reference: François Pottier and Yann Régis-Gianas. 2006. Stratified type inference for generalized algebraic data types. In POPL. ACM, New York, NY, 232--244. DOI:https://doi.org/10.1145/1111037.1111058
– reference: Douglas Simon, John Cavazos, Christian Wimmer, and Sameer Kulkarni. 2013. Automatic construction of inlining heuristics using machine learning. In CGO. IEEE Computer Society, Washington, DC, 1--12. DOI:https://doi.org/10.1109/CGO.2013.6495004
– reference: Anderson Faustino, Bruno Kind, José Wesley Magalhães, Jerônimo Rocha, Breno Guimarães, and Fernando Magno Quintão Pereira. 2020. AnghaBench: A Synthetic Collection of Benchmarks Mined from Open-Source Repositories. Technical Report 01-2020. Universidade Federal de Minas Gerais.
– reference: Nikolaos S. Papaspyrou. 1998. A Formal Semantics for the C Programming Language. Ph.D. Dissertation. National Technical University of Athens. Athens, Greece.
– reference: Gergö Barany. 2017. Liveness-driven random program generation. In LOPSTR. Springer, Germany, 112--127. DOI:https://doi.org/10.1007/978-3-319-94460-9_7
– reference: George C. Necula, Scott McPeak, and Westley Weimer. 2002a. CCured: Type-safe retrofitting of legacy code. In ACM SIGPLAN Not. 37 (2002). ACM, 128--139.
– reference: Stephen Dolan and Alan Mycroft. 2017. Polymorphism, subtyping, and type inference in MLsub. In POPL. ACM, 1--13.
– reference: Chucky Ellison and Grigore Rosu. 2012. An executable formal semantics of C with applications. In POPL, Vol. 47. ACM, 533--544.
– reference: Simon Peyton Jones, Geoffrey Washburn, and Stephanie Weirich. 2004. Wobbly Types: Type Inference for Generalised Algebraic Data Types. Technical Report. Technical Report MS-CIS-05-26, University of Pennsylvania.
– reference: Simon Peyton Jones, Dimitrios Vytiniotis, Stephanie Weirich, and Geoffrey Washburn. 2006. Simple unification-based type inference for GADTs. In ICFP, Vol. 41. ACM, 50--61.
– reference: Leon Sterling. 1994. The Art of Prolog (2nd ed.). The MIT Press.
– reference: Luis Damas and Robin Milner. 1982. Principal type-schemes for functional programs. In POPL. ACM, 207--212.
– reference: Henrique Nazaré, Izabela Maffra, Willer Santos, Leonardo Barbosa, Laure Gonnord, and Fernando Magno Quintao Pereira. 2014. Validation of memory accesses through symbolic analyses. In OOPSLA. ACM, 791--809.
– volume-title: The First-order Theory of Subtyping Constraints
  ident: e_1_2_2_95_1
– volume-title: The Art of Prolog
  ident: e_1_2_2_94_1
– ident: e_1_2_2_43_1
  doi: 10.1002/(SICI)1097-024X(199706)27:6<637::AID-SPE99>3.0.CO;2-3
– volume-title: Type-based decompilation (or program reconstruction via type reconstruction)
  ident: e_1_2_2_55_1
– ident: e_1_2_2_57_1
  doi: 10.1023/A:1006277616879
– ident: e_1_2_2_20_1
  doi: 10.1145/3009837.3009882
– volume-title: Pex: White box test generation for
  year: 2008
  ident: e_1_2_2_97_1
– ident: e_1_2_2_58_1
  doi: 10.1145/2714064.2660205
– volume-title: PPoPP
  ident: e_1_2_2_64_1
– volume: 13
  start-page: 1
  year: 2003
  ident: e_1_2_2_71_1
  article-title: The Haskell 98 language and libraries: The revised report
  publication-title: J. Funct. Prog.
– volume-title: To inline or not to inline? Enhanced inlining decisions
  ident: e_1_2_2_106_1
– ident: e_1_2_2_6_1
  doi: 10.1145/1985793.1985864
– volume-title: Generating robust parsers using island grammars
  ident: e_1_2_2_54_1
– ident: e_1_2_2_17_1
  doi: 10.1145/1449955.1449790
– volume-title: Jerônimo Rocha, Breno Guimarães, and Fernando Magno Quintão Pereira.
  year: 2020
  ident: e_1_2_2_24_1
– volume-title: Ullman
  year: 1978
  ident: e_1_2_2_41_1
– ident: e_1_2_2_87_1
  doi: 10.1145/2863701
– volume-title: International Organization for Standardization (ISO)
  ident: e_1_2_2_36_1
– volume-title: Binary translation using peephole superoptimizers
  ident: e_1_2_2_3_1
– ident: e_1_2_2_26_1
  doi: 10.1007/s11390-018-1867-7
– ident: e_1_2_2_91_1
  doi: 10.1016/0167-6423(94)00020-4
– volume-title: Fabricio Ferracioli, and Fernando Magno Quintão Pereira.
  year: 2017
  ident: e_1_2_2_76_1
– volume-title: International Organization for Standardization (ISO)
  ident: e_1_2_2_35_1
– ident: e_1_2_2_51_1
  doi: 10.1145/2980983.2908081
– volume-title: Synthesizing benchmarks for predictive modeling
  ident: e_1_2_2_15_1
– ident: e_1_2_2_21_1
  doi: 10.1023/A:1006285817788
– ident: e_1_2_2_50_1
  doi: 10.1145/3158117
– ident: e_1_2_2_105_1
  doi: 10.1145/1993498.1993532
– ident: e_1_2_2_75_1
  doi: 10.1145/345099.345100
– ident: e_1_2_2_49_1
– ident: e_1_2_2_78_1
  doi: 10.1145/289423.289448
– ident: e_1_2_2_84_1
  doi: 10.1145/321250.321253
– ident: e_1_2_2_88_1
  doi: 10.1109/CGO.2013.6495004
– ident: e_1_2_2_19_1
  doi: 10.4149/cai_2018_1_165
– volume-title: Wobbly Types: Type Inference for Generalised Algebraic Data Types. Technical Report. Technical Report MS-CIS-05-26
  year: 2004
  ident: e_1_2_2_39_1
– ident: e_1_2_2_70_1
  doi: 10.1016/S0920-5489(01)00059-9
– ident: e_1_2_2_22_1
  doi: 10.1145/2103656.2103719
– volume: 146
  start-page: 29
  year: 1969
  ident: e_1_2_2_34_1
  article-title: The principal type-scheme of an object in combinatory logic
  publication-title: Trans. Amer. Math. Soc.
– ident: e_1_2_2_52_1
  doi: 10.1016/0022-0000(78)90014-4
– ident: e_1_2_2_7_1
  doi: 10.1145/157710.157795
– ident: e_1_2_2_73_1
  doi: 10.1145/2872362.2872387
– ident: e_1_2_2_99_1
  doi: 10.1145/2364527.2364554
– volume-title: Corrigendum: Complete type inference for simple objects. In LCS.
  year: 1988
  ident: e_1_2_2_103_1
– ident: e_1_2_2_56_1
  doi: 10.1145/1878921.1878951
– ident: e_1_2_2_63_1
  doi: 10.1145/2980983.2908119
– volume-title: Types and Programming Languages
  ident: e_1_2_2_74_1
– volume-title: Towards an ML-style polymorphic type system for C
  ident: e_1_2_2_90_1
– volume-title: Type inference with structural subtyping: A faithful formalization of an efficient constraint solver
  ident: e_1_2_2_89_1
– ident: e_1_2_2_5_1
  doi: 10.1145/2837614.2837637
– ident: e_1_2_2_18_1
  doi: 10.1145/582153.582176
– ident: e_1_2_2_2_1
  doi: 10.1145/2928270
– ident: e_1_2_2_45_1
  doi: 10.1145/2676724.2693571
– volume-title: International Organization for Standardization (ISO)
  ident: e_1_2_2_37_1
– ident: e_1_2_2_79_1
  doi: 10.1145/1111037.1111058
– ident: e_1_2_2_60_1
  doi: 10.1145/503272.503286
– volume-title: KLEE: Unassisted and automatic generation of high-coverage tests for complex systems programs. In OSDI. USENIX, 209--224.
  year: 2008
  ident: e_1_2_2_11_1
– volume-title: Hanne Riis Nielson, and Chris Hankin
  year: 2005
  ident: e_1_2_2_61_1
– ident: e_1_2_2_9_1
  doi: 10.1145/582153.582168
– volume: 41
  volume-title: ICFP
  year: 2006
  ident: e_1_2_2_72_1
– volume-title: Type inference with subtypes
  ident: e_1_2_2_28_1
– volume-title: Necula
  year: 2004
  ident: e_1_2_2_48_1
– volume-title: Type reconstruction with recursive types and atomic subtyping
  ident: e_1_2_2_98_1
– ident: e_1_2_2_53_1
  doi: 10.1017/S0956796800000113
– ident: e_1_2_2_32_1
  doi: 10.1145/1133651.1133653
– ident: e_1_2_2_65_1
  doi: 10.1002/(SICI)1096-9942(199901/03)5:1<35::AID-TAPO4>3.0.CO;2-4
– volume-title: Advanced Topics in Types and Programming Languages, Benjamin C
  ident: e_1_2_2_80_1
– ident: e_1_2_2_77_1
  doi: 10.1145/232627.232642
– ident: e_1_2_2_92_1
  doi: 10.1109/TMSCS.2018.2791955
– ident: e_1_2_2_47_1
  doi: 10.1145/357162.357169
– ident: e_1_2_2_27_1
  doi: 10.1145/301631.301665
– volume-title: CIL: Intermediate language and tools for analysis and transformation of C programs
  year: 2002
  ident: e_1_2_2_59_1
– ident: e_1_2_2_33_1
  doi: 10.1145/2813885.2737979
– ident: e_1_2_2_1_1
– volume-title: Frama-c
  ident: e_1_2_2_16_1
– ident: e_1_2_2_96_1
– ident: e_1_2_2_102_1
  doi: 10.3233/FI-1987-10202
– ident: e_1_2_2_40_1
  doi: 10.1145/141478.141540
– volume: 32
  volume-title: USENIX Security
  year: 2001
  ident: e_1_2_2_46_1
– ident: e_1_2_2_62_1
  doi: 10.1145/3022671.2983997
– ident: e_1_2_2_42_1
– ident: e_1_2_2_23_1
  doi: 10.1145/231379.231389
– volume-title: PathCrawler: Automatic generation of path tests by combining static and dynamic analysis
  ident: e_1_2_2_104_1
– ident: e_1_2_2_8_1
  doi: 10.1007/s10817-009-9148-3
– ident: e_1_2_2_66_1
  doi: 10.1145/373243.360207
– ident: e_1_2_2_14_1
  doi: 10.1145/381788.316183
– ident: e_1_2_2_25_1
  doi: 10.1017/S0956796802004380
– ident: e_1_2_2_31_1
  doi: 10.1145/1065010.1065036
– ident: e_1_2_2_13_1
  doi: 10.1145/6041.6042
– ident: e_1_2_2_93_1
  doi: 10.1145/237721.237727
– ident: e_1_2_2_67_1
  doi: 10.1007/978-3-642-00722-4_9
– volume-title: Cyclone: A safe dialect
  year: 2002
  ident: e_1_2_2_38_1
– volume-title: Schwartzbach
  year: 1991
  ident: e_1_2_2_68_1
– ident: e_1_2_2_83_1
– volume-title: Well-typed programs can’t be blamed
  ident: e_1_2_2_100_1
– ident: e_1_2_2_30_1
  doi: 10.1145/2568225.2568273
– volume-title: Victor Hugo Sperle Campos, and Fernando Magno Quintao Pereira
  year: 2013
  ident: e_1_2_2_85_1
– ident: e_1_2_2_86_1
– ident: e_1_2_2_4_1
  doi: 10.1007/978-3-319-94460-9_7
– ident: e_1_2_2_101_1
– ident: e_1_2_2_29_1
  doi: 10.1145/2345156.2254103
– volume-title: Semantics of Data Types
  ident: e_1_2_2_12_1
– ident: e_1_2_2_10_1
SSID ssj0001858
Score 2.2982953
Snippet Type inference is a feature that is common to a variety of programming languages. While, in the past, it has been prominently present in functional ones (e.g.,...
SourceID crossref
acm
SourceType Enrichment Source
Index Database
Publisher
StartPage 1
SubjectTerms Compilers
Constraints
Formal language definitions
General programming languages
Language features
Logic
Parsers
Parsing
Program analysis
Program constructs
Program reasoning
Semantics and reasoning
Software and its engineering
Software notations and tools
Source code generation
Syntax
Theory of computation
Type structures
Type theory
SubjectTermsDisplay Software and its engineering -- Software notations and tools -- Compilers -- Parsers
Software and its engineering -- Software notations and tools -- Compilers -- Source code generation
Software and its engineering -- Software notations and tools -- Formal language definitions -- Syntax
Software and its engineering -- Software notations and tools -- General programming languages -- Language features -- Constraints
Theory of computation -- Logic -- Type theory
Theory of computation -- Semantics and reasoning -- Program constructs -- Type structures
Theory of computation -- Semantics and reasoning -- Program reasoning -- Parsing
Theory of computation -- Semantics and reasoning -- Program reasoning -- Program analysis
Subtitle Applications to the Static Analysis of Incomplete Programs
Title Type Inference for C
URI https://dl.acm.org/doi/10.1145/3421472
Volume 42
hasFullText 1
inHoldings 1
isFullTextHit
isPrint
link http://utb.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwnV3NT9swFLdKuewC42NaYUw5TLtEyUjipPaxC-NjopOAInGr7NiWKq3NBOmFv37PsZ1aBYmPS1Qlflac9_r88_tE6FuiqoIKAv9vkQ0jLCmNCBYMTq0KpIUmArd1CsZ_ivNb_Psuv-v1Hv3skobH1eOzeSXv4SrcA77qLNk3cLabFG7Ab-AvXIHDcH0dj7X99MKl7LURg6WPNkflWPeAcA3BW8-ADciaaxOBM1aaOs0PXvHytiSv8cpcSqaLGoSTOCzjzj8z43JmUmSuawEn_Do86x6eLXUFi9YFnxkt9BNesAby8DRe6eJ7mKGFrtaWXYdjHfYXXi1ni8ZQ175RIvUDPKydssDRMTU5zbG0ujUnEc5NQ0SnfHHqCVnmadLE25JNk5anyh7ruhgZ1q2W0tV-5nz4a9tcF3xoUrHzqSXcQJspHDHSPtocnYwvb7p9HJAMMZXhzVJMyrUm_WFJNaKp5h6i8aDJ5CPasmeKYGQEZAf15GIXbbt-HYFV33toT8tL0MlLAPISlPvo9vTXpDyPbFeMiAEUa6KiokphnogikWIoqUwLrhgHGFrwNM9ywnglBIWXZyRJlAQMmiUcM6WGANYJyz6h_qJeyM8oIJJzgP-cwbYFjCGEVVQwzgsl1XGVDwdoF9Y3_WfqnrgPNkDf3XqnlS0kr_uZ_J2ufdkBCrqBbo61IQcvDzlEH1YS9gX1m_ulPAIg2PCvlmP_AXj8V4o
linkProvider EBSCOhost
openUrl ctx_ver=Z39.88-2004&ctx_enc=info%3Aofi%2Fenc%3AUTF-8&rfr_id=info%3Asid%2Fsummon.serialssolutions.com&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.atitle=Type+Inference+for+C&rft.jtitle=ACM+transactions+on+programming+languages+and+systems&rft.au=Melo%2C+Leandro+T.+C.&rft.au=Ribeiro%2C+Rodrigo+G.&rft.au=Guimar%C3%A3es%2C+Breno+C.+F.&rft.au=Pereira%2C+Fernando+Magno+Quint%C3%A3o&rft.date=2020-12-01&rft.issn=0164-0925&rft.eissn=1558-4593&rft.volume=42&rft.issue=3&rft.spage=1&rft.epage=71&rft_id=info:doi/10.1145%2F3421472&rft.externalDBID=n%2Fa&rft.externalDocID=10_1145_3421472
thumbnail_l http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/lc.gif&issn=0164-0925&client=summon
thumbnail_m http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/mc.gif&issn=0164-0925&client=summon
thumbnail_s http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/sc.gif&issn=0164-0925&client=summon