Changes in / [08e8851:2ff78aae]


Ignore:
Files:
25 added
32 deleted
81 edited

Legend:

Unmodified
Added
Removed
  • doc/papers/concurrency/Paper.tex

    r08e8851 r2ff78aae  
    450450\hline
    451451stateful                        & thread        & \multicolumn{1}{c|}{No} & \multicolumn{1}{c}{Yes} \\
    452 \hline
    453 \hline
     452\hline   
     453\hline   
    454454No                                      & No            & \textbf{1}\ \ \ @struct@                              & \textbf{2}\ \ \ @mutex@ @struct@              \\
    455 \hline
     455\hline   
    456456Yes (stackless)         & No            & \textbf{3}\ \ \ @generator@                   & \textbf{4}\ \ \ @mutex@ @generator@   \\
    457 \hline
     457\hline   
    458458Yes (stackful)          & No            & \textbf{5}\ \ \ @coroutine@                   & \textbf{6}\ \ \ @mutex@ @coroutine@   \\
    459 \hline
     459\hline   
    460460No                                      & Yes           & \textbf{7}\ \ \ {\color{red}rejected} & \textbf{8}\ \ \ {\color{red}rejected} \\
    461 \hline
     461\hline   
    462462Yes (stackless)         & Yes           & \textbf{9}\ \ \ {\color{red}rejected} & \textbf{10}\ \ \ {\color{red}rejected} \\
    463 \hline
     463\hline   
    464464Yes (stackful)          & Yes           & \textbf{11}\ \ \ @thread@                             & \textbf{12}\ \ @mutex@ @thread@               \\
    465465\end{tabular}
     
    30423042Rust tokio thread               & 1860.0        & 1881.1        & 37.6          \\
    30433043Rust thread                             & 53801.0       & 53896.8       & 274.9         \\
    3044 Java thread (   10 000)         & 119256.0      & 119679.2      & 2244.0        \\
    3045 Java thread (1 000 000)         & 123100.0      & 123052.5      & 751.6         \\
     3044Java thread                             & 120274.0      & 120722.9      & 2356.7        \\
    30463045Pthreads thread                 & 31465.5       & 31419.5       & 140.4
    30473046\end{tabular}
     
    30983097\uC @signal@ monitor            & 328.3         & 327.4         & 2.4           \\
    30993098Rust cond. variable                     & 7514.0        & 7437.4        & 397.2         \\
    3100 Java @notify@ monitor (  1 000 000)             & 8717.0        & 8774.1        & 471.8         \\
    3101 Java @notify@ monitor (100 000 000)             & 8634.0        & 8683.5        & 330.5         \\
     3099Java @notify@ monitor           & 9623.0        & 9654.6        & 236.2         \\
    31023100Pthreads cond. variable         & 5553.7        & 5576.1        & 345.6
    31033101\end{tabular}
     
    31833181Goroutine mutex lock                    & 34.0  & 34.0  & 0.0   \\
    31843182Rust mutex lock                                 & 33.0  & 33.2  & 0.8   \\
    3185 Java synchronized method (   100 000 000)               & 31.0  & 30.9  & 0.5   \\
    3186 Java synchronized method (10 000 000 000)               & 31.0 & 30.2 & 0.9 \\
     3183Java synchronized method                & 31.0  & 31.0  & 0.0   \\
    31873184Pthreads mutex Lock                             & 31.0  & 31.1  & 0.4
    31883185\end{tabular}
     
    32043201% To: "Peter A. Buhr" <pabuhr@plg2.cs.uwaterloo.ca>
    32053202% Date: Fri, 24 Jan 2020 13:49:18 -0500
    3206 %
     3203% 
    32073204% I can also verify that the previous version, which just tied a bunch of promises together, *does not* go back to the
    32083205% event loop at all in the current version of Node. Presumably they're taking advantage of the fact that the ordering of
     
    32513248Rust tokio thread       & 143.0         & 143.0         & 1.7   \\
    32523249Rust thread                     & 332.0         & 331.4         & 2.4   \\
    3253 Java thread     (      100 000)         & 405.0         & 415.0         & 17.6  \\
    3254 Java thread (  100 000 000)                     & 413.0 & 414.2 & 6.2 \\
    3255 Java thread (5 000 000 000)                     & 415.0 & 415.2 & 6.1 \\
     3250Java thread                     & 405.0         & 415.0         & 17.6  \\
    32563251Pthreads thread         & 334.3         & 335.2         & 3.9
    32573252\end{tabular}
  • doc/refrat/refrat.tex

    r08e8851 r2ff78aae  
    1111%% Created On       : Wed Apr  6 14:52:25 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Thu Sep 24 16:34:51 2020
    14 %% Update Count     : 109
     13%% Last Modified On : Wed Jan 31 17:30:23 2018
     14%% Update Count     : 108
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    3030\usepackage{upquote}                                                                    % switch curled `'" to straight
    3131\usepackage{calc}
     32\usepackage{xspace}
    3233\usepackage{varioref}                                                                   % extended references
     34\usepackage{listings}                                                                   % format program code
    3335\usepackage[flushmargin]{footmisc}                                              % support label/reference in footnote
    3436\usepackage{latexsym}                                   % \Box glyph
    3537\usepackage{mathptmx}                                   % better math font with "times"
    3638\usepackage[usenames]{color}
    37 \newcommand{\CFALatin}{}
     39\input{common}                                          % common CFA document macros
     40\usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref}
     41\usepackage{breakurl}
     42\renewcommand{\UrlFont}{\small\sf}
     43
     44\usepackage[pagewise]{lineno}
     45\renewcommand{\linenumberfont}{\scriptsize\sffamily}
     46\usepackage[firstpage]{draftwatermark}
     47\SetWatermarkLightness{0.9}
     48
     49% Default underscore is too low and wide. Cannot use lstlisting "literate" as replacing underscore
     50% removes it as a variable-name character so keywords in variables are highlighted. MUST APPEAR
     51% AFTER HYPERREF.
     52\renewcommand{\textunderscore}{\leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.075ex}}}
     53
     54\setlength{\topmargin}{-0.45in}                                                 % move running title into header
     55\setlength{\headsep}{0.25in}
     56
     57%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     58
     59\CFAStyle                                                                                               % use default CFA format-style
     60\lstnewenvironment{C++}[1][]                            % use C++ style
     61{\lstset{language=C++,moredelim=**[is][\protect\color{red}]{®}{®}#1}}
     62{}
     63
    3864% inline code ©...© (copyright symbol) emacs: C-q M-)
    3965% red highlighting ®...® (registered trademark symbol) emacs: C-q M-.
     
    4369% keyword escape ¶...¶ (pilcrow symbol) emacs: C-q M-^
    4470% math escape $...$ (dollar symbol)
    45 \input{common}                                          % common CFA document macros
    46 \usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref}
    47 \usepackage{breakurl}
    48 \renewcommand{\UrlFont}{\small\sf}
    49 
    50 \usepackage[pagewise]{lineno}
    51 \renewcommand{\linenumberfont}{\scriptsize\sffamily}
    52 \usepackage[firstpage]{draftwatermark}
    53 \SetWatermarkLightness{0.9}
    54 
    55 % Default underscore is too low and wide. Cannot use lstlisting "literate" as replacing underscore
    56 % removes it as a variable-name character so keywords in variables are highlighted. MUST APPEAR
    57 % AFTER HYPERREF.
    58 \renewcommand{\textunderscore}{\leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.075ex}}}
    59 
    60 \setlength{\topmargin}{-0.45in}                                                 % move running title into header
    61 \setlength{\headsep}{0.25in}
    6271
    6372%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    6473
    65 \CFADefaults                                                                                    % use default CFA format-style
    66 \lstnewenvironment{C++}[1][]                            % use C++ style
    67 {\lstset{language=C++,moredelim=**[is][\protect\color{red}]{®}{®},#1}}
    68 {}
    69 
    70 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    71 
    7274% Names used in the document.
    73 \newcommand{\Version}{\input{build/version}}
     75\newcommand{\Version}{\input{../../version}}
    7476\newcommand{\Textbf}[2][red]{{\color{#1}{\textbf{#2}}}}
    7577\newcommand{\Emph}[2][red]{{\color{#1}\textbf{\emph{#2}}}}
  • doc/theses/andrew_beach_MMath/thesis.tex

    r08e8851 r2ff78aae  
    3434\usepackage[toc,abbreviations]{glossaries-extra}
    3535
    36 % Define all the glossaries.
    37 \input{glossaries}
     36% Main glossary entries -- definitions of relevant terminology
     37\newglossaryentry{computer}
     38{
     39name=computer,
     40description={A programmable machine that receives input data,
     41               stores and manipulates the data, and provides
     42               formatted output}
     43}
     44
     45% Nomenclature glossary entries -- New definitions, or unusual terminology
     46\newglossary*{nomenclature}{Nomenclature}
     47\newglossaryentry{dingledorf}
     48{
     49type=nomenclature,
     50name=dingledorf,
     51description={A person of supposed average intelligence who makes incredibly
     52               brainless misjudgments}
     53}
     54
     55% List of Abbreviations (abbreviations are from the glossaries-extra package)
     56\newabbreviation{aaaaz}{AAAAZ}{American Association of Amature Astronomers
     57               and Zoologists}
     58
     59% List of Symbols
     60\newglossary*{symbols}{List of Symbols}
     61\newglossaryentry{rvec}
     62{
     63name={$\mathbf{v}$},
     64sort={label},
     65type=symbols,
     66description={Random vector: a location in n-dimensional Cartesian space, where
     67               each dimensional component is determined by a random process}
     68}
    3869
    3970% Generate the glossaries defined above.
  • doc/user/user.tex

    r08e8851 r2ff78aae  
    1111%% Created On       : Wed Apr  6 14:53:29 2016
    1212%% Last Modified By : Peter A. Buhr
    13 %% Last Modified On : Thu Sep 24 16:34:52 2020
    14 %% Update Count     : 3997
     13%% Last Modified On : Fri Mar  6 13:34:52 2020
     14%% Update Count     : 3924
    1515%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1616
     
    3030\usepackage{upquote}                                                                    % switch curled `'" to straight
    3131\usepackage{calc}
     32\usepackage{xspace}
    3233\usepackage{varioref}                                                                   % extended references
    33 \usepackage[labelformat=simple,aboveskip=0pt,farskip=0pt]{subfig}
    34 \renewcommand{\thesubfigure}{\alph{subfigure})}
     34\usepackage{listings}                                                                   % format program code
    3535\usepackage[flushmargin]{footmisc}                                              % support label/reference in footnote
    3636\usepackage{latexsym}                                   % \Box glyph
    3737\usepackage{mathptmx}                                   % better math font with "times"
    3838\usepackage[usenames]{color}
    39 \newcommand{\CFALatin}{}
     39\input{common}                                          % common CFA document macros
     40\usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref}
     41\usepackage{breakurl}
     42
     43\usepackage[pagewise]{lineno}
     44\renewcommand{\linenumberfont}{\scriptsize\sffamily}
     45\usepackage[firstpage]{draftwatermark}
     46\SetWatermarkLightness{0.9}
     47
     48% Default underscore is too low and wide. Cannot use lstlisting "literate" as replacing underscore
     49% removes it as a variable-name character so keywords in variables are highlighted. MUST APPEAR
     50% AFTER HYPERREF.
     51\renewcommand{\textunderscore}{\leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.075ex}}}
     52
     53\setlength{\topmargin}{-0.45in}                                                 % move running title into header
     54\setlength{\headsep}{0.25in}
     55
     56%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     57
     58\CFAStyle                                                                                               % use default CFA format-style
     59\lstnewenvironment{C++}[1][]                            % use C++ style
     60{\lstset{language=C++,moredelim=**[is][\protect\color{red}]{®}{®},#1}}
     61{}
     62
    4063% inline code ©...© (copyright symbol) emacs: C-q M-)
    4164% red highlighting ®...® (registered trademark symbol) emacs: C-q M-.
     
    4568% keyword escape ¶...¶ (pilcrow symbol) emacs: C-q M-^
    4669% math escape $...$ (dollar symbol)
    47 \input{common}                                          % common CFA document macros
    48 \usepackage[dvips,plainpages=false,pdfpagelabels,pdfpagemode=UseNone,colorlinks=true,pagebackref=true,linkcolor=blue,citecolor=blue,urlcolor=blue,pagebackref=true,breaklinks=true]{hyperref}
    49 \usepackage{breakurl}
    50 
    51 \renewcommand\footnoterule{\kern -3pt\rule{0.3\linewidth}{0.15pt}\kern 2pt}
    52 
    53 \usepackage[pagewise]{lineno}
    54 \renewcommand{\linenumberfont}{\scriptsize\sffamily}
    55 \usepackage[firstpage]{draftwatermark}
    56 \SetWatermarkLightness{0.9}
    57 
    58 % Default underscore is too low and wide. Cannot use lstlisting "literate" as replacing underscore
    59 % removes it as a variable-name character so keywords in variables are highlighted. MUST APPEAR
    60 % AFTER HYPERREF.
    61 \renewcommand{\textunderscore}{\leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.075ex}}}
    62 
    63 \setlength{\topmargin}{-0.45in}                                                 % move running title into header
    64 \setlength{\headsep}{0.25in}
    65 
    66 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    67 
    68 \CFADefaults                                                                                    % use default CFA format-style
    69 \lstnewenvironment{C++}[1][]                            % use C++ style
    70 {\lstset{language=C++,moredelim=**[is][\protect\color{red}]{®}{®},#1}}
    71 {}
    72 
    73 \newsavebox{\myboxA}
    74 \newsavebox{\myboxB}
    7570
    7671%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    8479\newcommand{\G}[1]{{\Textbf[OliveGreen]{#1}}}
    8580\newcommand{\KWC}{K-W C\xspace}
     81
     82\newsavebox{\LstBox}
    8683
    8784%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    256253
    257254The signature feature of \CFA is \emph{\Index{overload}able} \Index{parametric-polymorphic} functions~\cite{forceone:impl,Cormack90,Duggan96} with functions generalized using a ©forall© clause (giving the language its name):
    258 \begin{cfa}
     255\begin{lstlisting}
    259256®forall( otype T )® T identity( T val ) { return val; }
    260257int forty_two = identity( 42 ); §\C{// T is bound to int, forty\_two == 42}§
    261 \end{cfa}
     258\end{lstlisting}
    262259% extending the C type system with parametric polymorphism and overloading, as opposed to the \Index*[C++]{\CC{}} approach of object-oriented extensions.
    263260\CFA{}\hspace{1pt}'s polymorphism was originally formalized by \Index*{Glen Ditchfield}\index{Ditchfield, Glen}~\cite{Ditchfield92}, and first implemented by \Index*{Richard Bilson}\index{Bilson, Richard}~\cite{Bilson03}.
     
    278275\begin{comment}
    279276A simple example is leveraging the existing type-unsafe (©void *©) C ©bsearch© to binary search a sorted floating array:
    280 \begin{cfa}
     277\begin{lstlisting}
    281278void * bsearch( const void * key, const void * base, size_t dim, size_t size,
    282279                                int (* compar)( const void *, const void * ));
     
    287284double key = 5.0, vals[10] = { /* 10 sorted floating values */ };
    288285double * val = (double *)bsearch( &key, vals, 10, sizeof(vals[0]), comp ); §\C{// search sorted array}§
    289 \end{cfa}
     286\end{lstlisting}
    290287which can be augmented simply with a polymorphic, type-safe, \CFA-overloaded wrappers:
    291 \begin{cfa}
     288\begin{lstlisting}
    292289forall( otype T | { int ?<?( T, T ); } ) T * bsearch( T key, const T * arr, size_t size ) {
    293290        int comp( const void * t1, const void * t2 ) { /* as above with double changed to T */ }
     
    300297double * val = bsearch( 5.0, vals, 10 ); §\C{// selection based on return type}§
    301298int posn = bsearch( 5.0, vals, 10 );
    302 \end{cfa}
     299\end{lstlisting}
    303300The nested function ©comp© provides the hidden interface from typed \CFA to untyped (©void *©) C, plus the cast of the result.
    304301Providing a hidden ©comp© function in \CC is awkward as lambdas do not use C calling-conventions and template declarations cannot appear at block scope.
     
    308305\CFA has replacement libraries condensing hundreds of existing C functions into tens of \CFA overloaded functions, all without rewriting the actual computations.
    309306For example, it is possible to write a type-safe \CFA wrapper ©malloc© based on the C ©malloc©:
    310 \begin{cfa}
     307\begin{lstlisting}
    311308forall( dtype T | sized(T) ) T * malloc( void ) { return (T *)malloc( sizeof(T) ); }
    312309int * ip = malloc(); §\C{// select type and size from left-hand side}§
    313310double * dp = malloc();
    314311struct S {...} * sp = malloc();
    315 \end{cfa}
     312\end{lstlisting}
    316313where the return type supplies the type/size of the allocation, which is impossible in most type systems.
    317314\end{comment}
     
    946943the same level as a ©case© clause; the target label may be case ©default©, but only associated
    947944with the current ©switch©/©choose© statement.
     945
     946
     947\subsection{Loop Control}
     948
     949The ©for©/©while©/©do-while© loop-control allows empty or simplified ranges (see Figure~\ref{f:LoopControlExamples}).
     950\begin{itemize}
     951\item
     952The loop index is polymorphic in the type of the comparison value N (when the start value is implicit) or the start value M.
     953\item
     954An empty conditional implies comparison value of ©1© (true).
     955\item
     956A comparison N is implicit up-to exclusive range [0,N©®)®©.
     957\item
     958A comparison ©=© N is implicit up-to inclusive range [0,N©®]®©.
     959\item
     960The up-to range M ©~©\index{~@©~©} N means exclusive range [M,N©®)®©.
     961\item
     962The up-to range M ©~=©\index{~=@©~=©} N means inclusive range [M,N©®]®©.
     963\item
     964The down-to range M ©-~©\index{-~@©-~©} N means exclusive range [N,M©®)®©.
     965\item
     966The down-to range M ©-~=©\index{-~=@©-~=©} N means inclusive range [N,M©®]®©.
     967\item
     968©0© is the implicit start value;
     969\item
     970©1© is the implicit increment value.
     971\item
     972The up-to range uses operator ©+=© for increment;
     973\item
     974The down-to range uses operator ©-=© for decrement.
     975\item
     976©@© means put nothing in this field.
     977\item
     978©:© means start another index.
     979\end{itemize}
    948980
    949981\begin{figure}
     
    10541086
    10551087
    1056 \subsection{Loop Control}
    1057 
    1058 The ©for©/©while©/©do-while© loop-control allows empty or simplified ranges (see Figure~\ref{f:LoopControlExamples}).
    1059 \begin{itemize}
    1060 \item
    1061 The loop index is polymorphic in the type of the comparison value N (when the start value is implicit) or the start value M.
    1062 \item
    1063 An empty conditional implies comparison value of ©1© (true).
    1064 \item
    1065 A comparison N is implicit up-to exclusive range [0,N©®)®©.
    1066 \item
    1067 A comparison ©=© N is implicit up-to inclusive range [0,N©®]®©.
    1068 \item
    1069 The up-to range M ©~©\index{~@©~©} N means exclusive range [M,N©®)®©.
    1070 \item
    1071 The up-to range M ©~=©\index{~=@©~=©} N means inclusive range [M,N©®]®©.
    1072 \item
    1073 The down-to range M ©-~©\index{-~@©-~©} N means exclusive range [N,M©®)®©.
    1074 \item
    1075 The down-to range M ©-~=©\index{-~=@©-~=©} N means inclusive range [N,M©®]®©.
    1076 \item
    1077 ©0© is the implicit start value;
    1078 \item
    1079 ©1© is the implicit increment value.
    1080 \item
    1081 The up-to range uses operator ©+=© for increment;
    1082 \item
    1083 The down-to range uses operator ©-=© for decrement.
    1084 \item
    1085 ©@© means put nothing in this field.
    1086 \item
    1087 ©:© means start another index.
    1088 \end{itemize}
    1089 
    1090 
    10911088%\subsection{\texorpdfstring{Labelled \protect\lstinline@continue@ / \protect\lstinline@break@}{Labelled continue / break}}
    10921089\subsection{\texorpdfstring{Labelled \LstKeywordStyle{continue} / \LstKeywordStyle{break} Statement}{Labelled continue / break Statement}}
     
    10981095for ©break©, the target label can also be associated with a ©switch©, ©if© or compound (©{}©) statement.
    10991096\VRef[Figure]{f:MultiLevelExit} shows ©continue© and ©break© indicating the specific control structure, and the corresponding C program using only ©goto© and labels.
    1100 The innermost loop has 8 exit points, which cause continuation or termination of one or more of the 7 \Index{nested control-structure}s.
     1097The innermost loop has 7 exit points, which cause continuation or termination of one or more of the 7 \Index{nested control-structure}s.
    11011098
    11021099\begin{figure}
    1103 \centering
    1104 \begin{lrbox}{\myboxA}
    1105 \begin{cfa}[tabsize=3]
    1106 ®Compound:® {
    1107         ®Try:® try {
    1108                 ®For:® for ( ... ) {
    1109                         ®While:® while ( ... ) {
    1110                                 ®Do:® do {
    1111                                         ®If:® if ( ... ) {
    1112                                                 ®Switch:® switch ( ... ) {
    1113                                                         case 3:
    1114                                                                 ®break Compound®;
    1115                                                                 ®break Try®;
    1116                                                                 ®break For®;      /* or */  ®continue For®;
    1117                                                                 ®break While®;  /* or */  ®continue While®;
    1118                                                                 ®break Do®;      /* or */  ®continue Do®;
    1119                                                                 ®break If®;
    1120                                                                 ®break Switch®;
    1121                                                         } // switch
    1122                                                 } else {
    1123                                                         ... ®break If®; ...     // terminate if
    1124                                                 } // if
    1125                                 } while ( ... ); // do
    1126                         } // while
    1127                 } // for
    1128         } ®finally® { // always executed
    1129         } // try
     1100\begin{tabular}{@{\hspace{\parindentlnth}}l@{\hspace{\parindentlnth}}l@{\hspace{\parindentlnth}}l@{}}
     1101\multicolumn{1}{@{\hspace{\parindentlnth}}c@{\hspace{\parindentlnth}}}{\textbf{\CFA}}   & \multicolumn{1}{@{\hspace{\parindentlnth}}c}{\textbf{C}}      \\
     1102\begin{cfa}
     1103®LC:® {
     1104        ... §declarations§ ...
     1105        ®LS:® switch ( ... ) {
     1106          case 3:
     1107                ®LIF:® if ( ... ) {
     1108                        ®LF:® for ( ... ) {
     1109                                ®LW:® while ( ... ) {
     1110                                        ... break ®LC®; ...
     1111                                        ... break ®LS®; ...
     1112                                        ... break ®LIF®; ...
     1113                                        ... continue ®LF;® ...
     1114                                        ... break ®LF®; ...
     1115                                        ... continue ®LW®; ...
     1116                                        ... break ®LW®; ...
     1117                                } // while
     1118                        } // for
     1119                } else {
     1120                        ... break ®LIF®; ...
     1121                } // if
     1122        } // switch
    11301123} // compound
    11311124\end{cfa}
    1132 \end{lrbox}
    1133 
    1134 \begin{lrbox}{\myboxB}
    1135 \begin{cfa}[tabsize=3]
     1125&
     1126\begin{cfa}
    11361127{
    1137 
    1138                 ®ForC:® for ( ... ) {
    1139                         ®WhileC:® while ( ... ) {
    1140                                 ®DoC:® do {
    1141                                         if ( ... ) {
    1142                                                 switch ( ... ) {
    1143                                                         case 3:
    1144                                                                 ®goto Compound®;
    1145                                                                 ®goto Try®;
    1146                                                                 ®goto ForB®;      /* or */  ®goto ForC®;
    1147                                                                 ®goto WhileB®;  /* or */  ®goto WhileC®;
    1148                                                                 ®goto DoB®;      /* or */  ®goto DoC®;
    1149                                                                 ®goto If®;
    1150                                                                 ®goto Switch®;
    1151                                                         } ®Switch:® ;
    1152                                                 } else {
    1153                                                         ... ®goto If®; ...      // terminate if
    1154                                                 } ®If:®;
    1155                                 } while ( ... ); ®DoB:® ;
    1156                         } ®WhileB:® ;
    1157                 } ®ForB:® ;
    1158 
    1159 
    1160 } ®Compound:® ;
    1161 \end{cfa}
    1162 \end{lrbox}
    1163 
    1164 \subfloat[\CFA]{\label{f:CFibonacci}\usebox\myboxA}
    1165 \hspace{2pt}
    1166 \vrule
    1167 \hspace{2pt}
    1168 \subfloat[C]{\label{f:CFAFibonacciGen}\usebox\myboxB}
     1128        ... §declarations§ ...
     1129        switch ( ... ) {
     1130          case 3:
     1131                if ( ... ) {
     1132                        for ( ... ) {
     1133                                while ( ... ) {
     1134                                        ... goto ®LC®; ...
     1135                                        ... goto ®LS®; ...
     1136                                        ... goto ®LIF®; ...
     1137                                        ... goto ®LFC®; ...
     1138                                        ... goto ®LFB®; ...
     1139                                        ... goto ®LWC®; ...
     1140                                        ... goto ®LWB®; ...
     1141                                  ®LWC®: ; } ®LWB:® ;
     1142                          ®LFC:® ; } ®LFB:® ;
     1143                } else {
     1144                        ... goto ®LIF®; ...
     1145                } ®L3:® ;
     1146        } ®LS:® ;
     1147} ®LC:® ;
     1148\end{cfa}
     1149&
     1150\begin{cfa}
     1151
     1152
     1153
     1154
     1155
     1156
     1157
     1158// terminate compound
     1159// terminate switch
     1160// terminate if
     1161// continue loop
     1162// terminate loop
     1163// continue loop
     1164// terminate loop
     1165
     1166
     1167
     1168// terminate if
     1169
     1170
     1171
     1172\end{cfa}
     1173\end{tabular}
    11691174\caption{Multi-level Exit}
    11701175\label{f:MultiLevelExit}
     
    14211426try {
    14221427        f(...);
    1423 } catch( E e ; §boolean-predicate§ ) {          §\C{// termination handler}§
     1428} catch( E e ; §boolean-predicate§ ) {          §\C[8cm]{// termination handler}§
    14241429        // recover and continue
    1425 } catchResume( E e ; §boolean-predicate§ ) { §\C{// resumption handler}§
     1430} catchResume( E e ; §boolean-predicate§ ) { §\C{// resumption handler}\CRT§
    14261431        // repair and return
    14271432} finally {
     
    34863491For implicit formatted input, the common case is reading a sequence of values separated by whitespace, where the type of an input constant must match with the type of the input variable.
    34873492\begin{cquote}
    3488 \begin{lrbox}{\myboxA}
     3493\begin{lrbox}{\LstBox}
    34893494\begin{cfa}[aboveskip=0pt,belowskip=0pt]
    34903495int x;   double y   char z;
     
    34923497\end{lrbox}
    34933498\begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{3em}}l@{}}
    3494 \multicolumn{1}{@{}l@{}}{\usebox\myboxA} \\
     3499\multicolumn{1}{@{}l@{}}{\usebox\LstBox} \\
    34953500\multicolumn{1}{c@{\hspace{2em}}}{\textbf{\CFA}}        & \multicolumn{1}{c@{\hspace{2em}}}{\textbf{\CC}}       & \multicolumn{1}{c}{\textbf{Python}}   \\
    34963501\begin{cfa}[aboveskip=0pt,belowskip=0pt]
     
    66676672For example, an initial alignment and fill capability are preserved during a resize copy so the copy has the same alignment and extended storage is filled.
    66686673Without sticky properties it is dangerous to use ©realloc©, resulting in an idiom of manually performing the reallocation to maintain correctness.
    6669 \begin{cfa}
    6670 
    6671 \end{cfa}
    66726674
    66736675\CFA memory management extends allocation to support constructors for initialization of allocated storage, \eg in
     
    67196721
    67206722        // §\CFA§ safe general allocation, fill, resize, alignment, array
    6721         T * alloc( void );§\indexc{alloc}§                                      §\C[3.5in]{// variable, T size}§
    6722         T * alloc( size_t dim );                                                        §\C{// array[dim], T size elements}§
    6723         T * alloc( T ptr[], size_t dim );                                       §\C{// realloc array[dim], T size elements}§
    6724 
    6725         T * alloc_set( char fill );§\indexc{alloc_set}§         §\C{// variable, T size, fill bytes with value}§
    6726         T * alloc_set( T fill );                                                        §\C{// variable, T size, fill with value}§
    6727         T * alloc_set( size_t dim, char fill );                         §\C{// array[dim], T size elements, fill bytes with value}§
    6728         T * alloc_set( size_t dim, T fill );                            §\C{// array[dim], T size elements, fill elements with value}§
    6729         T * alloc_set( size_t dim, const T fill[] );            §\C{// array[dim], T size elements, fill elements with array}§
    6730         T * alloc_set( T ptr[], size_t dim, char fill );        §\C{// realloc array[dim], T size elements, fill bytes with value}§
    6731 
    6732         T * alloc_align( size_t align );                                        §\C{// aligned variable, T size}§
    6733         T * alloc_align( size_t align, size_t dim );            §\C{// aligned array[dim], T size elements}§
    6734         T * alloc_align( T ptr[], size_t align );                       §\C{// realloc new aligned array}§
    6735         T * alloc_align( T ptr[], size_t align, size_t dim ); §\C{// realloc new aligned array[dim]}§
    6736 
    6737         T * alloc_align_set( size_t align, char fill );         §\C{// aligned variable, T size, fill bytes with value}§
    6738         T * alloc_align_set( size_t align, T fill );            §\C{// aligned variable, T size, fill with value}§
    6739         T * alloc_align_set( size_t align, size_t dim, char fill ); §\C{// aligned array[dim], T size elements, fill bytes with value}§
    6740         T * alloc_align_set( size_t align, size_t dim, T fill ); §\C{// aligned array[dim], T size elements, fill elements with value}§
    6741         T * alloc_align_set( size_t align, size_t dim, const T fill[] ); §\C{// aligned array[dim], T size elements, fill elements with array}§
    6742         T * alloc_align_set( T ptr[], size_t align, size_t dim, char fill ); §\C{// realloc new aligned array[dim], fill new bytes with value}§
     6723        T * alloc( void );§\indexc{alloc}§
     6724        T * alloc( size_t dim );
     6725        T * alloc( T ptr[], size_t dim );
     6726        T * alloc_set( char fill );§\indexc{alloc_set}§
     6727        T * alloc_set( T fill );
     6728        T * alloc_set( size_t dim, char fill );
     6729        T * alloc_set( size_t dim, T fill );
     6730        T * alloc_set( size_t dim, const T fill[] );
     6731        T * alloc_set( T ptr[], size_t dim, char fill );
     6732
     6733        T * alloc_align( size_t align );
     6734        T * alloc_align( size_t align, size_t dim );
     6735        T * alloc_align( T ptr[], size_t align ); // aligned realloc array
     6736        T * alloc_align( T ptr[], size_t align, size_t dim ); // aligned realloc array
     6737        T * alloc_align_set( size_t align, char fill );
     6738        T * alloc_align_set( size_t align, T fill );
     6739        T * alloc_align_set( size_t align, size_t dim, char fill );
     6740        T * alloc_align_set( size_t align, size_t dim, T fill );
     6741        T * alloc_align_set( size_t align, size_t dim, const T fill[] );
     6742        T * alloc_align_set( T ptr[], size_t align, size_t dim, char fill );
    67436743
    67446744        // §\CFA§ safe initialization/copy, i.e., implicit size specification
  • libcfa/src/Makefile.am

    r08e8851 r2ff78aae  
    8888inst_thread_headers_nosrc = \
    8989        bits/random.hfa \
    90         concurrency/clib/cfathread.h \
    9190        concurrency/invoke.h \
    9291        concurrency/kernel/fwd.hfa
     
    104103        concurrency/alarm.cfa \
    105104        concurrency/alarm.hfa \
    106         concurrency/clib/cfathread.cfa \
    107105        concurrency/CtxSwitch-@ARCHITECTURE@.S \
    108106        concurrency/invoke.c \
  • libcfa/src/concurrency/io/setup.cfa

    r08e8851 r2ff78aae  
    147147        static void * iopoll_loop( __attribute__((unused)) void * args ) {
    148148                __processor_id_t id;
    149                 id.full_proc = false;
    150149                id.id = doregister(&id);
    151150                __cfaabi_dbg_print_safe( "Kernel : IO poller thread starting\n" );
  • libcfa/src/concurrency/kernel.cfa

    r08e8851 r2ff78aae  
    237237        $coroutine * proc_cor = get_coroutine(this->runner);
    238238
     239        // Update global state
     240        kernelTLS.this_thread = thrd_dst;
     241
    239242        // set state of processor coroutine to inactive
    240243        verify(proc_cor->state == Active);
     
    250253                        thrd_dst->unpark_stale = true;
    251254                )
    252                 // Update global state
    253                 kernelTLS.this_thread = thrd_dst;
    254255
    255256                /* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
     
    258259                /* paranoid */ verifyf( ((uintptr_t)thrd_dst->context.SP) > ((uintptr_t)__get_stack(thrd_dst->curr_cor)->limit) || thrd_dst->curr_cor == proc_cor, "ERROR : Destination $thread %p has been corrupted.\n StackPointer too large.\n", thrd_dst ); // add escape condition if we are setting up the processor
    259260
    260 
    261261                // set context switch to the thread that the processor is executing
    262262                verify( thrd_dst->context.SP );
     
    269269                /* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
    270270
    271                 // Reset global state
    272                 kernelTLS.this_thread = 0p;
    273271
    274272                // We just finished running a thread, there are a few things that could have happened.
     
    315313        // Just before returning to the processor, set the processor coroutine to active
    316314        proc_cor->state = Active;
     315        kernelTLS.this_thread = 0p;
    317316
    318317        /* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
     
    522521        disable_interrupts();
    523522                /* paranoid */ verify( ! kernelTLS.preemption_state.enabled );
    524                 post( this->idle );
     523                bool ret = post( this->idle );
    525524        enable_interrupts( __cfaabi_dbg_ctx );
    526525}
  • libcfa/src/concurrency/kernel.hfa

    r08e8851 r2ff78aae  
    4848// Processor id, required for scheduling threads
    4949struct __processor_id_t {
    50         unsigned id:24;
    51         bool full_proc:1;
     50        unsigned id;
    5251
    5352        #if !defined(__CFA_NO_STATISTICS__)
  • libcfa/src/concurrency/kernel/startup.cfa

    r08e8851 r2ff78aae  
    470470        this.name = name;
    471471        this.cltr = &_cltr;
    472         full_proc = true;
     472        id = -1u;
    473473        destroyer = 0p;
    474474        do_terminate = false;
  • libcfa/src/concurrency/preemption.cfa

    r08e8851 r2ff78aae  
    411411static void * alarm_loop( __attribute__((unused)) void * args ) {
    412412        __processor_id_t id;
    413         id.full_proc = false;
    414413        id.id = doregister(&id);
    415414
  • libcfa/src/parseargs.cfa

    r08e8851 r2ff78aae  
    2525#include "limits.hfa"
    2626
    27 extern int cfa_args_argc __attribute__((weak));
    28 extern char ** cfa_args_argv __attribute__((weak));
    29 extern char ** cfa_args_envp __attribute__((weak));
     27extern int cfa_args_argc;
     28extern char ** cfa_args_argv;
     29extern char ** cfa_args_envp;
    3030
    3131static void usage(char * cmd, cfa_option options[], size_t opt_count, const char * usage, FILE * out)  __attribute__ ((noreturn));
    3232
    3333void parse_args( cfa_option options[], size_t opt_count, const char * usage, char ** & left ) {
    34         if( 0p != &cfa_args_argc ) {
    35                 parse_args(cfa_args_argc, cfa_args_argv, options, opt_count, usage, left );
    36         }
    37         else {
    38                 char * temp = "";
    39                 parse_args(0, &temp, options, opt_count, usage, left );
    40         }
     34        parse_args(cfa_args_argc, cfa_args_argv, options, opt_count, usage, left );
    4135}
    4236
  • tests/.expect/array.txt

    r08e8851 r2ff78aae  
    1 array.cfa: In function '_X4mainFi___1':
    2 array.cfa:54:9: note: #pragma message: Compiled
  • tests/.expect/cast.txt

    r08e8851 r2ff78aae  
    1 cast.cfa: In function '_X4mainFi_iPPKc__1':
    2 cast.cfa:18:9: note: #pragma message: Compiled
  • tests/.expect/enum.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/.expect/expression.txt

    r08e8851 r2ff78aae  
    1 expression.cfa: In function '_X4mainFi___1':
    2 expression.cfa:88:9: note: #pragma message: Compiled
  • tests/.expect/forall.txt

    r08e8851 r2ff78aae  
    1 forall.cfa: In function '_X4mainFi___1':
    2 forall.cfa:218:9: note: #pragma message: Compiled
  • tests/.expect/heap.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/.expect/identFuncDeclarator.txt

    r08e8851 r2ff78aae  
    1 identFuncDeclarator.cfa: In function '_X4mainFi___1':
    2 identFuncDeclarator.cfa:116:9: note: #pragma message: Compiled
  • tests/.expect/identParamDeclarator.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/.expect/labelledExit.txt

    r08e8851 r2ff78aae  
    1 labelledExit.cfa: In function '_X4mainFi_iPPKc__1':
    2 labelledExit.cfa:183:9: note: #pragma message: Compiled
  • tests/.expect/limits.txt

    r08e8851 r2ff78aae  
    1 limits.cfa: In function '_X4mainFi_iPPKc__1':
    2 limits.cfa:151:9: note: #pragma message: Compiled
  • tests/.expect/maybe.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/.expect/nested-types.txt

    r08e8851 r2ff78aae  
    1 nested-types.cfa: In function '_X4mainFi___1':
    2 nested-types.cfa:102:9: note: #pragma message: Compiled
  • tests/.expect/numericConstants.txt

    r08e8851 r2ff78aae  
    1 numericConstants.cfa: In function '_X4mainFi___1':
    2 numericConstants.cfa:68:9: note: #pragma message: Compiled
  • tests/.expect/operators.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/.expect/result.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/.expect/stdincludes.txt

    r08e8851 r2ff78aae  
    1 stdincludes.cfa: In function '_X4mainFi___1':
    2 stdincludes.cfa:52:9: note: #pragma message: Compiled
  • tests/.expect/switch.txt

    r08e8851 r2ff78aae  
    1 switch.cfa: In function '_X4mainFi___1':
    2 switch.cfa:105:9: note: #pragma message: Compiled
  • tests/.expect/typedefRedef-ERR1.txt

    r08e8851 r2ff78aae  
    11typedefRedef.cfa:4:1 error: Cannot redefine typedef: Foo
    2 typedefRedef.cfa:59:1 error: Cannot redefine typedef: ARR
     2typedefRedef.cfa:60:1 error: Cannot redefine typedef: ARR
  • tests/.expect/typedefRedef.txt

    r08e8851 r2ff78aae  
    1 typedefRedef.cfa: In function '_X4mainFi___1':
    2 typedefRedef.cfa:71:9: note: #pragma message: Compiled
  • tests/.expect/typeof.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/.expect/variableDeclarator.txt

    r08e8851 r2ff78aae  
    1 variableDeclarator.cfa: In function '_X4mainFi_iPPKc__1':
    2 variableDeclarator.cfa:182:9: note: #pragma message: Compiled
  • tests/.expect/voidPtr.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/Makefile.am

    r08e8851 r2ff78aae  
    1111## Created On       : Sun May 31 09:08:15 2015
    1212## Last Modified By : Peter A. Buhr
    13 ## Last Modified On : Sun Sep 27 19:01:41 2020
    14 ## Update Count     : 84
     13## Last Modified On : Tue Nov 20 11:18:51 2018
     14## Update Count     : 68
    1515###############################################################################
    1616
     
    4040        -fdebug-prefix-map=$(abspath ${abs_srcdir})= \
    4141        -fdebug-prefix-map=/tmp= \
    42         -fno-diagnostics-show-caret \
    4342        -g \
    4443        -Wall \
     
    5352
    5453# adjust CC to current flags
    55 CC = LC_ALL=C $(if $(DISTCC_CFA_PATH),distcc $(DISTCC_CFA_PATH) ${ARCH_FLAGS},$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS})
     54CC = $(if $(DISTCC_CFA_PATH),distcc $(DISTCC_CFA_PATH) ${ARCH_FLAGS},$(TARGET_CFA) ${DEBUG_FLAGS} ${ARCH_FLAGS})
    5655CFACC = $(CC)
    5756
     
    134133        $(CFACOMPILETEST) -CFA -XCFA -p -c -fsyntax-only -o $(abspath ${@})
    135134
     135# Use for tests where the make command is expected to succeed but the expected.txt should be compared to stderr
     136EXPECT_STDERR = builtins/sync warnings/self-assignment
     137$(EXPECT_STDERR): % : %.cfa $(CFACCBIN)
     138        $(CFACOMPILETEST) -c -fsyntax-only 2> $(abspath ${@})
     139
    136140#------------------------------------------------------------------------------
    137141# CUSTOM TARGET
    138142#------------------------------------------------------------------------------
    139 # tests that just validate syntax and compiler output should be compared to stderr
    140 CFACOMPILE_SYNTAX = $(CFACOMPILETEST) -Wno-unused-variable -Wno-unused-label -c -fsyntax-only -o $(abspath ${@})
    141 
    142 SYNTAX_ONLY_CODE = expression typedefRedef variableDeclarator switch numericConstants identFuncDeclarator forall \
    143         limits nested-types stdincludes cast labelledExit array builtins/sync warnings/self-assignment
    144 $(SYNTAX_ONLY_CODE): % : %.cfa $(CFACCBIN)
    145         $(CFACOMPILE_SYNTAX)
    146         $(if $(test), cp $(test) $(abspath ${@}), )
     143# tests that just validate syntax
     144expression : expression.cfa $(CFACCBIN)
     145        $(CFACOMPILETEST) -c -fsyntax-only 2> $(abspath ${@})
    147146
    148147# expected failures
    149 # use custom target since they require a custom define *and* have a name that doesn't match the file
     148# use custom target since they require a custom define and custom dependencies
    150149alloc-ERROR : alloc.cfa $(CFACCBIN)
    151         $(CFACOMPILE_SYNTAX) -DERR1
    152         -cp $(test) $(abspath ${@})
     150        $(CFACOMPILETEST) -DERR1 -c -fsyntax-only -o $(abspath ${@})
    153151
    154152typedefRedef-ERR1 : typedefRedef.cfa $(CFACCBIN)
    155         $(CFACOMPILE_SYNTAX) -DERR1
    156         -cp $(test) $(abspath ${@})
     153        $(CFACOMPILETEST) -DERR1 -c -fsyntax-only -o $(abspath ${@})
    157154
    158155nested-types-ERR1 : nested-types.cfa $(CFACCBIN)
    159         $(CFACOMPILE_SYNTAX) -DERR1
    160         -cp $(test) $(abspath ${@})
     156        $(CFACOMPILETEST) -DERR1 -c -fsyntax-only -o $(abspath ${@})
    161157
    162158nested-types-ERR2 : nested-types.cfa $(CFACCBIN)
    163         $(CFACOMPILE_SYNTAX) -DERR2
    164         -cp $(test) $(abspath ${@})
     159        $(CFACOMPILETEST) -DERR2 -c -fsyntax-only -o $(abspath ${@})
    165160
    166161raii/memberCtors-ERR1 : raii/memberCtors.cfa $(CFACCBIN)
    167         $(CFACOMPILE_SYNTAX) -DERR1
    168         -cp $(test) $(abspath ${@})
     162        $(CFACOMPILETEST) -DERR1 -c -fsyntax-only -o $(abspath ${@})
    169163
    170164raii/ctor-autogen-ERR1 : raii/ctor-autogen.cfa $(CFACCBIN)
    171         $(CFACOMPILE_SYNTAX) -DERR1
    172         -cp $(test) $(abspath ${@})
     165        $(CFACOMPILETEST) -DERR1 -c -fsyntax-only -o $(abspath ${@})
    173166
    174167raii/dtor-early-exit-ERR1 : raii/dtor-early-exit.cfa $(CFACCBIN)
    175         $(CFACOMPILE_SYNTAX) -DERR1
    176         -cp $(test) $(abspath ${@})
     168        $(CFACOMPILETEST) -DERR1 -c -fsyntax-only -o $(abspath ${@})
    177169
    178170raii/dtor-early-exit-ERR2 : raii/dtor-early-exit.cfa $(CFACCBIN)
    179         $(CFACOMPILE_SYNTAX) -DERR2
    180         -cp $(test) $(abspath ${@})
     171        $(CFACOMPILETEST) -DERR2 -c -fsyntax-only -o $(abspath ${@})
    181172
    182173# Exception Tests
  • tests/array.cfa

    r08e8851 r2ff78aae  
    1111// Created On       : Tue Feb 19 21:18:06 2019
    1212// Last Modified By : Peter A. Buhr
    13 // Last Modified On : Sun Sep 27 09:05:40 2020
    14 // Update Count     : 4
     13// Last Modified On : Tue Feb 19 21:18:46 2019
     14// Update Count     : 1
    1515//
    1616
    17 int a1[0];
     17int a1[];
    1818//int a2[*];
    1919//double a4[3.0];
    2020
    21 int m1[0][3];
     21int m1[][3];
    2222//int m2[*][*];
    2323int m4[3][3];
     
    4949}
    5050
    51 int main() {
    52         #pragma message( "Compiled" )                                           // force non-empty .expect file
    53 }
     51int main() {}
    5452
    5553// Local Variables: //
  • tests/builtins/.expect/sync.txt

    r08e8851 r2ff78aae  
    1 builtins/sync.cfa: In function '_X4mainFi___1':
    2 builtins/sync.cfa:358:9: note: #pragma message: Compiled
  • tests/builtins/sync.cfa

    r08e8851 r2ff78aae  
    6666        #if defined(__SIZEOF_INT128__)
    6767        { __int128 ret; ret = __sync_fetch_and_nand(vplll, vlll); }
     68        { __int128 ret; ret = __sync_fetch_and_nand_16(vplll, vlll); }
    6869        #endif
    6970
     
    354355
    355356int main() {
    356         #pragma message( "Compiled" )                   // force non-empty .expect file
     357        return 0;
    357358}
  • tests/cast.cfa

    r08e8851 r2ff78aae  
    1313
    1414//Dummy main
    15 int main( int argc, char const * argv[] ) {
    16         #pragma message( "Compiled" )                   // force non-empty .expect file
     15int main(int argc, char const *argv[])
     16{
     17        return 0;
    1718}
  • tests/concurrent/.expect/cluster.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/concurrent/cluster.cfa

    r08e8851 r2ff78aae  
    3232                }
    3333        }
    34         printf( "done\n" );                             // non-empty .expect file
     34        return 0;
    3535}
  • tests/concurrent/examples/.expect/datingService.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/concurrent/examples/datingService.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Mon Oct 30 12:56:20 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 27 15:42:25 2020
    13 // Update Count     : 40
     12// Last Modified On : Fri Jun 21 11:32:34 2019
     13// Update Count     : 38
    1414//
    1515
     
    108108                if ( girlck[ boyck[i] ] != boyck[ girlck[i] ] ) abort();
    109109        } // for
    110 
    111         printf( "done\n" );                                                                     // non-empty .expect file
    112110} // main
    113111
  • tests/concurrent/futures/.expect/basic.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/concurrent/futures/basic.cfa

    r08e8851 r2ff78aae  
    9191                }
    9292        }
    93         printf( "done\n" );                             // non-empty .expect file
    94 
    9593}
  • tests/concurrent/park/.expect/force_preempt.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/concurrent/park/.expect/start_parked.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/concurrent/park/force_preempt.cfa

    r08e8851 r2ff78aae  
    5757                Waiter waiters[5];
    5858        }
    59         printf( "done\n" );                             // non-empty .expect file
    6059}
  • tests/concurrent/park/start_parked.cfa

    r08e8851 r2ff78aae  
    33thread Parker {};
    44void main( Parker & ) {
    5         park( __cfaabi_dbg_ctx );
     5      park( __cfaabi_dbg_ctx );
    66}
    77
    88int main() {
    9         for(1000) {
    10                 Parker parker;
    11                 unpark( parker __cfaabi_dbg_ctx2 );
    12         }
    13         printf( "done\n" );                                                                     // non-empty .expect file
     9      for(1000) {
     10            Parker parker;
     11            unpark( parker __cfaabi_dbg_ctx2 );
     12      }
    1413}
  • tests/enum.cfa

    r08e8851 r2ff78aae  
    2626//Dummy main
    2727int main(int argc, char const *argv[]) {
    28         printf( "done\n" );                             // non-empty .expect file
    2928}
  • tests/exceptions/.expect/virtual-cast.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/exceptions/.expect/virtual-poly.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/exceptions/virtual-cast.cfa

    r08e8851 r2ff78aae  
    7474        free(tri);
    7575        free(top);
    76         printf( "done\n" );                             // non-empty .expect file
    7776}
  • tests/exceptions/virtual-poly.cfa

    r08e8851 r2ff78aae  
    7777        mono_poly_test();
    7878        poly_poly_test();
    79         printf( "done\n" );                             // non-empty .expect file
    8079}
  • tests/expression.cfa

    r08e8851 r2ff78aae  
    88
    99int main() {
    10         int a[3] = { 0, 0, 0 };
    11         S s = { 3 }, * ps = &s;
    12         [int] t = { 3 };
    13         * [int] pt = &t;
    14         int i = 1, j = 2;
     10    int a[3] = { 0, 0, 0 };
     11    S s = { 3 }, * ps = &s;
     12    [int] t = { 3 };
     13    * [int] pt = &t;
     14    int i = 1, j = 2;
    1515
    16         // operators
     16    // operators
    1717
    18         !i;
    19         ~i;
    20         +i;
    21         -i;
    22         *ps;
    23         ++ps;
    24         --ps;
    25         ps++;
    26         ps--;
     18    !i;
     19    ~i;
     20    +i;
     21    -i;
     22    *ps;
     23    ++ps;
     24    --ps;
     25    ps++;
     26    ps--;
    2727
    28         i + j;
    29         i - j;
    30         i * j;
     28    i + j;
     29    i - j;
     30    i * j;
    3131
    32         i / j;
    33         i % j;
    34         i ^ j;
    35         i & j;
    36         i | j;
    37         i < j;
    38         i > j;
    39         i = j;
     32    i / j;
     33    i % j;
     34    i ^ j;
     35    i & j;
     36    i | j;
     37    i < j;
     38    i > j;
     39    i = j;
    4040
    41         i == j;
    42         i != j;
    43         i << j;
    44         i >> j;
    45         i <= j;
    46         i >= j;
    47         i && j;
    48         i || j;
    49         ps->i;
     41    i == j;
     42    i != j;
     43    i << j;
     44    i >> j;
     45    i <= j;
     46    i >= j;
     47    i && j;
     48    i || j;
     49    ps->i;
    5050
    51         i *= j;
    52         i /= j;
    53         i %= j;
    54         i += j;
    55         i -= j;
    56         i &= j;
    57         i |= j;
    58         i ^= j;
    59         i <<= j;
    60         i >>= j;
     51    i *= j;
     52    i /= j;
     53    i %= j;
     54    i += j;
     55    i -= j;
     56    i &= j;
     57    i |= j;
     58    i ^= j;
     59    i <<= j;
     60    i >>= j;
    6161
    62         i ? i : j;
     62    i ? i : j;
    6363
    64         // postfix function call
     64    // postfix function call
    6565
    66         (3 + 4)`mary;
    67         ({3 + 4;})`mary;
    68         [3, 4]`mary;
    69         3`mary;
    70         a[0]`mary;
    71         a[0]`mary`mary;
    72         s{0}`mary;
    73         a[3]`jane++;
    74         jack(3)`mary;
    75         s.i`mary;
    76         t.0`mary;
    77         s.[i]`mary;
    78         ps->i`mary;
    79         pt->0`mary;
    80         ps->[i]`mary;
    81         i++`mary;
    82         i--`mary;
    83         (S){2}`mary;
    84         (S)@{2}`mary;
    85 
    86         #pragma message( "Compiled" )                   // force non-empty .expect file
     66    (3 + 4)`mary;
     67    ({3 + 4;})`mary;
     68    [3, 4]`mary;
     69    3`mary;
     70    a[0]`mary;
     71    a[0]`mary`mary;
     72    s{0}`mary;
     73    a[3]`jane++;
     74    jack(3)`mary;
     75    s.i`mary;
     76    t.0`mary;
     77    s.[i]`mary;
     78    ps->i`mary;
     79    pt->0`mary;
     80    ps->[i]`mary;
     81    i++`mary;
     82    i--`mary;
     83    (S){2}`mary;
     84    (S)@{2}`mary;
    8785} // main
  • tests/forall.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Wed May  9 08:48:15 2018
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 27 08:43:20 2020
    13 // Update Count     : 35
     12// Last Modified On : Tue Mar 19 08:29:38 2019
     13// Update Count     : 32
    1414//
    1515
     
    158158}
    159159forall( otype T ) inline static {
    160         int RT9( T ) { T t; return 3; }
     160        int RT9( T ) { T t; }
    161161}
    162162
     
    213213// w3 g3;
    214214
    215 int main( void ) {
    216         #pragma message( "Compiled" )                   // force non-empty .expect file
    217 }
     215int main( void ) {}
    218216
    219217// Local Variables: //
  • tests/heap.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Tue Nov  6 17:54:56 2018
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Sep 25 15:21:52 2020
    13 // Update Count     : 73
     12// Last Modified On : Mon Sep  7 18:37:41 2020
     13// Update Count     : 72
    1414//
    1515
     
    485485        // checkFreeOn();
    486486        // malloc_stats();
    487         printf( "done\n" );                                                                     // non-empty .expect file
    488487}
    489488
  • tests/identFuncDeclarator.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Wed Aug 17 08:36:34 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 27 08:20:46 2020
    13 // Update Count     : 5
     12// Last Modified On : Tue Nov  6 17:56:33 2018
     13// Update Count     : 3
    1414//
    1515
     
    111111        int (* (* const f80)(int))();
    112112        int (* const(* const f81)(int))();
    113 
    114         #pragma message( "Compiled" )                   // force non-empty .expect file
    115113}
    116114
  • tests/identParamDeclarator.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Wed Aug 17 08:37:56 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Sep 25 14:31:08 2020
    13 // Update Count     : 4
     12// Last Modified On : Tue Nov  6 17:56:44 2018
     13// Update Count     : 3
    1414//
    1515
     
    158158
    159159int main( int argc, char const *argv[] ) {                              // dummy main
    160         printf( "done\n" );                                                                     // non-empty .expect file
     160        return 0;
    161161}
    162162
  • tests/labelledExit.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Wed Aug 10 07:29:39 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 27 09:01:34 2020
    13 // Update Count     : 12
     12// Last Modified On : Wed Feb  5 16:49:48 2020
     13// Update Count     : 9
    1414//
    1515
     
    179179
    180180int main( int argc, char const *argv[] ) {
    181         #pragma message( "Compiled" )                                           // force non-empty .expect file
     181        /* code */
    182182}
    183183
  • tests/limits.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Tue May 10 20:44:20 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 27 08:45:43 2020
    13 // Update Count     : 10
     12// Last Modified On : Tue Nov  6 17:57:55 2018
     13// Update Count     : 8
    1414//
    1515
     
    147147
    148148int main(int argc, char const *argv[]) {
    149         #pragma message( "Compiled" )                                           // force non-empty .expect file
     149        //DUMMY
     150        return 0;
    150151}
    151152
  • tests/maybe.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Thr May 25 16:02:00 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Sep 25 15:13:28 2020
    13 // Update Count     : 2
     12// Last Modified On : Thu Jul 20 15:24:07 2017
     13// Update Count     : 1
    1414//
    1515
     
    6565        //checkNamedConstructors();
    6666        checkSetters();
    67         printf( "done\n" );                             // non-empty .expect file
    6867}
  • tests/nested-types.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Mon Jul 9 10:20:03 2018
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 27 08:48:59 2020
    13 // Update Count     : 6
     12// Last Modified On : Wed Feb 12 18:21:15 2020
     13// Update Count     : 3
    1414//
    1515
    1616typedef int N;
    1717struct A {
    18         forall(otype T)
    19         struct N {
    20                 T x;
    21         };
     18  forall(otype T)
     19  struct N {
     20    T x;
     21  };
    2222};
    2323
    2424struct S {
    25         struct T {
    26                 int i;
    27                 typedef int Bar;
    28         };
    29         T x;
     25  struct T {
     26    int i;
     27    typedef int Bar;
     28  };
     29  T x;
    3030
    31         // struct U;
    32         typedef T Bar;
    33         typedef int Baz;
     31  // struct U;
     32  typedef T Bar;
     33  typedef int Baz;
    3434};
    3535
     
    6565
    6666int main() {
    67         // access nested struct
    68         S.T x;
     67  // access nested struct
     68  S.T x;
    6969
    70         {
    71                 struct S {
    72                   int i;
    73                   struct Z {
    74                     double d;
    75                   };
    76                 };
     70  {
     71    struct S {
     72      int i;
     73      struct Z {
     74        double d;
     75      };
     76    };
    7777
    78                 S.Z z;                                                                                  // gets local S
    79                 .S.T y;                                                                                 // lookup at global scope only
     78    S.Z z;   // gets local S
     79    .S.T y;  // lookup at global scope only
    8080
    81                 const volatile .S.T q;
     81    const volatile .S.T q;
    8282#if ERR1
    83                 T err1;                                                                                 // error: no T in scope
     83    T err1;           // error: no T in scope
    8484#endif
    8585#if ERR2
    86                 .Z err2;                                                                                // error: no Z in global scope
    87                 .S.Baz.Bar err3;                                                                // error: .S.Baz => int, int is not aggregate and should not appear left of the dot
    88                 .S.Z err4;                                                                              // error: no Z in global S
     86    .Z err2;          // error: no Z in global scope
     87    .S.Baz.Bar err3;  // error: .S.Baz => int, int is not aggregate and should not appear left of the dot
     88    .S.Z err4;        // error: no Z in global S
    8989#endif
    90         }
     90  }
    9191
    92         // U.S un;
     92  // U.S un;
    9393
    94         S.Bar y;
    95         S.Baz x;
    96         S.T.Bar z;
     94  S.Bar y;
     95  S.Baz x;
     96  S.T.Bar z;
    9797
    98         // A.N(int) x;  // xxx - should not be an error, but currently is.
    99 
    100         #pragma message( "Compiled" )                   // force non-empty .expect file
     98  // A.N(int) x;  // xxx - should not be an error, but currently is.
    10199}
    102100
  • tests/numericConstants.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Wed May 24 22:10:36 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 27 07:55:22 2020
    13 // Update Count     : 7
     12// Last Modified On : Tue Feb  5 08:58:16 2019
     13// Update Count     : 5
    1414//
    1515
     
    6363        0x_ff.ffp0;                                     // hex real
    6464        0x_1.ffff_ffff_p_128_l;
    65 
    66         #pragma message( "Compiled" )   // force non-empty .expect file
    6765} // main
    6866
  • tests/operators.cfa

    r08e8851 r2ff78aae  
    3131int main(int argc, char const *argv[]) {
    3232        /* code */
    33         printf( "done\n" );                             // non-empty .expect file
     33        return 0;
    3434}
    3535
  • tests/pybin/tools.py

    r08e8851 r2ff78aae  
    8888                raise
    8989
    90 def is_empty(fname):
    91         if not os.path.isfile(fname):
    92                 return True
    93 
    94         if os.stat(fname).st_size == 0:
    95                 return True
    96 
    97         return False
    98 
    9990def is_ascii(fname):
    10091        if settings.dry_run:
    10192                print("is_ascii: %s" % fname)
    102                 return (True, "")
     93                return True
    10394
    10495        if not os.path.isfile(fname):
    105                 return (False, "No file")
    106 
    107         code, out = sh("file", fname, output_file=subprocess.PIPE)
     96                return False
     97
     98        code, out = sh("file %s" % fname, output_file=subprocess.PIPE)
    10899        if code != 0:
    109                 return (False, "'file EXPECT' failed with code {}".format(code))
     100                return False
    110101
    111102        match = re.search(".*: (.*)", out)
    112103
    113104        if not match:
    114                 return (False, "Unreadable file type: '{}'".format(out))
    115 
    116         if "ASCII text" in match.group(1):
    117                 return (True, "")
    118 
    119         return (False, "File type should be 'ASCII text', was '{}'".format(match.group(1)))
     105                return False
     106
     107        return match.group(1).startswith("ASCII text")
    120108
    121109def is_exe(fname):
  • tests/raii/.expect/ctor-autogen.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/raii/.expect/init_once.txt

    r08e8851 r2ff78aae  
    1 done
  • tests/raii/ctor-autogen.cfa

    r08e8851 r2ff78aae  
    151151        identity(gcs);
    152152        identity(gcu);
    153         printf( "done\n" );                             // non-empty .expect file
    154153}
  • tests/raii/init_once.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Tue Jun 14 15:43:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Sep 25 15:36:39 2020
    13 // Update Count     : 5
     12// Last Modified On : Fri Mar 22 13:41:26 2019
     13// Update Count     : 4
    1414//
    1515
     
    188188                static_variable();
    189189        }
    190         printf( "done\n" );                                                                     // non-empty .expect file
    191190}
    192191
  • tests/result.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Thr May 25 16:50:00 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Sep 25 15:22:59 2020
    13 // Update Count     : 2
     12// Last Modified On : Thu Jul 20 15:24:12 2017
     13// Update Count     : 1
    1414//
    1515
     
    6666        checkGetters();
    6767        checkSetters();
    68         printf( "done\n" );                             // non-empty .expect file
    6968}
  • tests/stdincludes.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Tue Aug 29 08:26:14 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 27 08:51:38 2020
    13 // Update Count     : 8
     12// Last Modified On : Tue Nov  6 18:00:53 2018
     13// Update Count     : 6
    1414//
    1515
     
    4747#include <wctype.h>
    4848
    49 int main() {
    50         #pragma message( "Compiled" )                   // force non-empty .expect file
    51 }
     49int main() {}
    5250
    5351// Local Variables: //
  • tests/switch.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Tue Jul 12 06:50:22 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 27 08:35:02 2020
    13 // Update Count     : 43
     12// Last Modified On : Tue Nov  6 18:01:34 2018
     13// Update Count     : 37
    1414//
    1515
     
    100100                j = 5;
    101101        } // choose
    102 
    103         #pragma message( "Compiled" )                                           // force non-empty .expect file
    104102} // main
    105103
  • tests/test.py

    r08e8851 r2ff78aae  
    173173        test.prepare()
    174174
    175         # ----------
    176         # MAKE
    177         # ----------
    178175        # build, skipping to next test on error
    179176        with Timed() as comp_dur:
    180177                make_ret, _ = make( test.target(), output_file=subprocess.DEVNULL, error=out_file, error_file = err_file )
    181178
    182         # ----------
    183         # RUN
    184         # ----------
     179        run_dur = None
    185180        # run everything in a temp directory to make sure core file are handled properly
    186         run_dur = None
    187181        with tempdir():
    188182                # if the make command succeeds continue otherwise skip to diff
     
    262256        make('clean', output_file=subprocess.DEVNULL, error=subprocess.DEVNULL)
    263257
    264         # create the executor for our jobs
    265         pool = multiprocessing.Pool(jobs)
     258        # since python prints stacks by default on a interrupt, redo the interrupt handling to be silent
     259        def worker_init():
     260                def sig_int(signal_num, frame):
     261                        pass
     262
     263                signal.signal(signal.SIGINT, sig_int)
     264
     265        # create the executor for our jobs and handle the signal properly
     266        pool = multiprocessing.Pool(jobs, worker_init)
    266267
    267268        failed = False
     269
     270        def stop(x, y):
     271                print("Tests interrupted by user", file=sys.stderr)
     272                sys.exit(1)
     273        signal.signal(signal.SIGINT, stop)
    268274
    269275        # for each test to run
     
    354360                failed = 0
    355361
    356                 # check if the expected files aren't empty
    357                 if not options.regenerate_expected:
    358                         for t in tests:
    359                                 if is_empty(t.expect()):
    360                                         print('WARNING: test "{}" has empty .expect file'.format(t.target()), file=sys.stderr)
    361 
    362362                # for each build configurations, run the test
    363363                with Timed() as total_dur:
  • tests/typedefRedef.cfa

    r08e8851 r2ff78aae  
    2727typedef int ARR[];
    2828typedef int ARR[];
    29 #ifdef ERR1
    30 // if a typedef has an array dimension, it can only be redefined to the same dimension
     29// #ifdef ERR1
     30// if a typedef has an array dimension,
     31// it can only be redefined to the same dimension
    3132typedef int ARR[2];
    32 #endif
     33// #endif
    3334
    3435typedef int X;
     
    5354
    5455int main() {
    55         typedef int ARR[sz];
     56  typedef int ARR[sz];
    5657
    57         // can't redefine typedef which is VLA
     58  // can't redefine typedef which is VLA
    5859#if ERR1
    59         typedef int ARR[sz];
     60  typedef int ARR[sz];
    6061#endif
    6162
    62         Foo * x;
     63  Foo *x;
    6364
    64         typedef struct Bar Foo;
    65         Foo * y;
     65  typedef struct Bar Foo;
     66  Foo *y;
    6667
    67         typedef int *** pt;
    68 
    69         #pragma message( "Compiled" )                   // force non-empty .expect file
     68  typedef int *** pt;
    7069}
  • tests/typeof.cfa

    r08e8851 r2ff78aae  
    11int main() {
    2         int *v1;
    3         typeof(v1) v2;
    4         typeof(*v1) v3[4];
    5         char *v4[4];
    6         typeof(typeof(char *)[4]) v5;
    7         typeof (int *) v6;
    8         typeof( int ( int, int p ) ) *v7;
    9         typeof( [int] ( int, int p ) ) *v8;
    10         (typeof(v1)) v2; // cast with typeof
    11         printf( "done\n" );                             // non-empty .expect file
     2    int *v1;
     3    typeof(v1) v2;
     4    typeof(*v1) v3[4];
     5    char *v4[4];
     6    typeof(typeof(char *)[4]) v5;
     7    typeof (int *) v6;
     8    typeof( int ( int, int p ) ) *v7;
     9    typeof( [int] ( int, int p ) ) *v8;
     10    (typeof(v1)) v2; // cast with typeof
    1211}
  • tests/variableDeclarator.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Wed Aug 17 08:41:42 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 27 07:46:17 2020
    13 // Update Count     : 13
     12// Last Modified On : Tue Nov  6 18:02:16 2018
     13// Update Count     : 2
    1414//
    1515
     
    1818int (f2);
    1919
    20 int * f3;
    21 int ** f4;
    22 int * const * f5;
     20int *f3;
     21int **f4;
     22int * const *f5;
    2323int * const * const f6;
    2424
    25 int * (f7);
    26 int ** (f8);
    27 int * const * (f9);
     25int *(f7);
     26int **(f8);
     27int * const *(f9);
    2828int * const * const (f10);
    2929
    30 int (* f11);
    31 int (** f12);
    32 int (* const * f13);
     30int (*f11);
     31int (**f12);
     32int (* const *f13);
    3333int (* const * const f14);
    3434
    35 int f15[0];
     35int f15[];
    3636int f16[10];
    37 int (f17[0]);
     37int (f17[]);
    3838int (f18[10]);
    3939
    40 int * f19[0];
    41 int * f20[10];
    42 int ** f21[0];
    43 int ** f22[10];
    44 int * const * f23[0];
    45 int * const * f24[10];
    46 int * const * const f25[0];
     40int *f19[];
     41int *f20[10];
     42int **f21[];
     43int **f22[10];
     44int * const *f23[];
     45int * const *f24[10];
     46int * const * const f25[];
    4747int * const * const f26[10];
    4848
    49 int *(f27[0]);
     49int *(f27[]);
    5050int *(f28[10]);
    51 int **(f29[0]);
     51int **(f29[]);
    5252int **(f30[10]);
    53 int * const *(f31[0]);
     53int * const *(f31[]);
    5454int * const *(f32[10]);
    55 int * const * const (f33[0]);
     55int * const * const (f33[]);
    5656int * const * const (f34[10]);
    5757
    58 int (* f35)[];
    59 int (* f36)[10];
    60 int (** f37)[];
    61 int (** f38)[10];
    62 int (* const * f39)[];
    63 int (* const * f40)[10];
     58int (*f35)[];
     59int (*f36)[10];
     60int (**f37)[];
     61int (**f38)[10];
     62int (* const *f39)[];
     63int (* const *f40)[10];
    6464int (* const * const f41)[];
    6565int (* const * const f42)[10];
    6666
    67 int f43[0][3];
     67int f43[][3];
    6868int f44[3][3];
    69 int (f45[0])[3];
     69int (f45[])[3];
    7070int (f46[3])[3];
    71 int ((f47[0]))[3];
     71int ((f47[]))[3];
    7272int ((f48[3]))[3];
    7373
    74 int * f49[0][3];
    75 int * f50[3][3];
    76 int ** f51[0][3];
    77 int ** f52[3][3];
    78 int * const * f53[0][3];
    79 int * const * f54[3][3];
    80 int * const * const f55[0][3];
     74int *f49[][3];
     75int *f50[3][3];
     76int **f51[][3];
     77int **f52[3][3];
     78int * const *f53[][3];
     79int * const *f54[3][3];
     80int * const * const f55[][3];
    8181int * const * const f56[3][3];
    8282
    83 int (* f57[0][3]);
    84 int (* f58[3][3]);
    85 int (** f59[0][3]);
    86 int (** f60[3][3]);
    87 int (* const * f61[0][3]);
    88 int (* const * f62[3][3]);
    89 int (* const * const f63[0][3]);
     83int (*f57[][3]);
     84int (*f58[3][3]);
     85int (**f59[][3]);
     86int (**f60[3][3]);
     87int (* const *f61[][3]);
     88int (* const *f62[3][3]);
     89int (* const * const f63[][3]);
    9090int (* const * const f64[3][3]);
    9191
     
    9393int (f66)(int);
    9494
    95 int * f67(int);
    96 int ** f68(int);
    97 int * const * f69(int);
     95int *f67(int);
     96int **f68(int);
     97int * const *f69(int);
    9898int * const * const f70(int);
    9999
     
    104104int * const * const (f74)(int);
    105105
    106 int (* f75)(int);
    107 int (** f76)(int);
    108 int (* const * f77)(int);
     106int (*f75)(int);
     107int (**f76)(int);
     108int (* const *f77)(int);
    109109int (* const * const f78)(int);
    110110
    111 int (*(* f79)(int))();
     111int (*(*f79)(int))();
    112112int (*(* const f80)(int))();
    113113int (* const(* const f81)(int))();
     
    119119//int fe2()[];                          // returning an array
    120120//int fe3()();                          // returning a function
    121 //int (* fe4)()();                              // returning a function
    122 //int ((* fe5())())[];                  // returning an array
     121//int (*fe4)()();                               // returning a function
     122//int ((*fe5())())[];                   // returning an array
    123123
    124 #ifdef __CFA__
    125124// Cforall extensions
    126125
     
    130129const * const * int cf6;
    131130
    132 [0] int cf15;
     131[] int cf15;
    133132[10] int cf16;
    134133
    135 [0] * int cf19;
     134[] * int cf19;
    136135[10] * int cf20;
    137 int ** cf21[0];
     136int **cf21[];
    138137[10] * * int cf22;
    139 [0] * const * int cf23;
     138[] * const * int cf23;
    140139[10] * const * int cf24;
    141 [0] const * const * int cf25;
     140[] const * const * int cf25;
    142141[10] const * const * int cf26;
    143142
     
    151150const * const * [10] int cf42;
    152151
    153 [0][3] int cf43;
     152[][3] int cf43;
    154153[3][3] int cf44;
    155154
    156 [0][3] * int cf49;
     155[][3] * int cf49;
    157156[3][3] * int cf50;
    158 [0][3] * * int cf51;
     157[][3] * * int cf51;
    159158[3][3] * * int cf52;
    160 [0][3] const * int cf53;
     159[][3] const * int cf53;
    161160[3][3] * const * int cf54;
    162 [0][3] const * const * int cf55;
     161[][3] const * const * int cf55;
    163162[3][3] const * const * int cf56;
    164163
     
    174173
    175174*[]*[]* [ *[]*[] int ]( *[]*[] int, *[]*[] int ) v3;
    176 #endif // __CFA__
    177175
    178176//Dummy main
    179 int main( int argc, char const * argv[] ) {
    180         #pragma message( "Compiled" )                                           // force non-empty .expect file
     177int main(int argc, char const *argv[])
     178{
     179        return 0;
    181180}
    182181
  • tests/voidPtr.cfa

    r08e8851 r2ff78aae  
    1313        if ( ! a ) {
    1414                abort();
    15         }
    16         printf( "done\n" );                             // non-empty .expect file
     15        }       
    1716}
    1817
  • tests/warnings/.expect/self-assignment.txt

    r08e8851 r2ff78aae  
    2424... to:
    2525  reference to signed int
    26 warnings/self-assignment.cfa: In function '_X4mainFi___1':
    27 warnings/self-assignment.cfa:36:9: note: #pragma message: Compiled
  • tests/warnings/self-assignment.cfa

    r08e8851 r2ff78aae  
    1010// Created On       : Thu Mar 1 13:53:57 2018
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sun Sep 27 09:24:34 2020
    13 // Update Count     : 6
     12// Last Modified On : Wed Feb 20 07:56:17 2019
     13// Update Count     : 3
    1414//
    1515
     
    3131        s.i = s.i;
    3232        t.s.i = t.s.i;
    33 
    34         #pragma message( "Compiled" )                   // force non-empty .expect file
    3533}
    3634
    3735// Local Variables: //
    3836// tab-width: 4 //
    39 // compile-command: "cfa self-assignment.cfa" //
     37// compile-command: "cfa dtor-early-exit" //
    4038// End: //
  • tests/zombies/structMember.cfa

    r08e8851 r2ff78aae  
    5353// C useless declarations
    5454
    55 #ifdef ERROR
    5655        int;
    5756        TD;
     
    7170        W(int);
    7271        W(int).X;
    73 #endif // ERROR
    7472};
    7573
  • tools/gdb/utils-gdb.py

    r08e8851 r2ff78aae  
    4444STACK = []
    4545
     46# A global variable to keep all system task name
     47SysTask_Name = ["uLocalDebuggerReader", "uLocalDebugger", "uProcessorTask", "uBootTask", "uSystemTask",
     48"uProcessorTask", "uPthread", "uProfiler"]
     49
    4650not_supported_error_msg = "Not a supported command for this language"
    4751
     
    97101        return cluster_root
    98102
    99 def get_sched_lock():
    100         """
    101         Return: gdb.Value of __scheduler_lock
    102         """
    103         lock = gdb.parse_and_eval('_X16__scheduler_lockPS20__scheduler_RWLock_t_1')
    104         if lock.address == 0x0:
    105                 print('No scheduler lock, program terminated')
    106         return lock
    107 
    108 def all_clusters():
    109         if not is_cforall():
    110                 return None
    111 
    112         cluster_root = get_cluster_root()
    113         if cluster_root.address == 0x0:
    114                 return
    115 
    116         curr = cluster_root
    117         ret = [curr]
    118 
    119         while True:
    120                 curr = curr['_X4nodeS26__cluster____dbg_node_cltr_1']['_X4nextPS7cluster_1']
    121                 if curr == cluster_root:
    122                         break
    123 
    124                 ret.append(curr)
    125 
    126         return ret
    127 
    128 def all_processors():
    129         if not is_cforall():
    130                 return None
    131 
    132         cfa_t = get_cfa_types()
    133 
    134         # get processors from registration to the RWlock
    135         lock = get_sched_lock()
    136 
    137         #get number of elements
    138         count = lock['_X5readyVj_1']
    139 
    140         #find all the procs
    141         raw_procs = [lock['_X4dataPS21__scheduler_lock_id_t_1'][i]['_X6handleVPS16__processor_id_t_1'] for i in range(count)]
    142 
    143         # pre cast full procs
    144         procs = [p.cast(cfa_t.processor_ptr) for p in raw_procs if p['_X9full_procb_1']]
    145 
    146         # sort procs by clusters
    147         return sorted(procs, key=lambda p: p['_X4cltrPS7cluster_1'])
    148 
    149 def tls_for_pthread(pthrd):
    150         prev = gdb.selected_thread()
    151         inf = gdb.selected_inferior()
    152 
    153         thrd = inf.thread_from_thread_handle( pthrd )
    154         thrd.switch()
    155         tls = gdb.parse_and_eval('&_X9kernelTLSS16KernelThreadData_1')
    156 
    157         prev.switch()
    158         return tls
    159 
    160 def tls_for_proc(proc):
    161         return tls_for_pthread(proc['_X13kernel_threadm_1'])
    162 
    163 def thread_for_pthread(pthrd):
    164         return tls_for_pthread(pthrd)['_X11this_threadVPS7$thread_1']
    165 
    166 def thread_for_proc(proc):
    167         return tls_for_proc(proc)['_X11this_threadVPS7$thread_1']
    168 
    169 
    170 
    171103def find_curr_thread():
    172104        # btstr = gdb.execute('bt', to_string = True).splitlines()
     
    176108        # return btstr[0].split('this=',1)[1].split(',')[0].split(')')[0]
    177109        return None
     110
     111def all_clusters():
     112        if not is_cforall():
     113                return None
     114
     115        cluster_root = get_cluster_root()
     116        if cluster_root.address == 0x0:
     117                return
     118
     119        curr = cluster_root
     120        ret = [curr]
     121
     122        while True:
     123                curr = curr['_X4nodeS26__cluster____dbg_node_cltr_1']['_X4nextPS7cluster_1']
     124                if curr == cluster_root:
     125                        break
     126
     127                ret.append(curr)
     128
     129        return ret
     130
    178131
    179132def lookup_cluster(name = None):
     
    286239        """Cforall: Display currently known processors
    287240Usage:
    288         info processors                 : print out all the processors
     241        info processors                 : print out all the processors in the Main Cluster
     242        info processors all             : print out all processors in all clusters
    289243        info processors <cluster_name>  : print out all processors in a given cluster
    290244"""
     
    293247                super(Processors, self).__init__('info processors', gdb.COMMAND_USER)
    294248
    295         def print_processor(self, processor):
    296                 should_stop = processor['_X12do_terminateVb_1']
    297                 if not should_stop:
    298                         midle = processor['_X6$linksS7$dlinks_S9processor__1']['_X4nextS9$mgd_link_Y13__tE_generic___1']['_X4elemPY13__tE_generic__1'] != 0x0
    299                         end   = processor['_X6$linksS7$dlinks_S9processor__1']['_X4nextS9$mgd_link_Y13__tE_generic___1']['_X10terminatorPv_1'] != 0x0
    300 
    301                         status = 'Idle' if midle or end else 'Active'
    302                 else:
     249        def print_processor(self, name, status, pending, address):
     250                print('{:>20}  {:>11}  {:>13}  {:>20}'.format(name, status, pending, address))
     251
     252        def iterate_procs(self, root, active):
     253                if root == 0x0:
     254                        return
     255
     256                cfa_t = get_cfa_types()
     257                curr = root
     258
     259                while True:
     260                        processor = curr
     261                        should_stop = processor['_X12do_terminateVb_1']
    303262                        stop_count  = processor['_X10terminatedS9semaphore_1']['_X5counti_1']
    304                         status_str  = 'Last Thread' if stop_count >= 0 else 'Terminating'
    305                         status      = '{}({},{})'.format(status_str, should_stop, stop_count)
    306 
    307                 print('{:>20}  {:>11}  {:<7}  {:<}'.format(
    308                         processor['_X4namePKc_1'].string(),
    309                         status,
    310                         str(processor['_X18pending_preemptionb_1']),
    311                         str(processor)
    312                 ))
    313                 tls = tls_for_proc( processor )
    314                 thrd = tls['_X11this_threadVPS7$thread_1']
    315                 if thrd != 0x0:
    316                         tname = '{} {}'.format(thrd['self_cor']['name'].string(), str(thrd))
    317                 else:
    318                         tname = None
    319 
    320                 print('{:>20}  {}'.format('Thread', tname))
    321                 print('{:>20}  {}'.format('TLS', tls))
     263                        if not should_stop:
     264                                status = 'Active' if active else 'Idle'
     265                        else:
     266                                status_str  = 'Last Thread' if stop_count >= 0 else 'Terminating'
     267                                status      = '{}({},{})'.format(status_str, should_stop, stop_count)
     268
     269                        self.print_processor(processor['_X4namePKc_1'].string(),
     270                                        status, str(processor['_X18pending_preemptionb_1']), str(processor)
     271                                )
     272
     273                        curr = curr['_X4nodeS28__processor____dbg_node_proc_1']['_X4nextPS9processor_1']
     274
     275                        if curr == root or curr == 0x0:
     276                                break
    322277
    323278        #entry point from gdb
     
    327282
    328283                if not arg:
     284                        clusters = [lookup_cluster(None)]
     285                elif arg == "all":
    329286                        clusters = all_clusters()
    330287                else:
     
    335292                        return
    336293
    337                 procs = all_processors()
    338 
    339                 print('{:>20}  {:>11}  {:<7}  {}'.format('Processor', '', 'Pending', 'Object'))
    340                 print('{:>20}  {:>11}  {:<7}  {}'.format('Name', 'Status', 'Yield', 'Address'))
    341                 cl = None
    342                 for p in procs:
    343                         # if this is a different cluster print it
    344                         if cl != p['_X4cltrPS7cluster_1']:
    345                                 if cl:
    346                                         print()
    347                                 cl = p['_X4cltrPS7cluster_1']
    348                                 print('Cluster {}'.format(cl['_X4namePKc_1'].string()))
    349 
    350                         # print the processor information
    351                         self.print_processor(p)
     294                cfa_t = get_cfa_types()
     295                for cluster in clusters:
     296                        print('Cluster: "{}"({})'.format(cluster['_X4namePKc_1'].string(), cluster.cast(cfa_t.cluster_ptr)))
     297
     298                        active_root = cluster.cast(cfa_t.cluster_ptr) \
     299                                        ['_X5procsS8__dllist_S9processor__1'] \
     300                                        ['_X4headPY15__TYPE_generic__1'] \
     301                                        .cast(cfa_t.processor_ptr)
     302
     303                        idle_root = cluster.cast(cfa_t.cluster_ptr) \
     304                                        ['_X5idlesS8__dllist_S9processor__1'] \
     305                                        ['_X4headPY15__TYPE_generic__1'] \
     306                                        .cast(cfa_t.processor_ptr)
     307
     308                        if idle_root != 0x0 or active_root != 0x0:
     309                                self.print_processor('Name', 'Status', 'Pending Yield', 'Address')
     310                                self.iterate_procs(active_root, True)
     311                                self.iterate_procs(idle_root, False)
     312                        else:
     313                                print("No processors on cluster")
    352314
    353315                print()
Note: See TracChangeset for help on using the changeset viewer.